Comment puis-je retourner la Liste ou de la Collection de Contrôleur de la Vue dans MVC 3?
Quelqu'un s'il vous plaît aidez-moi de reprendre cette liste correctement de mon point de vue. Je ne vois pas pourquoi je retourne null pour mon fieldModelList j'essaie de passer au contrôleur...
Voici mon avis:
@model List<Regions.SOA.UI.CopyBookSchemaCreator.Models.FieldModel>
<script type="text/javascript" src="~/Scripts/jquery-ui-1.8.11.min.js"></script>
@using (Html.BeginForm("GetResponse", "TestMethods", FormMethod.Post))
{
<table id="tblMethods">
<tr>
<th>
Property Name
</th>
<th>
Request
</th>
</tr>
@foreach (FieldModel fieldModel in Model)
{
<tr>
<td>
@Html.DisplayFor(m => fieldModel.PropertyName)
</td>
<td>
@Html.TextBoxFor(m => fieldModel.PropertyValue)
</td>
</tr>
}
</table>
<div>
<input type="submit"/>
</div>
et voici mon controller:
[HttpPost]
public ActionResult GetResponse(List<FieldModel> fieldModelList)
{
return GetResponse(fieldModelList);
}
Je suis frapper la HttpPost méthode, mais si je place un point d'arrêt juste à l'intérieur, je suis de retour null pour le fieldModelList droit au large de la chauve-souris, qui, je l'espérais, serait une liste des valeurs que je suis entré dans le texboxes sur la vue de modèle FieldModel...
Je pense que quelque chose est incorrect avec ma logique contre ma syntaxe, ou peut-être ainsi que mon syntaxe, mais, fondamentalement, ce que je veux faire est de retourner une liste de type FieldModel avec chaque correspondant PropertyName et PropertyValue pour le contrôleur. J'ai remarqué que je suis pas passer tout type de paramètre id dans mon BeginForm énoncé dans la vue. Ai-je besoin?
Juste au cas où, voici mon modèle de classe pour FieldModel:
namespace Regions.SOA.UI.CopyBookSchemaCreator.Models
{
public class FieldModel
{
[Display(Name = "Property")]
public string PropertyName { get; set; }
[Display(Name = "Value")]
public string PropertyValue { get; set; }
}
}
OriginalL'auteur ob1Jakobi | 2012-02-09
Vous devez vous connecter pour publier un commentaire.
Phil Haack a écrit un article il y a quelques temps d'expliquer comment lier des collections (
ICollection
) pour afficher les modèles. Il va dans les détails supplémentaires sur la création d'un éditeur de modèle que vous pourriez certainement faire aussi bien.Fondamentalement, vous avez besoin de préfixer les éléments HTML' des attributs de nom avec un index.
Ensuite, votre contrôleur pourrait lier la collection de
FieldModel
Je ne suis pas sûr à 100% la suite le nom de leurs attributs correctement (je vous recommande d'utiliser l'éditeur de modèle), mais vous pouvez facilement utiliser la
htmlAttributes
argument et lui donner un nom à l'aide de l'index.Éditeur De Modèle
Si vous vouliez aller aussi loin que l'ajout d'un éditeur de modèle, ajoutez une vue partielle nommé
FieldModel.ascx
à/Views/Shared
que est fortement typé à unFieldModel
Et, ensuite, de la part de votre point de vue responsable du rendu de la collecte ressemblerait à:
@foreach (FieldModel fieldModel in Model) { <tr> <td> @Html.DisplayFor(m => fieldModel.PropertyName) </td> <td> @Html.TextBoxFor(m => fieldModel.PropertyValue) </td> </tr> }
<br/> Comment puis-je le faire dynamiquement? Je suppose que je pourrais utiliser un i=0 compteur dans ma boucle for à la place d'une boucle dans le fieldModels? Sans doute évident, mais je ne vois pas comment faire cela en ce moment...Je l'ai déjà souligné comment le faire à l'aide d'un éditeur de modèle dans mon montage. Même si vous ne souhaitez pas utiliser l'éditeur de modèle, vous pouvez tout de même "de le faire dynamiquement" la façon dont je l'ai montré: à l'aide d'un compteur. Juste épissure dans le code HTML où vous en avez besoin.
désolé, j'ai essayé de formater ma réponse, de sorte que vous pourriez le lire mieux et ne savais pas qu'on avait encore répondu. Qui fonctionne très bien, merci!
Semble que vous l'avez obtenu le travail juste comme je l'ai posté mes résultats.. 🙂 Content que vous l'avez trié.
mon+1! grand merci mon ami!
OriginalL'auteur David Fox