首页 > 解决方案 > DisplayNameFor 有什么作用?

问题描述

我正在使用此处的官方教程之一学习带有 Razor 页面的 .NET Core ,但我在使用此代码时遇到了问题: @Html.DisplayNameFor(model => model.Movie[0].Title)

教程说:

DisplayNameExtensions.DisplayNameForHTML 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这里,但是教程链接到这里的非核心文档,这两个都太简洁了,我无法理解。

标签: c#asp.net-corerazor-pages

解决方案


DisplayNameFor将查找Nameproperty 属性的Display属性并将其打印到您的剃须刀页面(或属性名称本身,如果找不到它)。所以,如果你的模型是

class Foo
{
    [Display(Name="My name")]
    public string Prop1 { get; set; }

    public string Prop2 { get; set; }
}

它将显示My nameforProp1Prop2for Prop2

关于它被检查而不是评估的部分意味着它将查看您的模型定义,它不会尝试获取值,因此如果模型值为null,它不会抛出。

另一方面,DisplayFor将打印所选属性的值,应用DisplayFormatAttribute描述的任何格式,因此模型被评估并且不能为空。

通常,您将使用DisplayNameFor构建表头和DisplayFor构建表数据。


推荐阅读