显示名称属性与显示属性
ASP.NET MVC中的DisplayName
属性和Display
属性有什么区别?
他们都给你相同的结果,但我看到的主要区别是,你不能在DisplayName
属性中指定一个ResourceType
。 对于MVC 2中的示例,您必须DisplayName
属性以通过本地化提供资源。 Display
属性(MVC3和.NET4中的新增function)支持ResourceType
重载作为“开箱即用”属性。
DisplayName
在模型元数据中设置DisplayName
。 例如:
[DisplayName("foo")] public string MyProperty { get; set; }
如果您在您的视图中使用以下内容:
@Html.LabelFor(x => x.MyProperty)
它会产生:
<label for="MyProperty">foo</label>
Display
相同,但也允许您设置其他元数据属性,如名称,说明,…
布拉德威尔逊有一个很好的博客文章,涵盖这些属性
我认为目前的答案忽略了强调实际的重要和重大差异,以及对于预期用途意味着什么。 虽然他们都可以在某些情况下工作,因为实施者build立在两者都支持,他们有不同的使用场景。 以下是区别:
DisplayAttribute
- 在
System.ComponentModel.DataAnnotations
命名空间中 - 需要对
System.ComponentModel.DataAnnotations.dll
程序集的引用 - 可以用于参数和字段
- 让您设置更多的属性,而不仅仅是
Name
,例如Description
DisplayNameAttribute
- DisplayName位于
System.ComponentModel
名称空间中 - 驻留在
System.dll
因此不需要任何其他特殊参考 - 可以用于课堂和活动
两者都可以用于属性和方法。
我认为汇编和名称空间确实可以说明预期的用法,所以:
如果注解“数据类”,也就是说在System.ComponentModel.DataAnnotations
名称空间中的其他属性(如[Required]
和[Range]
不会出现的地方使用DisplayAttribute
。 我认为大多数“用户可编辑”对象都属于这个类别,以及DTO,实体和其他类似的东西。
使用DisplayNameAttribute
如果你想为类提供一个友好的名字,并且在那些你不想让数据类中的成员成为一个友好的名字的地方(例如,你有一个类中的方法,你将在开发者列表中作为选项接口的地方)。
也许这是特定于.NET核心,我发现DisplayName将无法正常工作,但显示(名称= …)。 这可能会拯救别人的疑难解答涉及:)
//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)