Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MVC 4 Data Annotations "Display" Attribute

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.

like image 801
Kenneth K. Avatar asked Oct 04 '12 20:10

Kenneth K.


People also ask

What is display attribute in MVC?

This Display attribute expects a named parameter and here we want to change the display name of the property from EmployeeName to Employee Name. Display(Name="Employee Name")] public string EmployeeName { get; set; }

What is data annotation validator attributes in MVC?

Data annotation attributes are attached to the properties of the model class and enforce some validation criteria. They are capable of performing validation on the server side as well as on the client side. This article discusses the basics of using these attributes in an ASP.NET MVC application.

Which namespace is used to display in data annotations using MVC?

DataAnnotations Namespace. Provides attribute classes that are used to define metadata for ASP.NET MVC and ASP.NET data controls.


2 Answers

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:

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; } } 

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.

like image 180
eouw0o83hf Avatar answered Sep 20 '22 17:09

eouw0o83hf


In addition to the other answers, there is a big benefit to using the DisplayAttribute when you want to localize the fields. You can lookup the name in a localization database using the DisplayAttribute and it will use whatever translation you wish.

Also, you can let MVC generate the templates for you by using Html.EditorForModel() and it will generate the correct label for you.

Ultimately, it's up to you. But the MVC is very "Model-centric", which is why data attributes are applied to models, so that metadata exists in a single place. It's not like it's a huge amount of extra typing you have to do.

like image 20
Erik Funkenbusch Avatar answered Sep 19 '22 17:09

Erik Funkenbusch