gpt4 book ai didi

c# - MVC HTML 帮助程序和 Lambda 表达式

转载 作者:IT王子 更新时间:2023-10-29 04:19:19 25 4
gpt4 key购买 nike

我在很大程度上理解 Lambda 查询,但是当我尝试学习 MVC 时,我看到了默认的脚手架模板,它们对很多组件使用 Lambda 表达式。

例如,DisplayFor HTML Helper。代码为 @Html.DisplayFor(model => model.name)

我希望没有人认为这是一个愚蠢的问题,只是虽然我(认为我)大部分理解 Lambda 表达式,但它们不像常规代码那样“流动”,我必须仔细考虑很难理解实际发生了什么!

所以真正的问题是,

1) 对这些 HTML Helpers 使用 Lambda 查询,我是否遗漏了他们的任何好处?

2) 据我所知,DisplayFor 只会连接到一个项目 - 那么,为什么这不只是 @Html.DisplayFor(model.name) 或类似的?

请提供任何其他可以使 MVC 新手变得更好的信息!

最佳答案

在回答您的 2 个要点之前,我认为您需要了解 lambda 表达式的实际含义。

在.Net中,这样使用的Lambda表达式就是所谓的表达式树。来自 MSDN :

Expression trees represent code in a tree-like data structure, where each node is an expression, for example, a method call or a binary operation such as x < y.

这些本质上是描述传入内容的数据结构,而不是传入数据的值。这意味着当您调用 Html.DisplayFor(x => model.Name) 它传入一个数据结构,上面写着“我正在为 xxxx 数据结构的 Name 属性调用此方法(其中 xxxx 是代表您的 View 模型的数据结构类型)。

DisplayFor 然后查看此数据并看到属性名称 Name 是 Name,它查看该属性的所有属性以找出是否有任何附加到它的数据注释,然后查看该值以确定如何表示该值的显示。在您全神贯注之前,它有点复杂,但是一旦您查看 MSDN 页面并思考它,您就会大吃一惊!像我一样的时刻,它会突然变得有意义:)

关于您的问题 #1,使用 lambda 表达式的优点是您可以在编译时检查您的属性。例如,如果您将 ViewModel.Name 重命名为 ViewModel.ClientName,您所有的 Html.DisplayFor(x => model.Name) 都不会不要编译,因此确保你改变了它们。如果您不使用 lambda 表达式,您所有的 Html.Display() 调用都可以正常工作,但是您会遇到模型绑定(bind)的隐藏错误,这些错误不会立即显而易见。

回答#2,原因和我对表达式树的描述是一样的。如果不使用 lambda,您只是传递 Model.Name 的值而没有关于属性本身的信息,因此它不知道 Model.Name 属性的名称是 Name,它看到的只是字符串值。

可以找到关于表达式树的另一篇很好的文章 here .理解表达式树可以在 .Net 中发挥巨大的作用 :)

关于c# - MVC HTML 帮助程序和 Lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5848940/

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