2013-07-02 54 views
0

我有一個非常奇怪的。DisplayFor和EditorFor Helpers似乎顯示不同的Id值?

我有一個主從關係,可以稱之爲Order和OrderItem。在首頁,我有一個訂單列表,並在每行的旁邊有一個「編輯」鏈接,該鏈接將我帶到編輯頁面。我需要在頂部顯示訂單詳細信息,並在底部編輯訂單項目詳細信息。

但是,「訂單項」窗體的「Id」隱藏字段顯示「訂單」Id值。更奇怪的是,DisplayFor顯示正確的值,並且HiddenFor和EditorFor顯示「Order」Id值。

我正在使用視圖模型來包含我填充在控制器中的剃刀視圖的主和細節實體。

假設訂單#= 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. 

我的確打算只返回第一條記錄,因此 「第一()」 其他原因。看來MVC越來越模糊...

任何想法。對我來說似乎最奇怪?

非常感謝,

山姆

回答

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) 
+0

巨大的感謝,以及明智的經驗之言!!!非常感謝。會試試看。 – SamJolly

相關問題