Differenze tra Html.TextboxFor e Html.EditorFor in MVC e Razor


170

Perché di default sono stati cambiati quando si aggiunge una nuova vista "modifica"? Quali sono i vantaggi quando si utilizza EditorFor()vs. TextboxFor()?

ho trovato questo

Per impostazione predefinita, gli scaffold Crea e modifica ora utilizzano l'helper Html.EditorFor anziché l'helper Html.TextBoxFor. Ciò migliora il supporto per i metadati sul modello sotto forma di attributi di annotazione dei dati quando la finestra di dialogo Aggiungi vista genera una vista.


5
qualcuno ha un esempio di come viene fatto? per esempio scrivere un editor per un DatePicker?
ShaneKm,

Risposte:


166

Il vantaggio di EditorForè che il tuo codice non è legato a un <input type="text". Quindi, se si decide di cambiare qualcosa per l'aspetto di come le vostre caselle di testo sono resi come avvolgendoli in una divsi può semplicemente scrivere un editor di modelli personalizzati ( ~/Views/Shared/EditorTemplates/string.cshtml) e tutti i tuoi caselle di testo nella vostra applicazione beneficerà automaticamente da questo cambiamento, mentre se si è hardcoded Html.TextBoxForvoi dovrà modificarlo ovunque. È inoltre possibile utilizzare Annotazioni dati per controllare il modo in cui viene visualizzato.


C'è un bug, probabilmente in una vecchia versione. EditorFor non riconosce 'double'. Per 'lungo' lo considera come 'int' e step = "0.01" non funziona negli attributi, quindi ho usato TextBoxFor e ho aggiunto @ type = 'number' @ step = "0.01", quindi ha funzionato
Charlie

129

TextBoxFor : verrà visualizzato come elemento html di input di testo corrispondente all'espressione specificata. In parole semplici, verrà sempre visualizzato come una casella di testo di input indipendentemente dal tipo di dati della proprietà che si sta legando al controllo.

EditorFor : questo controllo è un po 'intelligente. Esegue il rendering del markup HTML in base al tipo di dati della proprietà. Ad esempio supponiamo che ci sia una proprietà booleana nel modello. Per rendere questa proprietà nella vista come una casella di controllo, possiamo usare CheckBoxFor o EditorFor. Entrambi genereranno lo stesso markup.

Qual è il vantaggio dell'utilizzo di EditorFor?

Come sappiamo, a seconda del tipo di dati della proprietà genera il markup html. Quindi supponiamo domani se cambiamo il tipo di dati della proprietà nel modello, non è necessario cambiare nulla nella vista. EditorPer il controllo cambierà automaticamente il markup html.


15
grande, semplice risposta che può essere facilmente assorbita anche da un principiante.
Re


C'è mai un caso in cui dovresti assolutamente usare TextBoxFor?
eaglei22

55

Il Html.TextboxForcrea sempre una casella di testo ( <input type="text" ...).

Mentre EditorFor esamina il tipo e le meta informazioni e può eseguire il rendering di un altro controllo o modello fornito.

Ad esempio per le proprietà DateTime è possibile creare un modello che utilizza jQuery DatePicker.


12
Qualche esempio su come implementare jpery datepicker usando editfor?
Perù,

2
grazie per semplificare la differenza usando il caso data-ora.
Re

1
@Perù, qui o qui è come implement jquery datepickere usarlo con EditorForè qui
shaijut

8

Questa è una delle differenze di base non menzionate nei commenti precedenti: la
Readonlyproprietà funzionerà con la casella di testo e non funzionerà EditorFor.

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

Il codice sopra funziona, dove come con il seguito non è possibile effettuare il controllo in sola lettura .

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

16
Puoi creare EditorFor in sola lettura usando la sintassi seguente: @ Html.EditorFor (model => model.DateSoldOn, new {htmlAttributes = new {@readonly = "readonly"}})
Doug Knudsen,

4

C'è anche una leggera differenza nell'output html per un tipo di dati stringa.

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">

2
è una risposta assolutamente errata, poiché la differenza chiave è che Texbox restituisce input e editor for restituisce il modello in cui input è modello predefinito per editorfor.
Artem G,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.