2013-10-29 8 views
30

Warum sollte ich LabelFor anstelle von <label> verwenden?Warum sollte ich LabelFor in MVC verwenden?

z.

@Html.LabelFor(model => model.FirstName) 
@Html.DisplayFor(model => model.FirstName) 

vs

<label for="FirstName">First Name</label> 
@Html.DisplayFor(model => model.FirstName) 

Zusätzlich zu den oben genannten, @ p.s.w.g hat den DRY Aspekt dieser Frage bedeckt. Ich würde auch gerne wissen, ob es bei der Lokalisierung hilft. dh. Unterschiedliche Bezeichnungen basierend auf der aktuellen Spracheinstellung.

Antwort

40

Nun, wenn Sie Ihre Modelle mit der DisplayNameAttribute wie diese eingerichtet haben:

[DisplayName("First Name")] 
string FirstName { get; set; } 

Dann geben Sie nur das, was der Text des Etiketts an einem Ort sein würde. Sie müssen möglicherweise eine ähnliche Bezeichnung in der Anzahl der Orte erstellen, und wenn Sie jemals den Text der Beschriftung ändern sollten, wäre es praktisch, dies nur einmal zu tun.

Dies ist umso wichtiger, wenn Sie für verschiedene Sprachen Ihre Anwendung lokalisieren möchten, die Sie mit dem DisplayAttribute tun können:

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

Es bedeutet auch, dass Sie mehr stark typisierte Ansichten haben. Es ist einfach, eine Zeichenfolge wie zu fetten, wenn Sie es viel eingeben müssen, aber die Verwendung der Hilfsmethode ermöglicht es dem Compiler, solche Fehler die meiste Zeit zu erfassen.

+1

Sollte die Beziehung View - ViewModel nicht eins zu eins sein? In diesem Fall müssen Sie immer noch so oft eingeben, ob es in der Ansicht oder im ViewModel ist. – Jamie

+3

@Jamie Es funktioniert normalerweise nicht so. Zum einen haben Sie wahrscheinlich unterschiedliche Ansichten für die Anzeige im Vergleich zur Bearbeitung der Daten. Außerdem müssen Sie wahrscheinlich an anderen Stellen in Ihrer App "LabelFor" oder "DisplayNameFor" aussortieren. –

+0

Welchen Vorteil bietet DisplayNameFor gegenüber LabelFor? – Jamie

4

LabelFor können Sie alles aus Ihrem Ansichtsmodell steuern, ohne sich um die Steuerung kümmern zu müssen.

Nehmen wir an, Sie verwenden dasselbe Ansichtsmodell an zwei Stellen, dh Sie können den Namen an einer Stelle ändern, um alle Steuerelemente zu aktualisieren.

Nicht haben verwendet werden, aber es hat seine Verwendungen.