c# - DisplayNameFor 有什么作用?
问题描述
我正在使用此处的官方教程之一学习带有 Razor 页面的 .NET Core ,但我在使用此代码时遇到了问题:
@Html.DisplayNameFor(model => model.Movie[0].Title)
教程说:
DisplayNameExtensions.DisplayNameFor
HTML Helper 检查 lambda 表达式中引用的属性Title
以确定显示名称。检查而不是评估 lambda 表达式。model
这意味着当、model.Movie
、 或model.Movie[0]
为空或为空时没有访问冲突。例如,当计算 lambda 表达式时,会计算@Html.DisplayFor(modelItem => item.Title)
模型的属性值。
我无法做出正面或反面。这里的检查是什么意思?这是否意味着 lambda 函数在 try/catch 中运行,以防止文档所说的访问冲突错误?究竟是什么意思?
第二个示例(带有 )在哪些重要方面DisplayFor
有所不同?它使用DisplayFor
代替DisplayName
,另一个变化是它使用ModelItem
代替model
。我不知道它会ModelItem
从哪里得到,model
可以@model (...)
在剃须刀页面的操作处获得,但ModelItem
我不清楚如何到达这里。
的文档DisplayNameFor
在这里,但是教程链接到这里的非核心文档,这两个都太简洁了,我无法理解。
解决方案
DisplayNameFor
将查找Name
property 属性的Display
属性并将其打印到您的剃须刀页面(或属性名称本身,如果找不到它)。所以,如果你的模型是
class Foo
{
[Display(Name="My name")]
public string Prop1 { get; set; }
public string Prop2 { get; set; }
}
它将显示My name
forProp1
和Prop2
for Prop2
。
关于它被检查而不是评估的部分意味着它将查看您的模型定义,它不会尝试获取值,因此如果模型值为null
,它不会抛出。
另一方面,DisplayFor
将打印所选属性的值,应用DisplayFormatAttribute描述的任何格式,因此模型被评估并且不能为空。
通常,您将使用DisplayNameFor
构建表头和DisplayFor
构建表数据。
推荐阅读
- linux - 不能用厨师设置 GOPATH
- led - Num Lock 开启,但 Num Lock LED 关闭
- spring-mvc - 我的请求@RequestMapping(value = {"/", "/home", "/index"})
- c# - C# TCP 连接丢失
- amazon-web-services - AWS EC2实例中的Kubernetes仪表板?
- reactjs - 如何读取在 React JS 项目中连续一段时间后更新的 json 文件
- asp.net-core - 启用 CORS 但没有效果
- matlab - 绘制颤动极坐标
- python - 无法替换序列化文本视图中的数据,字节数组大小问题?
- sml - 如何在 SML/NJ 中编写一个函数,在给定列表中计算连续相等的元素并返回对列表(值,计数)?