[我自己解决了,查看我的答案原因]
我无法获取IList<>的表单值。控制器方法中的参数设置正确。
我的控制器类看起来像这样:
- 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;
- }
略微修剪的形式:
- <% 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++;
- }
- } %>
其中产生标记像:
- <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>
我检查了提交的表单值,它们是正确的。正确数量的ShoppingBasketItems也被放入Session [“basket”],但是每个的ItemID和ItemQuantity都为零。它似乎正在解码表单值的列表,但不是拾取属性本身。
我使用MVC RC2,并基于一个article by Scott Hanselman我很确定我的代码是正确的。我缺少什么?