Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is a simple explanation for displayfor and displaynamefor in asp.net?

Tags:

I have a class

public class Item {     public int ItemId { get; set; }      [Required(ErrorMessage = "Category is required")]     [Range(1, int.MaxValue, ErrorMessage = "Category is required")]     public int CategoryId { get; set; }      [Display(Name = "Current password")]     [Required(ErrorMessage = "Name is required")]     [StringLength(160)]     public string Name { get; set; }      [Required(ErrorMessage = "Price is required")]     [Range(0.01, 100.00,         ErrorMessage = "Price must be between 0.01 and 100.00")]     public decimal Price { get; set; }      public virtual Category Category { get; set; } } 

In my controller I pass an instance of this to view

public ActionResult Index()     {         var model = new Item         {             CategoryId = 1,             Name = "aaa",             Price = 2         };          return View("Index", model);                 } 

then in view I try to display name using

@model GenericShop.Models.Item  <p>                                 @Html.DisplayNameFor(m => m.Name)                                        </p> 

and get the following error

Compiler Error Message: CS1061: 'System.Web.Mvc.HtmlHelper' does not contain a definition for 'DisplayNameFor' and no extension method 'DisplayNameFor' accepting a first argument of type 'System.Web.Mvc.HtmlHelper' could be found (are you missing a using directive or an assembly reference?)

@Html.DisplayFor(m => m.Name) works fine, but I just cant see why

@Html.DisplayNameFor(m => m.Name) does not.

DisplayFor displays the value for the model item and DisplayNameFor simply displays the name of the property?

like image 364
Minsk Avatar asked Feb 13 '16 20:02

Minsk


1 Answers

Almost there. :)

The DisplayNameFor shows the name of the property or the string defined in the display attribute for the property.

public class Item {     public int ItemId { get; set; }      [Display(Name = "Current name")]     [Required(ErrorMessage = "Name is required")]     [StringLength(160)]     public string Name { get; set; }      [Required(ErrorMessage = "Price is required")]     [Range(0.01, 100.00,         ErrorMessage = "Price must be between 0.01 and 100.00")]     public decimal Price { get; set; }  } 

Then @Html.DisplayNameFor(m => m.Name) would show 'Current name'.

@Html.DisplayNameFor(m => m.Price) would just show Price.

Note that you can also localize the display attribute like this:

[Display(ResourceType = typeof(MyResources), Name = "Name")] public string Name{ get; set; } 

Which in turn will look in the MyResources resc file. (If setup is done correctly).

The Html.DisplayFor shows the value of the field.

like image 55
RoteS Avatar answered Oct 12 '22 22:10

RoteS