Was ist eine einfache Erklärung für displayfor und displaynamefor in asp.net

Ich habe ein klass

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 meinem Controller übergebe ich eine Instanz davon an view

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

        return View("Index", model);            
    }

dann versuche ich in der Ansicht, den Namen mit @ anzuzeig

@model GenericShop.Models.Item

<p>                               
 @Html.DisplayNameFor(m => m.Name)                                       
</p>

und erhalten den folgenden Fehler

Compiler-Fehlermeldung: CS1061: "System.Web.Mvc.HtmlHelper" enthält keine Definition für "DisplayNameFor" und es wurde keine Erweiterungsmethode "DisplayNameFor" gefunden, die ein erstes Argument des Typs "System.Web.Mvc.HtmlHelper" akzeptiert (Fehlt Ihnen eine using-Direktive oder eine Assembly-Referenz?)

@Html.DisplayFor(m => m.Name) funktioniert gut, aber ich kann nicht sehen, warum

@Html.DisplayNameFor(m => m.Name) nicht

DisplayFor zeigt den Wert für das Modellelement und @ DisplayNameFor zeigt einfach den Namen der Eigenschaft an?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage