我发现这个Related Topic,但它没能回答我的问题。这个lambda表达式为什么起作用?
时自动创建一个强类型的视图,让有List
脚手架模板说,我要得到的东西大体是这样:
@model IEnumerable<Test.Models.abc>
<table>
<tr>
<th>
@Html.DisplayNameFor(model => model.ID)
</th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.ID)
</td>
</tr>
}
</table>
我明白@Html.DisplayNameFor(model => model.ID)
完全,但不@Html.DisplayFor(modelItem => item.ID)
。
modelItem
的用途是什么?用任意文本替换它将导致功能性网页。看起来,modelItem只是一个一扔的词。我想我真正的问题是为什么不工作?
@Html.DisplayFor(item => item.ID)
编辑
好点的被带到了意见。看来你也能够改变model
任何东西,只要你改变它的lambda表达式的两边:
@Html.DisplayNameFor(abc => abc.ID)
A面的问题是:如何在顶部的@model
声明影响下面的功能?我以前认为model
引用了@model
表达式,以便通过该类找出显示名称,但该页面在提及的更改之后仍然有效。
为什么你理解第一个而不是第二个?你也可以用任何单词替换'model'。 – GSerg
在这种情况下,您需要将'model'的两个实例更改为相同的东西。所以我想我完全不了解它。我的印象是'model'引用了第一行,告诉它要使用哪个类/模型。谨慎解释? – Jeff
不,模型意味着什么,因为C#区分大小写,实际模型是“模型”。在你的第一个lambda中,返回值取决于lambda参数。 (编译器知道这个参数是你的'Model'类型的,你实际上并没有传递你的'Model',你传递了指令 - Model的property属性。)这就是为什么它必须是相同的变量名左和右。在你的第二个lambda中,你想要的结果不依赖于lambda参数,但是你仍然需要传递一个参数。这就是为什么它的名字不重要,它只是被丢弃。 – GSerg