0

抱歉篇幅太长,但一张图值 1000 字:

在 ASP.NET MVC 2 中,输入表单字段“名称”属性必须完全包含以下语法,您将使用该语法在 C# 中引用对象,以便在回发时将其绑定回对象。也就是说,如果您有一个如下所示的对象,其中它包含具有多个 OrderLine 的多个订单,则名称看起来和工作良好(区分大小写):

这有效:

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 的博客条目在这里解释了如何删除[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

我还没有找到任何建议来描述如何在帖子上绑定嵌套的 ViewModel。 任何指向现有代码示例的链接或关于使用 IList 进行嵌套绑定所需的确切名称的严格示例?

史蒂夫桑德森在这里有做这种事情的代码,但我们似乎无法让它绑定回嵌套对象。任何没有 [0]..[n] 并且编号连续的东西都会从返回对象中删除。

有任何想法吗?

4

1 回答 1

0

我们通过使用以下方法找到了解决方法:

 Html.EditorFor(m => m, "ViewNameToUse", "FieldPrefix")

其中 FieldPrefix 是“对象 [0]”。这并不理想,但它确实工作得很好。它简单而优雅。

于 2010-06-15T03:11:10.463 回答