2012-04-19 45 views
13

下面是代碼採樣線,其通常由Visual Studio在MVC類型的應用程序的生成:基本MVC:「modelItem =>」是做什麼的?

@Html.DisplayFor(modelItem => item.LastName) 
  • 我明白剃刀作品(該@
  • 我理解HTML如何是一個對象與靜態輔助功能,如DisplayFor()
  • 我明白item.LastName,因爲這代表了鬆散的從數據/模型行和列

...但是什麼是modelItem =>?回到我的日子,=>曾經是一個被評估爲布爾值的運算符。這個巫術是什麼?

+1

符號是C#,而不是MVC特定的。請參閱MSDN:http://msdn.microsoft.com/en-us/library/bb311046.aspx – Oded 2012-04-19 12:17:10

+0

哇,我喜歡這個問題! :) – Romias 2013-07-31 00:16:56

回答

12

你在那裏做的是傳遞一個lambda表達式。這些與C中的代表,函數指針或Javascript中的函數基本相同。您基本上告訴Html DisplayFor「使用此功能獲取顯示項目」。你的例子應該實際上應該是:

@Html.DisplayFor(modelItem => modelItem.LastName) 

否則,你試圖從外部範圍關閉「item」。如果這是你真正想要做的,然後modelItem基本上無所事事......

看到http://msdn.microsoft.com/en-us/library/bb397687.aspx

1

我剛纔看到modelItem在一些腳手架MVC代碼,我還以爲我只是添加到balelesticks回答。

在問題的一段代碼可能來自一個標準的MVC腳手架索引圖(其中該模型是IEnumberable<TModel>),並且具有此周圍:

@foreach (var item in Model) { 

} 

使用DisplayFor這種過載的代碼:

public static MvcHtmlString DisplayFor<TModel, TValue>(
    this HtmlHelper<TModel> html, 
    Expression<Func<TModel, TValue>> expression 
) 

因此modelItem(如bunglestink說的)是什麼都不做(它不是在結果中使用)。 item.LastName返回IEnumerable中該項目的實際姓氏,DisplayFor將生成該數據類型的正確html。