我正在学习如何使用.net实体框架,其中一个最让我困惑的表达方式就是这样:
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.EnrollmentDate)
</td>
<td>
@item.StudentCount
</td>
</tr>
}
在这个特定的例子中,我知道它显示了每个项目的注册日期,但我不理解表达式左侧的modelItem。据我所知,这是传递给操作员右侧函数的参数。但是,它没有在右侧使用,因此我无法理解其重要性。
答案 0 :(得分:0)
嗯,DisplayFor
是一个棘手的扩展。您必须阅读documentation才能理解它。
没有编译器或逻辑错误。如果您只需要为模型中的每个项目显示属性EnrollmentDate的值,那么给定的标记可以正常工作。
但是这里DispalyFor
不会为控件生成正确的名称。因此,如果它仅用于显示它很好,但如果您想将输入元素的值作为模型发布,则必须在视图中进行更改。
HTH。
答案 1 :(得分:0)
DisplayFor()
扩展名定义为:
public static MvcHtmlString DisplayFor<TModel, TValue>(
this HtmlHelper<TModel> html,
Expression<Func<TModel, TValue>> expression //pay attention to this part
)
这意味着,DisplayFor()
会收到Experssion
特定签名作为参数。签名是,表达式需要输入参数和返回值。
现在,在您的示例代码的上下文中说。代码中DisplayFor
的参数读作“具有名为modelItem
的输入参数且返回值item.EnrollmentDate
”的表达式。因此,在这种情况下,modelItem
不会影响表达式的输出,但需要将表达式识别作为输入参数因此被认为符合签名。