2011-01-28 19 views
146

Per quale motivo queste impostazioni sono state modificate quando si aggiungeva una nuova visualizzazione "Modifica"? Quali sono i vantaggi quando si utilizza EditorFor() rispetto a TextboxFor()?Differenze tra Html.TextboxFor e Html.EditorFor in MVC e Razor

ho trovato questo

Per impostazione predefinita, la Creazione e modifica di ponteggi ora usano l'aiutante Html.EditorFor invece che l'aiutante Html.TextBoxFor. Ciò migliora il supporto per i metadati sul modello sotto forma di attributi di annotazione dati quando la finestra di dialogo Aggiungi vista genera una vista.

+4

qualcuno ha un esempio di come è fatto? per esempio scrivere editor per DatePicker? – ShaneKm

risposta

138

I vantaggi di EditorFor è che il codice non è legato a uno <input type="text". Quindi, se decidi di cambiare qualcosa all'aspetto di come le tue caselle di testo sono visualizzate come in un div puoi semplicemente scrivere un modello di editor personalizzato (~/Views/Shared/EditorTemplates/string.cshtml) e tutte le tue caselle di testo nella tua applicazione trarranno automaticamente vantaggio da questa modifica mentre se hai hardcoded Html.TextBoxFor dovrai modificarlo ovunque. È anche possibile utilizzare Annotazioni dati per controllare il modo in cui viene eseguito il rendering.

+0

Ciao @Darin, sei stato n MVC star .. thx – Irfan

53

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

Mentre EditorFor esamina il tipo e la meta informazione e può eseguire il rendering di un altro controllo o di un modello fornito dall'utente.

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

+12

Qualche esempio su come implementare jquery datepicker usando editfor? – Peru

+2

grazie per semplificare la differenza utilizzando il caso data-time. – Kings

+1

@Peru, [qui] (http://instinctcoder.com/asp-net-mvc-4-jquery-datepicker/) o [qui] (http://www.asp.net/mvc/overview/older- versioni/con-il-HTML5-e-jquery-ui-datepicker-popup-calendar-con-ASPNET-mvc/con-il-HTML5-e-jquery-ui-datepicker-popup-calendar-con-ASPNET-mvc- part-4) è come 'implementare jquery datepicker' e usarlo con' EditorFor' è [qui] (http://stackoverflow.com/a/23142692/2218697) – stom

102

TextBoxFor: Renderà come testo l'elemento html di input corrispondente all'espressione specificata. In parole semplici renderà sempre come un input textbox qualsiasi tipo di proprietà della proprietà che si sta legando al controllo.

Editor per: questo controllo è un po 'intelligente. Rappresenta il markup HTML in base al tipo di dati della proprietà. Per 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, in base al tipo di dati della proprietà genera il markup html. Quindi supponiamo domani se cambiamo il tipo di dati della proprietà nel modello, non c'è bisogno di cambiare nulla nella vista. EditorPer il controllo cambierà automaticamente il markup html.

+10

ottima, semplice risposta che può essere facilmente assorbita anche da un novizio. – Kings

+0

sopra la descrizione aiuterà questo collegamento https://forums.asp.net/t/1948071.aspx?EditorFor+and+EditorForModel –

+0

C'è mai un caso in cui si dovrebbe assolutamente utilizzare TextBoxFor? – eaglei22

3

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

è una risposta assolutamente sbagliata, perché la differenza fondamentale è che Texbox restituisce input e editorfor restituisce il modello in cui input è il modello predefinito per editorfor. –

5

Questa è una delle differenze fondamentali non menzionate nei commenti precedenti:
Readonly proprietà lavorerà con testo e non funzionerà con EditorFor.

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

Sopra codice funziona, dove come con i seguenti non è possibile effettuare il controllo di sola lettura .

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

È possibile rendere EditorFor in sola lettura utilizzando la seguente sintassi: @ Html.EditorFor (model => model.DateSoldOn, new {htmlAttributes = new {@readonly = "readonly"}}) –