对不起长度,但图片值1000字:
在ASP.NET MVC 2中,输入表单字段“name”属性必须包含以下语法,您将使用它来引用C#中的对象,以便在回发时将其绑定回对象。也就是说,如果你有一个类似下面的对象,它包含多个具有多个OrderLines的Orders,那么这些名称看起来就像这样(区分大小写):
这有效:
Order[0].id
Order[0].orderDate
Order[0].Customer.name
Order[0].Customer.Address
Order[0].OrderLine[0].itemID // first order line
Order[0].OrderLine[0].description
Order[0].OrderLine[0].qty
Order[0].OrderLine[0].price
Order[0].OrderLine[1].itemID // second order line, same names
Order[0].OrderLine[1].description
Order[0].OrderLine[1].qty
Order[0].OrderLine[1].price
但是我们想在客户端浏览器中添加订单行并删除订单行。显然,索引必须从零开始,并且每个连续的索引号都包含N.
黑带忍者Phil Haack的博客文章here解释了如何删除 [0]索引,重复名称,让MVC使用[0]自动枚举重复名称符号。但是,我无法使用嵌套对象将其绑定回来:
此操作失败:
Order.id // Duplicate names should enumerate at 0 .. N
Order.orderDate
Order.Customer.name
Order.Customer.Address
Order.OrderLine.itemID // And likewise for nested properties?
Order.OrderLine.description
Order.OrderLine.qty
Order.OrderLine.price
Order.OrderLine.itemID
Order.OrderLine.description
Order.OrderLine.qty
Order.OrderLine.price
我还没有找到任何建议,它描述了如何在post上绑定嵌套的ViewModel。 现有代码示例的任何链接或与IList嵌套绑定所需的确切名称的严格示例?
史蒂夫·桑德森(Steve Sanderson)有代码执行此类事情here,但我们似乎无法将其绑定回嵌套对象。任何没有[0] .. [n]并且在编号中连续的东西都会丢弃返回对象。有什么想法吗?
答案 0 :(得分:0)
我们通过使用以下方法找到了解决方法:
Html.EditorFor(m => m, "ViewNameToUse", "FieldPrefix")
其中FieldPrefix是“object [0]”。这不是理想的,但它确实很有效。它简单而优雅。