【发布时间】:2010-10-13 19:15:29
【问题描述】:
[我自己解决了这个问题,请查看我的答案]
我在正确设置控制器方法中获取 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 我很确定我的代码是正确的。我错过了什么吗?
【问题讨论】:
-
有没有一种方法可以使用 UI 模板,对 Products 中的每次迭代使用 EditorFor(m => m.product)?
-
谢谢。我发现这真的很有帮助。 :)
标签: asp.net asp.net-mvc model-binding