我也费了很大劲才理解 Visual Studio 生成的代码。我不想提供关于 lambda 表达式的一般解释,而是想使用 ASP.NET MVC 框架放置一个上下文。
假设我们准备了一个具有 2 个属性的模型类(例如 Destination):City 和 ProvinceCode。
public class Destination
{
public string City { get; set; }
public string ProvinceCode { get; set; }
}
生成控制器和视图后,我们应该如前所述通过 Visual Studio 获取生成的代码。然而,生成的代码有点难以理解,尤其是对于数据行
@Html.DisplayFor(modelItem => item.City)
我只是猜测MVC 团队应该认为 Html 辅助类应该在 cshtml 文件中始终使用。因此,他们尝试使用技巧来通过 C# 编译器。在这种情况下,modelItem 甚至没有用作这个 lambda 表达式的输入参数。我们不能使用 () 因为类型不正确。这就是为什么如果我们替换模型或任何模型对象,lambda 表达式就可以工作。
老实说,我想以更易读的形式重写生成的代码。我们可以简单地呈现正确的输出,而不是使用Html帮助器类,如下所示:
@foreach (var item in Model) {
<tr>
<td>
@* Code Generated by Visual Studio. modelItem is a dummy param *@
@Html.DisplayFor(modelItem => item.City)
</td>
<td>
@* A better way - simply get rid of Html helper class *@
@item.ProvinceCode
</td>
</tr>
}