在此MVC腳手架代碼中,我瞭解正在使用模板,並且可以定義自己的模板。 另外,發送到視圖的對象上的數據註釋正在被考慮。MVC數據註釋和模板
但是什麼是modelItem?
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.ReferenceNum)
</td>
在此MVC腳手架代碼中,我瞭解正在使用模板,並且可以定義自己的模板。 另外,發送到視圖的對象上的數據註釋正在被考慮。MVC數據註釋和模板
但是什麼是modelItem?
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.ReferenceNum)
</td>
在你的榜樣,爲Html.DisplayFor參數是一個lambda表達式:給定一個modelItem,你指的是modelItem.ReferenceNum財產。 modelItem與Model有相同的類型。
備註:它應該讀取modelItem => modelItem.ReferenceNum。否則:item => item.ReferenceNum。
短awnser是Model
和參數modelitem
以發送到DisplayFor的lambda是同一個對象。
Html
在這種情況下是視圖類中的HtmlHelper類型的屬性。在這種情況下,T是您傳遞給視圖的視圖狀態的類型。
該視圖公開您的視圖狀態,如您所注意的,它的Model
屬性。它還使用具有相同值的HtmlHelper實現了其Html
屬性,因此當您使用Html
屬性時,它實際上會將相同的值再次傳遞給您提供的lambda。
這裏的名稱modelItem只是你的lambda的名字,它可以是任何東西。
modelitem
是一個unuses後臺變量。
DisplayFor
需要接收單個參數的方法。 該方法的實現實際上是lambda表達式的右側:item.[SOMETHING]
。 恰好item.[SOMETHING]
完全忽略了modelitem
。 用item
替換modelitem
當然會導致編譯錯誤,因爲item
屬於Model
,並且它不是在調用匿名方法{ item.[SOMETHING] }
時創建的對象。
這就是爲什麼modelitem
幾乎可以是符號表中尚不存在的任何名稱(即編譯器尚未定義)。