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?