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?
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With