Html.DisplayFor() rendert die DisplayTemplate, die dem Typ der Eigenschaft entspricht.
Wenn es keine findet, ruft es vermutlich auf .ToString().
Wenn Sie sich mit Anzeigevorlagen nicht auskennen, handelt es sich um Teilansichten, die in einem DisplayTemplatesOrdner innerhalb des einem Controller zugeordneten Ansichtsordners abgelegt werden können.
Beispiel:
Wenn Sie eine Ansicht mit dem folgenden Code String.cshtmlim DisplayTemplatesOrdner Ihres Ansichtsordners (z. B. Homeoder Shared) erstellen:
Dann @Html.DisplayFor(model => model.Title)(vorausgesetzt, es Titlehandelt sich um eine Zeichenfolge) wird die Vorlage verwendet und angezeigt, <strong>Null string</strong>ob die Zeichenfolge null oder leer ist.
In den meisten Fällen erscheint es mir sinnlos, DisplayFor für primitive Typen zu verwenden. Beispielsweise würde DateTime Datum / Uhrzeit anzeigen, selbst wenn der Zeitteil unbrauchbar wäre. Wenn Sie eine Formatzeichenfolge "{0: d}" für einen DateTime-Typ in den Attributen der Eigenschaft im Modell angeben könnten, könnte DisplayFor möglicherweise nützlicher sein.
Sie können der EditorFor-Vorlage für einen DateTime-Datentyp eine jQuery-Datumsauswahl hinzufügen, um beispielsweise immer eine Datumsauswahl in Formularen anzuzeigen.
Zachary Scott
4
Es scheint mir, als wäre es übertrieben, es im Allgemeinen zu verwenden, aber Sie sollten es verwenden, wenn Sie die Ausgabe für bestimmte Modellattribute formatieren möchten. Hilfreiche Fragen und Antworten Jungs, danke. + 1s rundum.
Robin Winslow
Was passiert, wenn Sie zwei Modelle mit demselben Namen haben?
Halivingston
77
Ich denke, der Hauptvorteil wäre, wenn Sie Ihre eigenen Anzeigevorlagen definieren oder Datenanmerkungen verwenden.
Wenn Ihr Titel beispielsweise ein Datum war, können Sie ihn definieren
[DisplayFormat(DataFormatString="{0:d}")]
und dann würde auf jeder Seite der Wert auf konsistente Weise angezeigt. Andernfalls müssen Sie möglicherweise die Anzeige auf mehreren Seiten anpassen. Es hilft also nicht viel für einfache Zeichenfolgen, aber es hilft für Währungen, Daten, E-Mails, URLs usw.
Beispielsweise könnte eine E-Mail-Adresse anstelle einer einfachen Zeichenfolge als Link angezeigt werden:
DisplayForist auch nützlich für Vorlagen. Sie könnten eine Vorlage für Ihr Modell schreiben und Folgendes tun:
@Html.DisplayFor(m => m)
Ähnlich wie @Html.EditorFor(m => m). Dies ist nützlich für das DRY-Prinzip, damit Sie nicht immer wieder dieselbe Anzeigelogik für dasselbe Modell schreiben müssen.
Schauen Sie sich diesen Blog über MVC2-Vorlagen an. Es ist immer noch sehr gut auf MVC3 anwendbar:
Dies ist auch nützlich, wenn Ihr Modell über eine Datenanmerkung verfügt. Wenn die Eigenschaft des Modells beispielsweise mit der EmailAddressDatenanmerkung versehen ist, DisplayForwird sie als mailto:Link gerendert.
@Html.DisplayFor(m => m)kann auch einfach vereinfacht werden @Html.DisplayForModel().
Brant Bobby
Was ist der Lamda-Ausdruck (m => m)? Was ist das erste m darstellen?
Arcadian
1
Das erste m ist der Name des Parameters
Sinaesthetic
1
@ magic-c0d3r Das erste m ist das Modellobjekt der Seite. Das ist, was im labmda Ausdruck verwendet wird
Don Cheadle
4
Nachdem ich einige Zeit nach einer Antwort für mich gesucht hatte, konnte ich etwas finden. Wenn wir es nur für eine Eigenschaft verwenden, wird es im Allgemeinen auch dann angezeigt, wenn wir eine "Ansichtsquelle" für generierten HTML-Code erstellen. Im Folgenden wird beispielsweise HTML generiert, wenn ich nur die Name-Eigenschaft für meine Klasse anzeigen möchte
<td>
myClassNameProperty</td><td>
myClassNameProperty,Thisis direct fromItem</td>
Dies ist der generierte HTML-Code aus dem folgenden Code
<td>@Html.DisplayFor(modelItem=>item.Genre.Name)</td><td>@item.Genre.Name,Thisis direct fromItem</td>
Zur gleichen Zeit, wenn ich in diesem Fall alle Eigenschaften in einer Anweisung für meine Klasse "Genre" anzeigen möchte, kann ich zumindest @ Html.DisplayFor () verwenden, um meine Eingabe zu speichern
Ich kann @ Html.DisplayFor (modelItem => item.Genre) schreiben, anstatt eine separate Anweisung für jede Eigenschaft von Genre wie unten zu schreiben
Ich denke, der Hauptvorteil wäre, wenn Sie Ihre eigenen Anzeigevorlagen definieren oder Datenanmerkungen verwenden.
Wenn Ihr Titel beispielsweise ein Datum war, können Sie ihn definieren
und dann würde auf jeder Seite der Wert auf konsistente Weise angezeigt. Andernfalls müssen Sie möglicherweise die Anzeige auf mehreren Seiten anpassen. Es hilft also nicht viel für einfache Zeichenfolgen, aber es hilft für Währungen, Daten, E-Mails, URLs usw.
Beispielsweise könnte eine E-Mail-Adresse anstelle einer einfachen Zeichenfolge als Link angezeigt werden:
quelle
DisplayFor
ist auch nützlich für Vorlagen. Sie könnten eine Vorlage für Ihr Modell schreiben und Folgendes tun:Ähnlich wie
@Html.EditorFor(m => m)
. Dies ist nützlich für das DRY-Prinzip, damit Sie nicht immer wieder dieselbe Anzeigelogik für dasselbe Modell schreiben müssen.Schauen Sie sich diesen Blog über MVC2-Vorlagen an. Es ist immer noch sehr gut auf MVC3 anwendbar:
http://www.dalsoft.co.uk/blog/index.php/2010/04/26/mvc-2-templates/
Dies ist auch nützlich, wenn Ihr Modell über eine Datenanmerkung verfügt. Wenn die Eigenschaft des Modells beispielsweise mit der
EmailAddress
Datenanmerkung versehen ist,DisplayFor
wird sie alsmailto:
Link gerendert.quelle
@Html.DisplayFor(m => m)
kann auch einfach vereinfacht werden@Html.DisplayForModel()
.Nachdem ich einige Zeit nach einer Antwort für mich gesucht hatte, konnte ich etwas finden. Wenn wir es nur für eine Eigenschaft verwenden, wird es im Allgemeinen auch dann angezeigt, wenn wir eine "Ansichtsquelle" für generierten HTML-Code erstellen. Im Folgenden wird beispielsweise HTML generiert, wenn ich nur die Name-Eigenschaft für meine Klasse anzeigen möchte
Dies ist der generierte HTML-Code aus dem folgenden Code
Zur gleichen Zeit, wenn ich in diesem Fall alle Eigenschaften in einer Anweisung für meine Klasse "Genre" anzeigen möchte, kann ich zumindest @ Html.DisplayFor () verwenden, um meine Eingabe zu speichern
Ich kann @ Html.DisplayFor (modelItem => item.Genre) schreiben, anstatt eine separate Anweisung für jede Eigenschaft von Genre wie unten zu schreiben
und so weiter abhängig von der Anzahl der Eigenschaften.
quelle