2010-05-24 33 views
92

¿Existe una sintaxis más agradable al crear elementos con atributos con guiones en lugar de utilizar:html con guión atributos con asp.net mvc

<%= Html.TextBox ("name", value, new Dictionary<string, object> { {"data-foo", "bar"} }) %> 

En cuanto a las especificaciones de HTML para los estándares propuestos HTML 5 y que WIA ARIA parece que los guiones en los atributos de HTML se planean para ser más comunes como algún tipo de espaciado de nombre simple.

E.g. HTML 5 propone atributos personalizados con el prefijo data- y WIA ARIA utiliza el prefijo aria- para todos los atributos de WIA ARIA.

Al usar ayudantes de HTML en ASP.NET MVC como <%= Html.TextBox("name", value, new { attribute = attributeValue }) %>, el objeto anónimo se convierte a un diccionario.

Desafortunadamente en C# no hay soporte para guiones en los nombres, por lo que la única alternativa es crear un diccionario. La sintaxis para la cual es muy detallada, ¿alguien ha visto una alternativa más agradable o una forma simple de alterar la funcionalidad de las extensiones HTML de ASP.NET MVC sin tener que volver a escribir la extensión completa?

Respuesta

167

Use un guión bajo en el nombre del atributo de datos, y mágicamente lo manejará por usted, convirtiéndolo en un guión. Sabe que desea un guión en lugar de un guión bajo porque los guiones bajos no son válidos en los nombres de atributos html.

<%= Html.TextBox("name", value, new { @data_foo = "bar"}) %> 
+6

+1 Acabo de salvarme de escribir un código realmente feo. ¡Gracias! –

+2

Encontré un problema similar en varias preguntas de SO, y esta es la mejor respuesta. – user2780436

+0

¿Podría agregar el motivo de su extracto? ** los guiones bajos no son válidos en los atributos html **. Al menos [estados de html 4.01] (http://www.w3.org/TR/html401/intro/sgmltut.html#didx-attribute): _El valor del atributo solo puede contener letras (az y AZ), dígitos (0- 9), guiones (ASCII decimal 45), puntos (ASCII decimal 46), guiones bajos (ASCII decimal 95) y dos puntos (ASCII decimal 58) _, – surfmuggle

17

La respuesta proporcionada en ActionLink htmlAttributes sugiere utilizar guiones bajos en lugar de guiones. Se supone que MVC.Net debe emitir guiones en lugar de los guiones bajos al enviar la página al navegador.

+0

Esto funciona para mí. –