DisplayFor和EditorFor Helpers似乎显示不同的Id值?

时间:2013-07-02 17:54:07

标签: asp.net-mvc asp.net-mvc-3 razor

我有一个非常奇怪的。

我有一个主 - 细节关系,我们称之为Order和OrderItem。在首页我有一个订单列表,每行我都有一个“编辑”链接,它带我进入编辑页面。我需要在顶部显示订单详细信息,并在底部编辑订单项详细信息。

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

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

假设订单#= 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变得混乱......

任何想法。对我来说似乎最离奇?

非常感谢,

萨姆

1 个答案:

答案 0 :(得分: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)