属性"/>
关于c#:displayname属性
-attributesasp-mvcc#data-annotationsdisplayattribute
displayname attribute vs display attribute
ASP.NET MVC中的DisplayName属性和Display属性之间有什么区别?
DisplayName在模型元数据中设置DisplayName。例如:
1 | [DisplayName("foo")] |
并且如果您在视图中使用以下内容:
1 | @Html.LabelFor(x => x.MyProperty) |
它会产生:
1 | <label for="MyProperty">foo</label> |
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。
也许这特定于核心,我发现DisplayName不起作用,但Display(Name = ...)起作用。这可以为其他人省去涉及的故障排除:)
1 | //using statements |
转大佬
更多推荐
关于c#:displayname属性
发布评论