2016-02-13 3 views
6

Ich habe eine KlasseWas ist eine einfache Erklärung für displayfor und displaynamefor in asp.net?

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 passiere ich eine Instanz dieses

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

     return View("Index", model);    
    } 

dann in Sicht zu sehen versuche ich Namen anzuzeigen

@model GenericShop.Models.Item 

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

mit und nutzen Sie die Folgefehler

Compiler-Fehlermeldung: CS1061: 'System.Web.Mvc.HtmlHelper' enthält keine eine Definition für 'DisplayNameFor' und keine Erweiterungsmethode 'DisplayNameFor' akzeptiert ein erstes Argument vom Typ 'System.Web.Mvc.HtmlHelper ' gefunden werden konnte (möglicherweise fehlt eine using-Direktive oder ein Assemblyverweis?)

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

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

DisplayFor zeigt den Wert für das Modell Element und DisplayNameFor zeigt einfach den Namen der Eigenschaft?

Antwort

14

Fast da. :)

Die DisplayNameFor zeigt den Namen der Eigenschaft oder die Zeichenfolge im Anzeigeattribut für die Eigenschaft definiert.

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

} 

Dann würde @Html.DisplayNameFor(m => m.Name) 'Aktuellen Namen' zeigen.

@Html.DisplayNameFor(m => m.Price) würde nur Preis anzeigen.

Beachten Sie, dass Sie auch die Anzeigeattribute wie diese lokalisieren können:

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

Was wiederum in der MyResources resc Datei aussehen wird. (Wenn die Einrichtung korrekt durchgeführt wurde).

Die Html.DisplayFor zeigt den Wert des Feldes.

+0

In Ihrer Antwort, wo Sie gemeint haben, wenn Sie ... würden Sie DisplayNameFor in beiden Fällen verwenden und das ist verwirrend. – Minsk

+0

Das erste Mal verwende ich @ Html.DisplayNameFor (m => m.Name), die mit der 8. Zeile im Codebeispiel verknüpft. Wenn Sie sich Zeile 5 ansehen, sehen Sie [display (name = "aktueller Name")] dies wird dazu führen, dass das HTML "aktuellen Namen" rendert In der @ Html.DisplayNameFor (m => m.Price) verlinke ich auf die Zeile public decimal Preis {get; einstellen; } Diese Eigenschaft hat keine [Anzeige ...] darüber, so asp.net mvc rendert nur den Namen der Propery (die Preis ist) Ist das klarer? – RoteS

+1

ja, ja. Also nimmt 'DisplayNameFor (model => model.Field1)' die Anzeige (name = "abcd") und druckt abcd. Wenn kein Anzeigename vorhanden ist, verwendet er stattdessen den Namen der Eigenschaft. – Minsk

Verwandte Themen