我發現這方面的其他主題,但他們都不讓我明白我想弄清楚。MVC 3:HTML.DisplayFor和Lambda表達式
我學習MVC 3,我有我的包裹的頭周圍,在腳手架模板,@ HTML.DisplayFor()去Lambda表達式的問題。
我與MvcMusicStore示例應用程序的工作,由腳手架創建的視圖看起來像這樣:
@model IEnumerable<MvcMusicStore.Models.Album>
...
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Genre.Name)
</td>
我明白DisplayFor是一個擴展方法爲HTML和,它需要一個表達式作爲參數。我研究了Lambda表達式並在其他上下文中理解它們,例如使用可枚舉的字符串。例如:
cities.Where(s => s.StartsWith("L"));
什麼博格爾斯我心中是,在第二個例子中,表達式(S)的第一部分實際上是在第二部分(s.startswith ..)使用,因此它是有道理的我得到了該程序正在做的事情。但是在MVC 3視圖中情況並非如此。 modelItem不在任何地方使用。我試圖重新命名只是「modelItem」到任何像這樣:
@Html.DisplayFor(iAmWearingShortPantsToday => item.Genre.Name)
此代碼的作品一樣好,顯示所有的項目和值正常。這讓我懷疑在這種情況下,「modelItem」實際上用於任何事情。但是,那爲什麼呢?
我自己也嘗試把這種Lambda表達式爲代表(我相信這是對的縮寫形式),像這樣:
@(Html.DisplayFor(delegate(IEnumerable<MvcMusicStore.Models.Album> modelItem) { return item.Genre.Name; }))
然而,這是行不通的。產生的錯誤是:
CS1946:匿名方法表達式不能轉換爲表達式樹
因此我的問題:
什麼是「modelItem」好? HTML.DisplayFor()用modelItem做什麼?也許還有其他一些情況,表達式的第一部分變得很重要?
如果有可能這種表達成適當的委託翻譯,這也可能會幫助我瞭解什麼確切回事。
非常感謝
mint -good question +1 – 2012-07-27 13:48:13