2010-08-13 4 views

Antwort

70

Betrachten Sie das folgende Modell:

public class MyModel 
{ 
    public string Name { get; set; } 

    [DisplayFormat(NullDisplayText = "No value available!")] 
    public string Email { get; set; } 

} 

aus meiner Sicht:

<%= Html.DisplayTextFor(m => m.Email) %> 

<%: Model.Email %> 

die erste Zeile „Kein Wert verfügbar“ wird angezeigt, wenn wir die E-Mail an sein ‚null‘ verlassen, während In der zweiten Zeile wird nichts angezeigt.

Fazit: Html.DisplayTextFor berücksichtigt die DataAnnotations auf Ihre Eigenschaften, <%: Model.Email %> wird nicht. Auch <%: Model.Email %> wird einen "Objekt Referenz Fehler" werfen, wenn der Wert Null ist, aber <%= Html.DisplayTextFor %> nicht.

5

Nun, DisplayTextFor nicht brechen, wenn Sie nicht passieren Modell (oder Null übergeben). Model.Email wird eine Ausnahme auf Null werfen. Daher ist DisplayTextFor robuster.

Der Punkt der stark typisierten Helfer ist es, größere Kompilierzeitprüfung zu ermöglichen. Dies ist sehr nützlich beim Refactoring.

DisplayTextFor ermöglicht die Verwendung eines konsistenten Konstrukts (mit den anderen stark typisierten Helfern) auf der ganzen Seite. Manche Leute finden das vielleicht ansprechender.

Mit DisplayTextFor können Sie auch die Namen von Vorlagen und Feldern als Parameter übergeben.

6

DisplayTextFor wird auch während der Ausführung "DisplayFor" und "EditFor" aufgerufen. Dies stellt sicher, dass alle Vorlagen-Helper den Text mit den richtigen Temple-Helfern anzeigen, wenn sie festgelegt sind ... so wird eine Änderung an dem einzelnen Vorlagenhelfer durch alle Anzeigen dieses Textelements weitergegeben ... einfache Anzeige, Formular bearbeiten, Formulare erstellen usw usw.

+0

Also sagen Sie, es ist eine Art wie .ToString() für die Modelleigenschaft? Wenn ja, könnte ich sehen, dass das hilfreich ist, wenn die Modelleigenschaft ein komplexer Typ ist. –