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

时间:2013-09-12 22:25:37

标签: c# .net asp.net-mvc asp.net-mvc-4 razor

我正在学习ASP.NET MVC 4.一些默认的模板视图包含这样的内容:

@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)的方法?

1 个答案:

答案 0 :(得分:1)

从技术上讲,正如您所说,modelItem完全未使用。这是无参数lambda的一个例子。我倾向于使用_ =&gt;在这种情况下。我这样做是因为这是我们已经习惯的,虽然我认为它确实看起来有点奇怪。在循环遍历列表时,它可以更容易生成editorfor等。没有其他强类型的方法可以调用我知道的DisplayFor / EditorFor

请参阅此问题以获取解释Is there a better way to express a parameterless lambda than () =>?