I am starting out with MVC 4 (Razor view engine). (I believe this may apply to MVC 3 and earlier as well.) I am wondering if there is any benefit to using the DisplayAttribute data annotation within a view versus just writing a string directly in the HTML. For example, if I had the following model:
public class Thing
{
public string WildAndCrazyProperty { get; set; }
}
…would there be any benefit in annotating the property as:
[Display(Name = "Wild and Crazy")]
public string WildAndCrazyProperty { get; set; }
…and having my markup be:
<html>
<body>
<div>@Html.DisplayNameFor(modelItem => modelItem.WildAndCrazyProperty)</div>
<div>@Html.DisplayFor(modelItem => modelItem.WildAndCrazyProperty)</div>
</body>
</html>
…versus not having the annotation, and doing:
<html>
<body>
<div>Wild and Crazy</div>
<div>@Html.DisplayFor(modelItem => modelItem.WildAndCrazyProperty)</div>
</body>
</html>
The reason I haven’t mentioned Html.LabelFor in this case is because the property’s data is being displayed as static (i.e. non-editable) text on the page. The data will never be editable on this page, so there is no need for me to use Html.TextBoxFor within the second <div> and subsequently use the Html.LabelFor to properly associate a label with that text box.
If two different views are sharing the same model (for instance, maybe one is for mobile output and one is regular), it could be nice to have the string reside in a single place: as metadata on the ViewModel.
Additionally, if you had an inherited version of the model that necessitated a different display, it could be useful. For instance:
I’ll admit that that example is pretty contrived…
Those are the best arguments in favor of using the attribute that I can come up with. My personal opinion is that, for the most part, that sort of thing is best left to the markup.