2011-07-20 46 views
2

在此MVC腳手架代碼中,我瞭解正在使用模板,並且可以定義自己的模板。 另外,發送到視圖的對象上的數據註釋正在被考慮。MVC數據註釋和模板

但是什麼是modelItem?

@foreach (var item in Model) { 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.ReferenceNum) 
     </td> 

回答

1

在你的榜樣,爲Html.DisplayFor參數是一個lambda表達式:給定一個modelItem,你指的是modelItem.ReferenceNum財產。 modelItem與Model有相同的類型。

備註:它應該讀取modelItem => modelItem.ReferenceNum。否則:item => item.ReferenceNum。

1

短awnser是Model和參數modelitem以發送到DisplayFor的lambda是同一個對象。

Html在這種情況下是視圖類中的HtmlHelper類型的屬性。在這種情況下,T是您傳遞給視圖的視圖狀態的類型。

該視圖公開您的視圖狀態,如您所注意的,它的Model屬性。它還使用具有相同值的HtmlHelper實現了其Html屬性,因此當您使用Html屬性時,它實際上會將相同的值再次傳遞給您提供的lambda。

這裏的名稱modelItem只是你的lambda的名字,它可以是任何東西。

2

modelitem是一個unuses後臺變量。

DisplayFor需要接收單個參數的方法。 該方法的實現實際上是lambda表達式的右側:item.[SOMETHING]。 恰好item.[SOMETHING]完全忽略了modelitem。 用item替換modelitem當然會導致編譯錯誤,因爲item屬於Model,並且它不是在調用匿名方法{ item.[SOMETHING] }時創建的對象。

這就是爲什麼modelitem幾乎可以是符號表中尚不存在的任何名稱(即編譯器尚未定義)。