2009-05-18 10 views
181

ASP.NET MVC puede generar elementos HTML utilizando HTML Helpers, por ejemplo @Html.ActionLink(), @Html.BeginForm() y así sucesivamente.¿Cómo puedo agregar un atributo de clase a un elemento HTML generado por los HTML Helpers de MVC?

Sé que puedo especificar atributos de formulario mediante la creación de un anonymous object y pasar ese objeto para el (cuarto en este caso) htmlAttributes parámetros en donde la especificación de una id para el elemento:

Html.BeginForm("Foo", "Bar", FormMethod.Post, new { id = "MyForm"}) 

Pero ¿qué pasa con el atributo class ? Obviamente esto no funciona:

Html.BeginForm("Foo", "Bar", FormMethod.Post, new { class = "myclass"}) 

Como que acaba de tiros errores de sintaxis al azar cuando se solicita mi punto de vista, porque espera algo más después de encontrarse con la palabra clave C# class.

También he intentado:

new { _class = "myclass"} 

y

new { class_ = "myclass"} 

Pero también no funcionó, como el underscores get replaced by dashes.

Sé que también puedo escribir los elementos HTML a mano o envolver el formulario dentro de un <div class="myClass">, pero aún estaría interesado en saber cómo se debe hacer.

Respuesta

341

el fin de crear un tipo anónimo (o cualquier tipo) con una propiedad que tiene un reserved keyword como su nombre en C#, puede anteponer el nombre de propiedad con una arroba, @:

Html.BeginForm("Foo", "Bar", FormMethod.Post, new { @class = "myclass"}) 

Para VB.NET this syntax would be a cabo utilizando el punto, ., que en ese idioma es la sintaxis predeterminada para all anonymous types:

Html.BeginForm("Foo", "Bar", FormMethod.Post, new with { .class = "myclass" }) 
+0

Perfecto. ¡Gracias! :-) –

+0

El analizador no es lo suficientemente inteligente, IMO, si necesita esa pista dado el contexto en el que se encuentra en ese punto del código. – toddmo

3

mejores prácticas actuales en el desarrollo de CSS es crear sele más general ctors con modificadores que se pueden aplicar de la manera más amplia posible en todo el sitio web. Intentaré evitar definir estilos separados para elementos de página individuales.

Si el objetivo de la clase CSS en el elemento <form/> es controlar el estilo de los elementos dentro del formulario, puede agregar el atributo class <fieldset/> que encapsula cualquier formulario de forma predeterminada en las páginas web generadas por ASP.NET MVC. Una clase de CSS en el formulario rara vez es necesaria.

+4

Tiene toda la razón, sin embargo, este caso es diferente. Estaba buscando una forma de especificar metadatos para algunos plugins jquery. Esto generalmente se hace mal uso del atributo de clase. –

+13

Puede sugerir mejores prácticas, pero si tengo una plantilla que usa css en un formulario, no voy a eliminar la plantilla para que sea "correcta". La realidad es que un cliente no va a pagar más porque usted hizo lo correcto por css ... –

+1

@ChristianPayne Se los podría obligar a pagar más en el futuro porque usted no lo hizo. –

Cuestiones relacionadas