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

标签 asp.net asp.net-mvc model-binding

[我自己解决了这个问题,请参阅我的答案]

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

我的 Controller 类如下所示:

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" ],但是 ItemIDItemQuantity每个都是零。它似乎正确解码了表单值列表,但没有获取属性本身。

我正在使用 MVC RC2,并基于 article by Scott Hanselman我很确定我的代码是正确的。我错过了什么吗?

最佳答案

解决方案

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

将值类更新为此解决了它(经过数小时的撞墙后,我应该添加!!):

public class ShoppingBasketItem {
    public int ItemID { get; set; }
    public int ItemQuantity { get; set; }
}

关于ASP.NET MVC 模型绑定(bind) IList<> 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/653514/

相关文章:

C# ASP.NET MVC 返回上一页

c# - ASP.NET 身份电子邮件验证 token 始终无效

asp.net-core - 全局错误处理程序,包括模型绑定(bind)器错误

asp.net-mvc - 使用 Ajax.BeginForm 绑定(bind) HttpPostedFileBase

asp.net - TypeError : theForm. 提交不是 asp:LoginStatus 的函数

c# - ASP.NET Web 应用程序在部署后不会卸载 AppDomains

c# - 无法加载文件或程序集 'System.Web.Razor' 或其依赖项之一

c# - 如何链接到 ASP.NET MVC 中的可下载文件?

c# - 从 GridView 导出为 PDF

c# - Asp.net 核心模型不从表单绑定(bind)