当前位置:  开发笔记 > 后端 > 正文

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

如何解决《ASP.NETMVC模型绑定IList<>参数》经验,为你挑选了1个好方法。

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

我在控制器方法集中正确获取IList <>参数的表单值时遇到问题.

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

public class ShoppingBasketController : Controller {

    public ActionResult Index() {
        return View();
    }

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Add(IList 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++;
    }
} %>

哪个产生标记如:

我已经检查了提交的表单值并且它们是正确的.正确数量的ShoppingBasketItemS还获得投入Session["basket"然而],无论是ItemIDItemQuantity每一个都是零.它似乎正确解码了表单值列表,但没有自己获取属性.

我正在使用MVC RC2,根据Scott Hanselman的一篇文章,我非常确定我的代码是正确的.我错过了什么吗?



1> roryf..:

下载MVC源代码后,我仍然无法理解为什么它不起作用,所以我认为它必须与我试图绑定的类型有关.果然,价值是成员变量,而不是属性,是罪魁祸首.这是因为模型绑定器使用反射来设置属性,而这些属性是通过调用找不到的TypeDescriptor.GetProperties(Type).

将值类更新为此解决了它(在击中墙后几小时我应该添加!!):

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

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有