2010-11-02 22 views
13

por el defecto consobrescribir la clase en un `Html.EditorFor`

<%: Html.EditorFor(m => m.ConfirmationHeadline) %> 

la salida es:

<input type="text" value="" 
     name="ConfirmationHeadline" id="ConfirmationHeadline" 
     class="text-box single-line"> 

Como se puede ver, la entrada ya se añade un atributo class. Bueno, esto no debería ser un problema, sólo tiene que utilizar

<%: Html.EditorFor(m => m.ConfirmationHeadline, new { @class="span-11 last"}) %> 

y debería funcionar ... err ... pues no!

esto dará el mismo código de salida!

sin embargo, funciona bien con Html.TextAreaFor()

¿Cómo puedo eliminar la clase de text-box single-line siempre aparecen así que mis propias clases podrían ser añadidos? ¿Alguna plantilla de T4 que debería editar?

Gracias por toda la ayuda.

Respuesta

11

No hay forma de personalizar el valor del atributo de clase emitida cuando se utilizan plantillas de editor integradas mediante el método EditorFor. Difícil códigos de la clase de valor (más información disponible aquí: http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-3-default-templates.html)

tiene dos opciones:

  1. escribir su propia plantilla personalizada que es compatible con la funcionalidad adicional. Echa un vistazo aquí para más detalles: http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-4-custom-object-templates.html

  2. Proceso de la salida del método EditorFor:

<%: new HtmlString(Html.EditorFor(m=>m.ConfirmationHeadline).ToString() 
     .Replace("class=\"text-box single-line\"", 
       "class=\"text-box single-line span-11 last\"")) %> 
+1

después de leer todas las partes de ejemplos de Brad, que terminé usando '<%: Html.TextBox ("ConfirmationHeadline", null, nuevo {@class = "span-11 last"})%> 'Gracias por los enlaces. – balexandre

+0

¿Sigue funcionando igual en mvc4? – Nikos

2

asp.net mvc crea un archivo llamado site.css en la carpeta de contenido. Allí se puede ver que la clase de cuadro de texto se establece en un ancho de 30em por defecto. Restablételo a algo más sensato como 15em. La clase de línea única no parece estar definida en ningún lado.

+1

Siempre abandono el sitio.css! – Nikos

1

Se puede utilizar en lugar TextBoxFor

+2

solo para asegurarse, ¿conoce la diferencia entre 'EditorFor' y' TextboxFor'? Puede [verifíquelo aquí] (http://stackoverflow.com/questions/4826173) para obtener una respuesta rápida. – balexandre

0

que tenía este mismo problema y no me gustaba ninguna de las soluciones anteriores. También encontré una publicación similar here, pero tampoco me gustaron esas soluciones. Después de algunas herramientas, encontré algo que me gustaba, que me permitió continuar usando las plantillas de editor (que es algo que debe intentar aprovechar cada vez que pueda). Publiqué la solución here

5

En MCV 5.1 puede aprovechar htmlAttributes. Funciona como un encanto ...

@Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control", placeholder = "Enter your Name" } }) 
-2

tratar este código

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

Será mejor que agregue alguna explicación. – lpratlong

+0

REVISIÓN de publicaciones de baja calidad: siga los consejos de @Ipratlong. Esta respuesta en el formulario actual es probable que se elimine por razones de moderación. – ElmoVanKielmo

Cuestiones relacionadas