2010-11-02 7 views
13

dal default conSovrascrittura classe su un `Html.EditorFor`

<%: 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!

questo produrrà lo stesso identico codice!

però, funziona bene con Html.TextAreaFor()

Come posso rimuovere la classe text-box single-line da sempre appaiono così le mie lezioni potrebbero essere aggiunti? qualsiasi modello T4 che dovrei modificare?

Grazie per tutto l'aiuto.

risposta

11

Non è possibile personalizzare il valore dell'attributo di classe emessa quando si utilizzano i modelli di editor incorporato tramite il metodo EditorFor. It Hard-codes il valore di classe (per maggiori informazioni clicca qui: http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-3-default-templates.html)

Si hanno due opzioni:

  1. scrivere il proprio 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

  2. processo l'uscita 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\"")) %> 
+1

dopo aver letto tutte le parti del esempi di Brad, ho finito per usare '<%: Html.TextBox ("ConfirmationHeadline", null, nuova {@class = "span-11 last"})%> 'Grazie per i collegamenti. – balexandre

+0

Funziona ancora lo stesso in mvc4? – Nikos

2

asp.net mvc crea un file chiamato site.css nella cartella dei contenuti. Qui puoi vedere che la classe text-box è impostata su una larghezza di 30em per impostazione predefinita. Resettalo a qualcosa di più sano come 15em. La classe a riga singola non sembra essere definita da nessuna parte.

+1

Ho sempre scaricato il sito.css! – Nikos

1

È possibile utilizzare TextBoxFor invece

+2

solo per essere sicuri, conosci il diverso tra 'EditorFor' e' TextboxFor'? Puoi [controllarlo qui] (http://stackoverflow.com/questions/4826173) per una risposta rapida. – balexandre

0

Ho avuto questo stesso problema e non come una delle soluzioni sopra. Ho anche trovato un post simile here, ma non mi piacevano neanche quelle soluzioni. Dopo alcuni strumenti, ho trovato qualcosa che mi piaceva, il che mi permette di continuare a usare i Template Editor (che è qualcosa che dovresti provare a sfruttare ogni volta che puoi). Ho postato la soluzione here

5

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" } }) 
-2

provare questo codice

@Html.Raw(
    Html.EditorFor(m => m.DataInicial).ToString() 
    .Replace(
     "\"text-box single-line\"", 
     "\"form-control text-box single-line\"")) 
+4

Faresti meglio ad aggiungere qualche spiegazione. – lpratlong

+0

REVISIONE di post di bassa qualità: segui i consigli di @Ipratlong. È probabile che questa risposta nel modulo corrente venga eliminata per motivi di moderazione. – ElmoVanKielmo

Problemi correlati