.net-attributesasp.net-mvcc#data-annotationsdisplayattribute
ASP.NET MVC中的DisplayName属性和Display属性之间有什么区别?
DisplayName在模型元数据中设置DisplayName。例如:
1 | [DisplayName("foo")] |
并且如果您在视图中使用以下内容:
1 | @Html.LabelFor(x => x.MyProperty) |
它会产生:
1 |
Display的功能相同,但是还允许您设置其他元数据属性,例如Name,Description,...
布拉德·威尔逊(Brad Wilson)有一篇不错的博客文章,介绍了这些属性。
相关讨论
它们都给您相同的结果,但是我看到的主要区别是您不能在DisplayName属性中指定ResourceType。对于MVC 2中的示例,必须将DisplayName属性子类化以通过本地化提供资源。 Display属性(MVC3和.NET4中的新增功能)支持ResourceType重载作为"开箱即用"属性。
相关讨论
我认为当前答案忽略了突出实际的重要差异和显着差异,以及这对预期用途的意义。尽管它们都可能在某些情况下都可以工作,因为实现者内置了对两者的支持,但是它们有不同的使用场景。两者都可以注释属性和方法,但是这里有一些重要的区别:
DisplayAttribute
DisplayNameAttribute
程序集和名称空间说明了预期的用法,而本地化支持则是重中之重。 DisplayNameAttribute自.NET 2起就存在,似乎更多地用于在旧版属性网格中命名开发人员组件和属性,而不是用于可能需要本地化的最终用户可见的内容。
DisplayAttribute在.NET 4中稍后引入,并且似乎是专门为标记最终用户可见的数据类的成员而设计的,因此它更适用于DTO,实体和其他此类对象。我觉得很不幸,他们限制了它,因此它不能在类中使用。
编辑:看起来最新的.NET Core源代码现在也允许在类上使用DisplayAttribute。
也许这特定于.net核心,我发现DisplayName不起作用,但Display(Name = ...)起作用。这可以为其他人省去涉及的故障排除:)
1 | //using statements |
转大佬