以下是Visual Studio在MVC类型的应用程序中经常生成的示例代码行:
@Html.DisplayFor(modelItem => item.LastName)
@
)DisplayFor()
item.LastName
,因为它松散地表示数据/模型中的行和列 ......但是到底是什么modelItem =>
?在我的日子里,=>
曾经是一个被评估为布尔值的运算符。这个巫术是什么?
答案 0 :(得分:12)
你正在做的是传递一个lambda表达式。这些与委托,C中的函数指针或Javascript中的函数基本相同。你基本上告诉Html DisplayFor“使用这个函数获取显示项目”。你的例子实际上应该是:
@Html.DisplayFor(modelItem => modelItem.LastName)
否则,您试图从外部范围关闭“item”。如果这是你真正想做的事情,那么modelItem基本上什么也没做......
答案 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。