• 关于c#:displayname属性



    .net-attributesasp.net-mvcc#data-annotationsdisplayattribute

    displayname attribute vs display attribute

    ASP.NET MVC中的DisplayName属性和Display属性之间有什么区别?


    DisplayName在模型元数据中设置DisplayName。例如:

    1
    2

    [DisplayName("foo")]
    public string MyProperty { get; set; }

    并且如果您在视图中使用以下内容:

    1

    @Html.LabelFor(x => x.MyProperty)

    它会产生:

    1

    foo

    Display的功能相同,但是还允许您设置其他元数据属性,例如Name,Description,...

    布拉德·威尔逊(Brad Wilson)有一篇不错的博客文章,介绍了这些属性。

     相关讨论

    • +1-可能比我的(现在已删除)有用得多; 对我来说太早了:)
    • 我在调用@ descriptor.DisplayName时遇到PropertyDescriptor和Display(name ..)问题,它仅在使用DisplayName而不在Display(name ..)时有效。


    它们都给您相同的结果,但是我看到的主要区别是您不能在DisplayName属性中指定ResourceType。对于MVC 2中的示例,必须将DisplayName属性子类化以通过本地化提供资源。 Display属性(MVC3和.NET4中的新增功能)支持ResourceType重载作为"开箱即用"属性。

     相关讨论

    • 很高兴知道! 即将实现自定义属性以从.resx文件加载显示值,然后发生此问题。 显示属性是开发本地化应用程序时要走的路。


    我认为当前答案忽略了突出实际的重要差异和显着差异,以及这对预期用途的意义。尽管它们都可能在某些情况下都可以工作,因为实现者内置了对两者的支持,但是它们有不同的使用场景。两者都可以注释属性和方法,但是这里有一些重要的区别:

    DisplayAttribute

    • 在System.ComponentModel.DataAnnotations.dll程序集的System.ComponentModel.DataAnnotations命名空间中定义
    • 可用于参数和字段
    • 使您可以设置其他属性,例如Description或ShortName
    • 可以使用资源进行本地化

    DisplayNameAttribute

    • DisplayName在System.dll的System.ComponentModel命名空间中
    • 可以用于课程和活动
    • 无法使用资源进行本地化

    程序集和名称空间说明了预期的用法,而本地化支持则是重中之重。 DisplayNameAttribute自.NET 2起就存在,似乎更多地用于在旧版属性网格中命名开发人员组件和属性,而不是用于可能需要本地化的最终用户可见的内容。

    DisplayAttribute在.NET 4中稍后引入,并且似乎是专门为标记最终用户可见的数据类的成员而设计的,因此它更适用于DTO,实体和其他此类对象。我觉得很不幸,他们限制了它,因此它不能在类中使用。

    编辑:看起来最新的.NET Core源代码现在也允许在类上使用DisplayAttribute。


    也许这特定于.net核心,我发现DisplayName不起作用,但Display(Name = ...)起作用。这可以为其他人省去涉及的故障排除:)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15

    //using statements
    using System;
    using System.ComponentModel.DataAnnotations;  //needed for Display annotation
    using System.ComponentModel;  //needed for DisplayName annotation

    public class Whatever
    {
        //Property
        [Display(Name ="Release Date")]
        public DateTime ReleaseDate { get; set; }
    }


    //cshtml file
    @Html.DisplayNameFor(model => model.ReleaseDate)

      转大佬 

  • 相关阅读:
    移动端JDtoolbar
    对话 ClickHouse CTO Alexey:目光不仅限于成为最快的数据库 | 近匠
    模型量化笔记--对称量化和非对称量化
    挑战杯 基于计算机视觉的身份证识别系统
    老项目导入异常问题解决:NDK问题
    2022-2028全球及中国特殊黄铜棒行业研究及十四五规划分析报告
    AcrelEMS高速公路微电网能效管理平台与智能照明解决方案智慧点亮隧道
    中国业务型CDP白皮书 | 爱分析报告
    Spring Boot中使用MongoDB完成数据存储
    LeetCode:318. 最大单词长度乘积(C++)
  • 原文地址:https://blog.csdn.net/chenggong9527/article/details/126369015