为什么 ASP.NET MVC 模板视图使用 Html.DisplayFor 来显示不属于模型的数据

本文关键字:显示 DisplayFor 不属于 模型 数据 Html MVC NET ASP 视图 为什么 | 更新日期: 2023-09-27 18:31:04

我正在学习MVC 4 ASP.NET。一些默认模板视图包含如下内容:

@model IEnumerable<SomeModel>
...
@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Property1)
</td>
        <td>
            @Html.DisplayFor(modelItem => item.Property2)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.Id }) |
            @Html.ActionLink("Details", "Details", new { id=item.Id }) |
            @Html.ActionLink("Delete", "Delete", new { id=item.Id })
        </td>
    </tr>
}

我的理解是,DisplayFor采用一个表达式,其中输入参数是视图的模型,返回值是任何对象,并为返回的对象找到适当的 DisplayTemplate。

基于此,我可以看到为什么DisplayFor(modelItem => item.Property1)有效,但感觉不是正确的选择。如果我根本不使用 modelItem 参数,为什么要使用 DisplayFor ?没有像GetDisplayTemplate(item.Property1)这样的方法吗?

为什么 ASP.NET MVC 模板视图使用 Html.DisplayFor 来显示不属于模型的数据

从技术上讲,正如您所说,模型项完全未使用。这是无参数 lambda 的示例。在这种情况下,我倾向于使用 _=>。我这样做是因为我们已经习惯了,尽管我想它看起来确实有点奇怪。它使在循环列表时生成编辑器等变得更加容易。我知道没有其他强类型的方式来调用 DisplayFor/EditorFor

请参阅此问题进行解释 有没有比 () => 更好的方法来表达无参数 lambda?