我有一个非常奇怪的。
我有一个主 - 细节关系,我们称之为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变得混乱......
任何想法。对我来说似乎最离奇?
非常感谢,
萨姆
答案 0 :(得分:1)
什么是myOrderItems
?如果它包含延迟LINQ查询的结果,则每次调用First
时,它都将重新评估查询。根据您编写查询的方式,这可能会导致值发生变化。
如果myOrderItems为IEnumerable
,请确保您正在调用ToList
或ToArray
以强制查询运行。
其次,请勿多次致电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)