[我自己解决了这个问题,看看我的答案]
我在控制器方法集中正确获取IList <>参数的表单值时遇到问题.
我的控制器类看起来像这样:
public class ShoppingBasketController : Controller { public ActionResult Index() { return View(); } [AcceptVerbs(HttpVerbs.Post)] public ActionResult Add(IListitems) { 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++; } } %>
哪个产生标记如:
我已经检查了提交的表单值并且它们是正确的.正确数量的ShoppingBasketItem
S还获得投入Session["basket"
然而],无论是ItemID
和ItemQuantity
每一个都是零.它似乎正确解码了表单值列表,但没有自己获取属性.
我正在使用MVC RC2,根据Scott Hanselman的一篇文章,我非常确定我的代码是正确的.我错过了什么吗?
解
下载MVC源代码后,我仍然无法理解为什么它不起作用,所以我认为它必须与我试图绑定的类型有关.果然,价值是成员变量,而不是属性,是罪魁祸首.这是因为模型绑定器使用反射来设置属性,而这些属性是通过调用找不到的TypeDescriptor.GetProperties(Type)
.
将值类更新为此解决了它(在击中墙后几小时我应该添加!!):
public class ShoppingBasketItem { public int ItemID { get; set; } public int ItemQuantity { get; set; } }