ASP.NET MVC模型绑定一个IList <>参数
-
19-08-2019 - |
题
[我解决了这个自己,看我为事业答案]
我无法得到表单值用于在控制器的方法一的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>
我已经检查了获得提交表单的价值观和他们是正确的。 ShoppingBasketItem
s的正确数量也得到投入Session["basket"
],而ItemID
和每个ItemQuantity
都为零。这似乎是正确解码形式的值的列表中,但不拾取属性本身。
我使用MVC RC2林,以及基于由斯科特汉塞尔尔曼我的文章敢肯定我的代码是正确的。我缺少的东西吗?
解决方案
<强>解决方案强>
在下载MVC源码我仍然不明白为什么这是行不通的,所以我认为它必须是与我试图绑定类型之后。果然,是成员变量的值,而不是性能,是罪魁祸首。这是因为模型粘合剂使用反射来设置属性,它不是通过调用TypeDescriptor.GetProperties(Type)
找到。
更新值类此解决了它(击球头关闭壁我要补充!!小时后):
public class ShoppingBasketItem {
public int ItemID { get; set; }
public int ItemQuantity { get; set; }
}
不隶属于 StackOverflow