为什么在DisplayNameFor()中需要lambda表达式?

时间:2015-09-17 01:02:42

标签: c# asp.net-mvc

示例代码:

<th>@Html.DisplayNameFor(model => model.Artist.Name)</th>

为什么lambda表达式是必需的?为什么不能只是

<th>@Html.DisplayNameFor(model.Artist.Name)</th>

2 个答案:

答案 0 :(得分:6)

这是使用表达式树的技巧。

第一个在运行时构造一个表达式树,允许该方法进入并找到被访问的成员(从而获得它的所有属性)。

第二个只是将Name的值传递给方法。

答案 1 :(得分:2)

请记住,您的模型只是一般数据结构的定义,并且在运行时绑定,以确定应将模型的实际值设置为什么,具体取决于用于访问数据的参数。

您所看到的只是为了实现此目的而定义DisplayNameFor方法的方式,并且您的第二行代码无效。 DisplayNameFor是HTML帮助程序的扩展方法,它接受一个lambda表达式作为单个参数,该表达式标识要显示的模型和模型的属性,以便实际的数据检索可以在运行时进行。请参阅此处以获取该方法的正式定义:

https://msdn.microsoft.com/en-us/library/hh833697(v=vs.118).aspx