2011-12-19 57 views
29

Como sabe, podemos establecer atributos para actionLink o textBox en vistas de maquinilla de afeitar, pero ¿cómo podemos establecer atributos en @Html.EditorFor, sé que el EditorFor es un elemento dinámico que se puede establecer de acuerdo con el tipo de modelo, pero todas las formas de eso pueden obtener los atributos. Entonces, ¿hay alguna manera de establecer el atributo @Html.EditorFor algo como esto: new {@class = "myclass"}?Establezca el atributo de clase en Html.EditorFor en ASP.NET MVC Razor View

+0

No hay sobrecargas para esto, por lo tanto, no se puede hacer esto. ¿Por qué no usa el tipo real que desea (por ejemplo, TextBox) y lo pasa a ese – musefan

Respuesta

40

El helper EditorFor representa la plantilla de editor correspondiente. Podría ser el default template o alguna plantilla personalizada que haya escrito. Esta plantilla podría contener cualquier marca. Podría contener muchos elementos DOM. Entonces, ahora entiendes que pedir aplicar una clase a una plantilla no tiene sentido. ¿A qué elemento de esta plantilla quieres que se aplique esta clase? Por ejemplo, con el ayudante TextBoxFor sabes que generará un solo campo de entrada, por lo que tiene sentido hablar sobre aplicarle una clase CSS (eso es exactamente lo que el argumento htmlAttributes le permite hacer).

Dicho esto, hay diferentes técnicas. Por ejemplo, uno que me gusta mucho es escribir un proveedor de metadatos de modelo de anotaciones de datos personalizado y plantillas de editor personalizado como se describe en el following blog post.

Otra posibilidad es personalizar las plantillas predeterminadas (como se muestra en la publicación de blog de Brad Wilson) y aplicar diferentes atributos de HTML al campo de entrada correspondiente. Tomemos un ejemplo, con el editor de plantillas string.cshtml:

@model string 
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, ViewData) 

Y ahora cuando se quiere hacer que este editor de plantillas por alguna propiedad de la cadena en su modelo de vista:

@Html.EditorFor(x => x.SomeStringProperty, new { @class = "myclass" }) 
+0

? Uso esta clase para las entradas con tipo = (texto, archivo) y seleccione (menú desplegable). – Saeid

+0

@dotNetist, OK, entonces, como se indica en mi respuesta, tiene un par de maneras diferentes de implementar esto. –

+0

gracias, pero antes de leer las referencias que mencionas, tengo una pregunta al respecto: no quiero establecer el atributo para todos los tipos de cadenas (por ejemplo), tengo un attribue de custome (en mi modelo) y cambié el codetemplate (T4) y necesito la propiedad con ese atributo personalizado específico, establecí el atributo 'myclass' en editor para helper, ¿así es que piensas o no? – Saeid

2

Creo que el original cartel era correcta

  • cada EditorFor()

    crea una HTML element principales (aunque puede haber otras personas presentes), por lo que sería muy útil para poder pasar un objeto contiene HTML attributes aplicar a la principal HTML element.

  • que desea aplicar el HTML 5'enfoque automático' atributo en uno campo en cada forma,

  • pero no quiero tener que escribir código personalizado.

  • me gusta el hecho de que estoy actualmente reducido a usar, por ejemplo, para que una @Html.TextBoxFor()campo sólo para que pueda aplicar específica atributos a la input element.

  • El método EditorFor() tiene un parámetroque llaman additionalViewData, pero no tengo ni idea de lo que puede hacer con eso y buscar en MSDN no ha sido de ninguna ayuda para mí.

48

Prueba esto:

@Html.EditorFor(model => model.Title, new { htmlAttributes = new { @class = "form-control" } }) 
+2

Esto no está funcionando. –

+3

esto no está funcionando porque MVC 5 – HellBaby

+2

HellBaby tiene razón en que esta es la nueva sintaxis para MVC 5. new {htmlAttributes = new {@style = "width: 20px"}} como un ejemplo funciona para el estilo atributo también. – Nimblejoe

-1

probar este código simple para añadir la clase a @Html.EditorFor()

@Html.EditorFor(x => x.Demo) 

<style type="text/css"> 

#Demo 
{ 
    color:#fff; 
    width: 50%; 
} 

</style> 

este código funciona bien para MVC3

4

Añadir atributos personalizados como

@Html.EditorFor(model => model.Name, new { htmlAttributes = new { @data_minlength = "3", @class = "form-control input-md", @placeholder = "Name", @required = "required", @id= "txtName"} }) 

Reemplazar Data- a @data_

va a generar html correcta data-

Cuestiones relacionadas