0

我有一个非常奇怪的。

我有一个主从关系,我们称之为 Order 和 OrderItem。在首页上,我有一个订单列表,在每一行旁边都有一个“编辑”链接,该链接将我带到一个编辑页面。我需要在顶部显示订单详细信息,并在底部编辑订单项目详细信息。

然而,“订单项目”表单的“ID”隐藏字段显示“订单”ID 值。更奇怪的是,DisplayFor 显示了正确的值,而 HiddenFor 和 EditorFor 显示了“订单”的 Id 值。

我正在使用视图模型来包含我在控制器中填充的 Razor 视图的 Master 和 Detail 实体。

假设 Order# = 16 和 OrderItem# = 7

所以 :

@model vmOrder // ViewModel that contains myOrder and MyOrderItems.

@Html.EditorFor(m=>m.myOrderItems.First().Id) // Produce 16
@Html.HiddenFor(m=>m.myOrderItems.First().Id) // Produce 16
@Html.DisplayFor(m=>m.myOrderItems.First().Id) // Produce 7 which is correct.

由于其他原因,我确实打算只返回第一条记录,因此返回“First()”。似乎MVC变得混乱......

有什么想法吗。对我来说似乎最奇怪?

非常感谢,

山姆

4

1 回答 1

1

是什么myOrderItems?如果它包含延迟 LINQ 查询的结果,则每次调用First它都会重新评估查询。根据您编写查询的方式,这可能会导致值发生变化。

如果 myOrderItems 是IEnumerable,请确保您正在调用ToListToArray强制查询运行。

第二,不要First多次调用。尝试这样的事情。

@model vmOrder // ViewModel that contains myOrder and MyOrderItems.

@var first = Model.myOrderItems.First()
@Html.EditorFor(m => first.Id)
@Html.HiddenFor(m => first.Id) 
@Html.DisplayFor(m => first.Id)
于 2013-07-02T18:03:54.503 回答