ASP.NET MVC中的DisplayName
属性和Display
属性之间有什么区别?
ASP.NET MVC中的DisplayName
属性和Display
属性之间有什么区别?
Answers:
DisplayName
设置DisplayName
在模型中的元数据。例如:
[DisplayName("foo")]
public string MyProperty { get; set; }
如果您在视图中使用以下内容:
@Html.LabelFor(x => x.MyProperty)
它会产生:
<label for="MyProperty">foo</label>
Display
这样做相同,但是还允许您设置其他元数据属性,例如名称,描述,...
布拉德·威尔逊(Brad Wilson)在一篇不错的博客文章中介绍了这些属性。
我认为当前的答案忽略了强调实际的重要差异和显着差异,以及对预期用途的含义。尽管它们都可以在某些情况下工作,因为实现者内置了对两者的支持,但是它们有不同的使用场景。两者都可以注释属性和方法,但是这里有一些重要的区别:
DisplayAttribute
System.ComponentModel.DataAnnotations
在System.ComponentModel.DataAnnotations.dll
程序集的名称空间中定义Description
或ShortName
DisplayNameAttribute
System.ComponentModel
名称空间中System.dll
程序集和名称空间说明了预期的用法,而本地化支持则是重中之重。DisplayNameAttribute
自.NET 2以来就已经存在,并且似乎更多地用于在旧版属性网格中命名开发人员组件和属性,而不是为可能需要本地化的最终用户可见的内容。
DisplayAttribute
是在.NET 4中稍后引入的,并且似乎是专门为标记将最终用户可见的数据类的成员而设计的,因此它更适合DTO,实体和其他此类对象。我感到很不幸,他们限制了它,因此它不能在类中使用。
编辑:看起来最新的.NET Core源代码DisplayAttribute
现在也可以在类中使用。
也许这特定于.net核心,我发现DisplayName不起作用,但Display(Name = ...)起作用。这可以为其他人省去涉及的故障排除:)
//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)