Unterschiede zwischen Html.TextboxFor und Html.EditorFor in MVC und Razor

170

Warum wurden diese standardmäßig geändert, wenn eine neue Ansicht "Bearbeiten" hinzugefügt wurde? Was sind Vorteile bei der Verwendung von EditorFor()vs. TextboxFor()?

ich habe das gefunden

Standardmäßig verwenden die Gerüste zum Erstellen und Bearbeiten jetzt den Html.EditorFor-Helfer anstelle des Html.TextBoxFor-Helfers. Dies verbessert die Unterstützung für Metadaten im Modell in Form von Datenanmerkungsattributen, wenn das Dialogfeld Ansicht hinzufügen eine Ansicht generiert.

ShaneKm
quelle
5
Hat jemand ein Beispiel dafür, wie das gemacht wird? Zum Beispiel einen Editor für einen DatePicker schreiben?
ShaneKm

Antworten:

166

Der Vorteil von EditorForist, dass Ihr Code nicht an ein gebunden ist <input type="text". Wenn Sie sich also dazu entschließen, etwas an dem Aspekt zu ändern, wie Ihre Textfelder wie das Umschließen in eine Textbox gerendert werden, können divSie einfach eine benutzerdefinierte Editorvorlage ( ~/Views/Shared/EditorTemplates/string.cshtml) schreiben, und alle Ihre Textfelder in Ihrer Anwendung profitieren automatisch von dieser Änderung, während Sie sie fest codiert Html.TextBoxForhaben muss es überall ändern. Sie können auch Datenanmerkungen verwenden, um die Darstellung zu steuern.

Darin Dimitrov
quelle
Es gibt einen Fehler, wahrscheinlich in einer alten Version. EditorFor erkennt 'double' nicht. Für 'long' wird es als 'int' betrachtet und step = "0.01" funktioniert nicht in Attributen, also habe ich TextBoxFor verwendet und @ type = 'number' @ step = "0.01" hinzugefügt, damit es funktioniert
Charlie
129

TextBoxFor : Es wird wie ein HTML-Element für die Texteingabe gerendert , das dem angegebenen Ausdruck entspricht. Mit einfachen Worten, es wird immer wie ein Eingabetextfeld gerendert, unabhängig vom Datentyp der Eigenschaft, die mit dem Steuerelement verbunden wird.

EditorFor : Dieses Steuerelement ist etwas intelligent. Es rendert HTML-Markups basierend auf dem Datentyp der Eigenschaft. Angenommen, das Modell enthält eine boolesche Eigenschaft. Um diese Eigenschaft in der Ansicht als Kontrollkästchen zu rendern, können Sie entweder CheckBoxFor oder EditorFor verwenden. Beide generieren das gleiche Markup.

Was ist der Vorteil von EditorFor?

Wie wir wissen, wird abhängig vom Datentyp der Eigenschaft das HTML-Markup generiert. Nehmen wir also an, dass morgen, wenn wir den Datentyp der Eigenschaft im Modell ändern, nichts in der Ansicht geändert werden muss. Das EditorFor-Steuerelement ändert das HTML-Markup automatisch.

Harshal
quelle
15
Eine großartige, einfache Antwort, die selbst von Anfängern leicht aufgenommen werden kann.
Könige
obige Beschreibung hilft diesem Link forums.asp.net/t/1948071.aspx?EditorFor+and+EditorForModel
Amol Shiledar
Gibt es jemals einen Fall, in dem Sie TextBoxFor unbedingt verwenden sollten?
eaglei22
55

Das Html.TextboxForerstellt immer ein Textfeld ( <input type="text" ...).

Während der EditorFor den Typ und die Metainformationen betrachtet und ein anderes Steuerelement oder eine von Ihnen bereitgestellte Vorlage rendern kann.

Beispielsweise können Sie für DateTime-Eigenschaften eine Vorlage erstellen, die den jQuery DatePicker verwendet.

GvS
quelle
12
Gibt es ein Beispiel für die Implementierung von jquery datepicker mit editfor?
Peru
2
Vielen Dank, dass Sie den Unterschied mithilfe des Datums- / Uhrzeitfalls vereinfacht haben.
Könige
1
@Peru, hier oder hier ist, wie man es benutzt implement jquery datepickerund mit EditorFor- hier ist
Shaijut
8

Dies ist einer der grundlegenden Unterschiede, die in früheren Kommentaren nicht erwähnt wurden:
ReadonlyEigenschaft funktioniert mit Textfeld für und es funktioniert nicht mit EditorFor.

@Html.TextBoxFor(model => model.DateSoldOn, new { @readonly = "readonly" })

Der obige Code funktioniert, wenn Sie wie beim Folgen nicht die Kontrolle schreibgeschützt machen können .

@Html.EditorFor(model => model.DateSoldOn, new { @readonly = "readonly" })
Lalitha1729
quelle
16
Sie können EditorFor mit der folgenden Syntax schreibgeschützt machen: @ Html.EditorFor (model => model.DateSoldOn, new {htmlAttributes = new {@readonly = "readonly"}})
Doug Knudsen
4

Es gibt auch einen kleinen Unterschied in der HTML-Ausgabe für einen String-Datentyp.

Html.EditorFor:  
<input id="Contact_FirstName" class="text-box single-line" type="text" value="Greg" name="Contact.FirstName">

Html.TextBoxFor:
<input id="Contact_FirstName" type="text" value="Greg" name="Contact.FirstName">
Greg Gum
quelle
2
Es ist eine absolut falsche Antwort, da der Hauptunterschied darin besteht, dass Texbox Eingaben zurückgibt und editorfor Ihre Vorlage zurückgibt, wobei die Eingabe die Standardvorlage für editorfor ist.
Artem G