m.SomeProperty)?-6ren"> m.SomeProperty)?-例如,在 MVC 应用程序中,我可以使用 Html 助手来创建这样的标签: @Html.LabelFor(m => m.ProductName) 我没有在任何地方声明变量“m”,但 IDE 会自动找出-6ren">
gpt4 book ai didi

c# - c# 如何找出 "m"来自 (m => m.SomeProperty)?

转载 作者:太空狗 更新时间:2023-10-30 00:06:18 29 4
gpt4 key购买 nike

例如,在 MVC 应用程序中,我可以使用 Html 助手来创建这样的标签:

@Html.LabelFor(m => m.ProductName)

我没有在任何地方声明变量“m”,但 IDE 会自动找出我要做什么。有点令人不安的是,IDE 比我更了解我的代码。我想解决这个问题。

我主要想知道它是如何知道如何引用我的模型的。

编辑:感谢您的所有回答。

因此,“Html”是 HtmlHelper 的一个实例。 “Html”是 ViewPage 基类的成员。它的值在 ViewPage 基类的 InitHelpers() 方法中设置。 HtmlHelper 构造函数将 ViewPage 的 ViewContext 作为参数。 ViewContext 知道我使用的是什么模型。 LabelFor 是 HtmlHelper 类的扩展方法。这就是 lambda 表达式知道如何引用我的模型的原因。

点是相连的。谢谢!

最佳答案

您需要阅读有关 lambda 的内容,但发生的事情是您将函数指针传递给 LabelFor方法。因为Html是强类型 ( HtmlHelper<TYourModelType> ) 和 LabelFor声明为 Func<TYourModelType, TValue> ,编译器(和 IDE)可以确定 m是您的模型类型的一个实例,因此为成员提供了很好的 IDE 下拉菜单。

有时人们发现比较您可以使用的其他语法选项很有帮助。例如,这同样有效:

Html.LabelFor(SomePropertyMethod);

...

string SomePropertyMethod(TYourModelType model)
{
return model.SomeProperty;
}

关于c# - c# 如何找出 "m"来自 (m => m.SomeProperty)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4409566/

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