15

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

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

...但到底是modelItem =>什么?回到我的时代,=>曾经是一个被评估为布尔值的运算符。这是什么法术?

4

2 回答 2

12

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

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

否则,您正试图从外部范围关闭“项目”。如果这是你真正想要做的,那么 modelItem 基本上什么都不做......

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

于 2012-04-19T12:13:08.343 回答
3

我刚刚modelItem在一些脚手架的 MVC 代码中看到,我想我只是添加到 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 所说)什么都不做(结果中没有使用它)。返回 IEnumerable 中该item.LastName项目的实际 LastName,DisplayFor并将为数据类型生成正确的 html。

于 2015-04-30T15:03:34.447 回答