ror*_*ryf 27 asp.net asp.net-mvc model-binding
[我自己解决了这个问题,看看我的答案]
我在控制器方法集中正确获取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;
}
Run Code Online (Sandbox Code Playgroud)
略微修剪的形式:
<% 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++;
}
} %>
Run Code Online (Sandbox Code Playgroud)
哪个产生标记如:
<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>
Run Code Online (Sandbox Code Playgroud)
我已经检查了提交的表单值并且它们是正确的.正确数量的ShoppingBasketItem
S还获得投入Session["basket"
然而],无论是ItemID
和ItemQuantity
每一个都是零.它似乎正确解码了表单值列表,但没有自己获取属性.
我正在使用MVC RC2,根据Scott Hanselman的一篇文章,我非常确定我的代码是正确的.我错过了什么吗?
ror*_*ryf 35
解
下载MVC源代码后,我仍然无法理解为什么它不起作用,所以我认为它必须与我试图绑定的类型有关.果然,价值是成员变量,而不是属性,是罪魁祸首.这是因为模型绑定器使用反射来设置属性,而这些属性是通过调用找不到的TypeDescriptor.GetProperties(Type)
.
将值类更新为此解决了它(在击中墙后几小时我应该添加!!):
public class ShoppingBasketItem {
public int ItemID { get; set; }
public int ItemQuantity { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15808 次 |
最近记录: |