我正在学习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)
的方法?
答案 0 :(得分:1)
从技术上讲,正如您所说,modelItem完全未使用。这是无参数lambda的一个例子。我倾向于使用_ =&gt;在这种情况下。我这样做是因为这是我们已经习惯的,虽然我认为它确实看起来有点奇怪。在循环遍历列表时,它可以更容易生成editorfor等。没有其他强类型的方法可以调用我知道的DisplayFor / EditorFor
请参阅此问题以获取解释Is there a better way to express a parameterless lambda than () =>?