gpt4 book ai didi

c# - @Html.DisplayNameFor() 中的 Lambda 表达式

转载 作者:行者123 更新时间:2023-11-30 20:41:44 24 4
gpt4 key购买 nike

假设我将 PersonList 作为模型传递给 View 页面:

@model IEnumerable<Foo.Models.Person>

@foreach (var item in Model)
{
<p>
@Html.DisplayFor(ListOfPersons => item.Id) : @Html.DisplayFor(ListOfPersons =>item.Name)
</p>
}

我只是不明白这个 Lambda 表达式是如何工作的。为什么我们要传递 IEnumerable 并在其对象上获取单个值?

最佳答案

由于 ListOfPersons 不是声明的变量,而只是表达式的参数名称,因此表达式是有效的。

简要介绍一下表达式,它们由参数集和主体组成。

(parameter set) => (body)

参数集可以是空的 () 或包括 1 个或多个参数 (x)(x,y) 例如。然后主体可以使用这些参数,类似于方法主体使用传入参数的方式。

@Html.DisplayFor(ListOfPersons => item.Id) 在所示范围内使用时忽略该参数。它没有使用它,并且类似于这样的东西

public int Id = 5;
public string DisplayFor(Person ListOfPersons)
{
return Id;
}

所以从这个方面可以看出参数没有被使用,返回的值其实是一个不同作用域的值。

DisplayFor 的范围是使用要绑定(bind)的页面模型。因此,无论参数名称如何,传递给参数的都将是模型。因此,由于参数在这里被完全忽略,所以它的命名并不特别重要,可以简单地是 ()_

返回的值就是正文中的值,在本例中为 item.Iditem.Name。但是,由于没有使用该参数,呈现的 html 将不正确,即使显示的值看起来是准确的。

为了解决这个问题,必须正确访问模型,否则呈现的 html 将不会在发布时绑定(bind)。这通常是通过迭代和使用索引引用来完成的,如 @Jonespolis' answer 中所示。 .

关于c# - @Html.DisplayNameFor() 中的 Lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32104313/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com