我开始与MVC 4(Razor视图引擎)。 (我相信这可能适用于MVC 3和更早版本。)我想知道是否有任何好处,使用DisplayAttribute数据注释在视图内,而只是直接在HTML中写入一个字符串。例如,如果我有以下模型:
public class Thing { public string WildAndCrazyProperty { get; set; } }
…将有任何好处,注释属性为:
[Display(Name = "Wild and Crazy")] public string WildAndCrazyProperty { get; set; }
…和我的标记是:
<html> <body> <div>@Html.DisplayNameFor(modelItem => modelItem.WildAndCrazyProperty)</div> <div>@Html.DisplayFor(modelItem => modelItem.WildAndCrazyProperty)</div> </body> </html>
…与没有注释,并做:
<html> <body> <div>Wild and Crazy</div> <div>@Html.DisplayFor(modelItem => modelItem.WildAndCrazyProperty)</div> </body> </html>
在这种情况下,我没有提到Html.LabelFor的原因是因为属性的数据在页面上显示为静态(即不可编辑)文本。数据永远不会在此网页上进行编辑,因此我无需在第二个< div>中使用Html.TextBoxFor。并随后使用Html.LabelFor将标签与该文本框正确关联。
解决方法
如果两个不同的视图共享相同的模型(例如,也许一个是移动输出和一个是常规的),它可能很高兴有字符串驻留在一个地方:作为viewmodel上的元数据。
此外,如果您有一个继承版本的模型,需要一个不同的显示,它可能是有用的。例如:
public class Baseviewmodel { [Display(Name = "Basic Name")] public virtual string Name { get; set; } } public class Otherviewmodel : Baseviewmodel { [Display(Name = "Customized Inherited Name")] public override string Name { get; set; } }
我承认这个例子是很有意思的…