ASP.NET MVC模型绑定IList <>参数

前端之家收集整理的这篇文章主要介绍了ASP.NET MVC模型绑定IList <>参数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
[我自己解决了,查看我的答案原因]

我无法获取IList<>的表单值。控制器方法中的参数设置正确。

我的控制器类看起来像这样:

  1. public class ShoppingBasketController : Controller {
  2.  
  3. public ActionResult Index() {
  4. return View();
  5. }
  6.  
  7. [AcceptVerbs(HttpVerbs.Post)]
  8. public ActionResult Add(IList<ShoppingBasketItem> items) {
  9. Session["basket"] = items; // for testing
  10. return RedirectToAction("Index");
  11. }
  12. }
  13. public class ShoppingBasketItem {
  14. public int ItemID;
  15. public int ItemQuantity;
  16. }

略微修剪的形式:

  1. <% using (Html.BeginForm("Add","ShoppingBasket")) { %>
  2. <% int codeIndex = 0;
  3. foreach (Product product in products) { %>
  4. <%= Html.Hidden("items[" + codeIndex + "].ItemID",product.Id) %>
  5. <%= Html.TextBox("items[" + codeIndex + "].ItemQuantity","0",new { size = "2"}) %>
  6. <% codeIndex++;
  7. }
  8. } %>

其中产生标记像:

  1. <form action="/Basket/Add" method="post">
  2. <input id="items[0]_ItemID" name="items[0].ItemID" type="hidden" value="1" />
  3. <input id="items[0]_ItemQuantity" name="items[0].ItemQuantity" size="2" type="text" value="0" />
  4.  
  5. <input id="items[1]_ItemID" name="items[1].ItemID" type="hidden" value="2" />
  6. <input id="items[1]_ItemQuantity" name="items[2].ItemQuantity" size="2" type="text" value="0" />
  7.  
  8. <input id="items[2]_ItemID" name="items[2].ItemID" type="hidden" value="3" />
  9. <input id="items[2]_ItemQuantity" name="items[2].ItemQuantity" size="2" type="text" value="0" />
  10. </form>

我检查了提交的表单值,它们是正确的。正确数量的ShoppingBasketItems也被放入Session [“basket”],但是每个的ItemID和ItemQuantity都为零。它似乎正在解码表单值的列表,但不是拾取属性本身。

我使用MVC RC2,并基于一个article by Scott Hanselman我很确定我的代码是正确的。我缺少什么?

解决方法

下载MVC源后,我仍然不能明白为什么它不工作,所以我推测它必须与我试图绑定的类型有关。果然,值是成员变量,而不是属性,是罪魁祸首。这是因为模型绑定器使用反射来设置属性,这是通过调用TypeDescriptor.GetProperties(Type)找不到的。

更新值类,到这个解决它(在几个小时的打头后,我应该添加!!):

  1. public class ShoppingBasketItem {
  2. public int ItemID { get; set; }
  3. public int ItemQuantity { get; set; }
  4. }

猜你在找的asp.Net相关文章