2012-04-19 88 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。