基本MVC:“modelItem =>”是什么做?

时间:2012-04-19 12:03:34

标签: asp.net-mvc asp.net-mvc-3 razor

以下是Visual Studio在MVC类型的应用程序中经常生成的示例代码行:

@Html.DisplayFor(modelItem => item.LastName) 
  • 我理解剃须刀是如何工作的(@
  • 我理解Html是一个具有静态帮助函数的对象,如DisplayFor()
  • 我理解item.LastName,因为它松散地表示数据/模型中的行和列

......但是到底是什么modelItem =>?在我的日子里,=>曾经是一个被评估为布尔值的运算符。这个巫术是什么?

2 个答案:

答案 0 :(得分:12)

你正在做的是传递一个lambda表达式。这些与委托,C中的函数指针或Javascript中的函数基本相同。你基本上告诉Html DisplayFor“使用这个函数获取显示项目”。你的例子实际上应该是:

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

否则,您试图从外部范围关闭“item”。如果这是你真正想做的事情,那么modelItem基本上什么也没做......

请参阅http://msdn.microsoft.com/en-us/library/bb397687.aspx

答案 1 :(得分:2)

我刚刚在一些脚手架MVC代码中看到modelItem,我想我只是添加到bunglesticks答案。

问题中的一段代码可能来自一个标准的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中该项的实际LastName,DisplayFor将为数据类型生成正确的html。

相关问题