Asp.net mvc 基本MVC:什么是;modelItem=>&引用;做
下面是Visual Studio在MVC类型的应用程序中经常生成的代码示例行:Asp.net mvc 基本MVC:什么是;modelItem=>&引用;做,asp.net-mvc,asp.net-mvc-3,razor,Asp.net Mvc,Asp.net Mvc 3,Razor,下面是Visual Studio在MVC类型的应用程序中经常生成的代码示例行: @Html.DisplayFor(modelItem => item.LastName) 我了解剃须刀的工作原理(代码) 我知道Html是一个带有静态帮助函数的对象,比如DisplayFor() 我理解item.LastName,因为它松散地表示数据/模型中的行和列 …但究竟是什么呢modelItem=>?回到我的时代,=>曾经是一个计算为布尔值的运算符。这是什么魔法?你在那里做的是传递一个lambda
@Html.DisplayFor(modelItem => item.LastName)
- 我了解剃须刀的工作原理(代码)
- 我知道Html是一个带有静态帮助函数的对象,比如
DisplayFor()
- 我理解
,因为它松散地表示数据/模型中的行和列item.LastName
…但究竟是什么呢
modelItem=>
?回到我的时代,=>
曾经是一个计算为布尔值的运算符。这是什么魔法?你在那里做的是传递一个lambda表达式。它们本质上与委托、C中的函数指针或Javascript中的函数相同。您基本上是在告诉Html DisplayFor“使用此函数获取显示项”。你的例子应该是:
@Html.DisplayFor(modelItem => modelItem.LastName)
否则,您将尝试从外部作用域关闭“项”。如果这是您真正想要做的,那么modelItem实际上什么都不做
请看我刚刚在一些搭建的MVC代码中看到了
modelItem
,我想我应该添加到bullesticks的答案中
问题中的代码可能来自标准的MVC框架索引视图(其中模型是IEnumberable
),并围绕着它:
@foreach (var item in Model) {
}
代码正在使用DisplayFor的此重载:
public static MvcHtmlString DisplayFor<TModel, TValue>(
this HtmlHelper<TModel> html,
Expression<Func<TModel, TValue>> expression
)
public static MvcHtmlString DisplayFor(
这个HtmlHelper html,
表情
)
因此,modelItem(正如bunglestink所说)没有做任何事情(结果中没有使用它)。
item.LastName
返回IEnumerable中该项的实际LastName,并且DisplayFor
将为该数据类型生成正确的html。符号是C,而不是特定于MVC的。看MSDN:哇,我喜欢这个问题!:)谢谢你解释modelItem
,这一直困扰着我。