[Je résolu moi-même, voir ma réponse pour la cause]modèle ASP.NET MVC lier un paramètre IList <>
Je vais avoir du mal à obtenir des valeurs de formulaire pour un IList <> argument dans une méthode de commande régler correctement.
Ma classe de contrôleur ressemble à ceci:
public class ShoppingBasketController : Controller {
public ActionResult Index() {
return View();
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Add(IList<ShoppingBasketItem> items) {
Session["basket"] = items; // for testing
return RedirectToAction("Index");
}
}
public class ShoppingBasketItem {
public int ItemID;
public int ItemQuantity;
}
La forme légèrement garni:
<% using (Html.BeginForm("Add", "ShoppingBasket")) { %>
<% int codeIndex = 0;
foreach (Product product in products) { %>
<%= Html.Hidden("items[" + codeIndex + "].ItemID", product.Id) %>
<%= Html.TextBox("items[" + codeIndex + "].ItemQuantity", "0", new { size = "2"}) %>
<% codeIndex++;
}
} %>
qui produit le balisage comme:
<form action="/Basket/Add" method="post">
<input id="items[0]_ItemID" name="items[0].ItemID" type="hidden" value="1" />
<input id="items[0]_ItemQuantity" name="items[0].ItemQuantity" size="2" type="text" value="0" />
<input id="items[1]_ItemID" name="items[1].ItemID" type="hidden" value="2" />
<input id="items[1]_ItemQuantity" name="items[2].ItemQuantity" size="2" type="text" value="0" />
<input id="items[2]_ItemID" name="items[2].ItemID" type="hidden" value="3" />
<input id="items[2]_ItemQuantity" name="items[2].ItemQuantity" size="2" type="text" value="0" />
</form>
J'ai vérifié les valeurs de formulaire être soumis et ils sont corrects. Le nombre correct de ShoppingBasketItem
est également mis dans Session["basket"
], cependant les deux ItemID
et ItemQuantity
sont zéro. Il semble décoder correctement la liste des valeurs de formulaire, mais pas les propriétés elles-mêmes. J'utilise MVC RC2, et basé sur un article by Scott Hanselman je suis assez sûr que mon code est correct. Est-ce que je manque quelque chose?
Y at-il un moyen de faire ce travail avec des modèles d'interface utilisateur, en utilisant un EditorFor (m => m.product) pour chaque itération dans les produits? –
Merci. J'ai trouvé cela vraiment utile. :) –