【发布时间】:2013-01-10 16:22:09
【问题描述】:
我找到了这个Related Topic,但它没有回答我的问题。
当自动创建强类型视图时,假设使用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)
编辑
在 cmets 中提出了一个很好的观点。看来您也可以将 model 更改为任何内容,只要您在 lambda 表达式的两侧进行更改:
@Html.DisplayNameFor(abc => abc.ID)
一个附带的问题是:顶部的@model 语句如何影响下面的函数?我以前认为model 引用了@model 表达式以便通过类找出显示名称,但是在提到的更改之后页面仍然有效。
【问题讨论】:
-
为什么第一个懂,第二个不懂?你也可以用任何单词替换
model。 -
在这种情况下,您需要将
model的两个实例更改为相同的东西。所以我想我不完全理解它。我的印象是model引用了第一行,它告诉它要使用哪个类/模型。需要解释一下吗? -
不,
model没有任何意义,因为 C# 区分大小写,而实际模型是Model。在您的第一个 lambda 中,返回值取决于 lambda 参数。 (编译器知道参数是你的Model类型。你实际上并没有传递你的Model,而是传递指令——要采用Model的哪个属性。)这就是为什么它必须是相同的变量名左和右。在您的第二个 lambda 中,您想要的结果不取决于 lambda 参数,但您仍然必须传递一个参数。这就是为什么它的名字并不重要,它只是被丢弃了。 -
+1 得到了很好的回应。您应该考虑提交答案。
标签: asp.net-mvc razor