MVC 4数据注释“显示”属性
我开始与MVC 4(剃刀视图引擎)。 (我相信这可能适用于MVC 3和更早版本。)我想知道是否有任何好处,在视图中使用DisplayAttribute数据注释,而不是直接在HTML中写入一个string。 例如,如果我有以下模型:
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
将标签与该文本框正确关联。
如果两个不同的视图共享相同的模型(例如,也许一个是移动输出,一个是常规的),那么将string驻留在一个地方可能会更好:作为ViewModel上的元数据。
此外,如果您有需要不同显示的模型的inheritance版本,则可能会有用。 例如:
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; } }
我承认这个例子很有意思
这些是支持使用我可以提出的属性的最好的论据。 我个人的看法是,大多数情况下,这样的事情最好留给标记。
除了其他答案之外,当您要本地化字段时,使用DisplayAttribute
会有很大的好处。 您可以使用DisplayAttribute在本地化数据库中查找名称,并使用您希望的任何翻译。
另外,您可以让MVC使用Html.EditorForModel()
为您生成模板,并为您生成正确的标签。
最终,这取决于你。 但是MVC非常“以模型为中心”,这就是数据属性应用于模型的原因,因此元数据存在于一个地方。 这不像是你必须做的大量的额外打字。
其中一个好处是你可以在多个视图中使用它,并有一个一致的标签文本。 它也被用于asp.net MVC脚手架来生成标签文本,并使生成有意义的文本更容易
[Display(Name = "Wild and Crazy")] public string WildAndCrazyProperty { get; set; }
无论您在应用程序中使用该属性,“Wild and Crazy”都会一致显示。
有时候这并不灵活,因为您可能想在某些视图中更改文本。 在这种情况下,你将不得不像第二个例子那样使用自定义标记