Sovrascrivendo la classe su un `Html.EditorFor`
-
28-09-2019 - |
Domanda
dal default con
<%: Html.EditorFor(m => m.ConfirmationHeadline) %>
L'output è:
<input type="text" value=""
name="ConfirmationHeadline" id="ConfirmationHeadline"
class="text-box single-line">
Come si può vedere, l'ingresso aggiunge già un attributo class
. Beh, questo non dovrebbe essere un problema, basta usare
<%: Html.EditorFor(m => m.ConfirmationHeadline, new { @class="span-11 last"}) %>
e dovrebbe funzionare ... err ... no!
questa uscita volontà esattamente lo stesso codice!
, però, funziona bene con Html.TextAreaFor()
Come posso rimuovere apparire il text-box single-line
classe da sempre così le mie lezioni potrebbero essere aggiunti? qualsiasi T4 template dovrei cura?
Grazie per tutto l'aiuto.
Soluzione
Non v'è alcun modo per personalizzare il valore dell'attributo class emessa quando utilizzando built-in Editor modelli attraverso il metodo EditorFor
. E 'hard-codici il valore di classe (maggiori informazioni disponibili in questo sito: http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-3-default-templates.html )
Sono disponibili due opzioni:
-
Scrivi la tua modello personalizzato che supporta la funzionalità extra. Date un'occhiata qui per maggiori dettagli: http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-4-custom-object-templates.html
-
processare l'output del metodo
EditorFor
:
<%: new HtmlString(Html.EditorFor(m=>m.ConfirmationHeadline).ToString()
.Replace("class=\"text-box single-line\"",
"class=\"text-box single-line span-11 last\"")) %>
Altri suggerimenti
In MCV 5.1 è possibile usufruire di htmlAttributes. Funziona come un fascino ...
@Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control", placeholder = "Enter your Name" } })
asp.net mvc crea un file chiamato site.css nella cartella dei contenuti. Ci si può vedere che la classe casella di testo è impostata su una larghezza di 30em per impostazione predefinita. Ripristina a qualcosa di più sano come 15em. La classe linea singola non sembra essere definita da nessuna parte.
È possibile utilizzare TextBoxFor
invece
Ho avuto questo stesso problema e non mi piaceva nessuna delle soluzioni di cui sopra. Ho anche trovato un post simile qui , ma non mi piaceva quelle soluzioni sia. Dopo un po 'utensili in giro, ho trovato qualcosa che mi piaceva, che mi permetta di continuare a utilizzare i modelli Editor (che è qualcosa che si dovrebbe cercare di approfittare di ogni volta che potete). Ho postato la soluzione qui
provare questo codice
@Html.Raw(
Html.EditorFor(m => m.DataInicial).ToString()
.Replace(
"\"text-box single-line\"",
"\"form-control text-box single-line\""))