Atributos html con guiones con asp.net mvc

111

¿Existe una sintaxis mejor al crear elementos con atributos con guiones en lugar de usar:

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

Al observar las especificaciones HTML para los estándares propuestos HTML 5 y WIA ARIA , parece que se planea que los guiones en los atributos HTML sean más comunes como una especie de espaciado de nombres simple.

Por ejemplo, HTML 5 propone que los atributos personalizados tengan el prefijo data-y WIA ARIA usa el aria-prefijo para todos los atributos de WIA ARIA.

Cuando se utilizan ayudantes HTML en ASP.NET MVC, como <%= Html.TextBox("name", value, new { attribute = attributeValue }) %>el objeto anónimo se convierte en 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 mejor 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?

Chris Chilvers
fuente

Respuestas:

202

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

<%= Html.TextBox("name", value, new { @data_foo = "bar"}) %>
ED-209
fuente
2
Encontré un problema similar en varias preguntas SO, y esta es la mejor respuesta.
user2780436
¿Podría agregar el motivo por el cual los guiones bajos de su declaración no son válidos en los atributos html ? Al menos estados html 4.01 : 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
@threeFourOneSixOneThree su cita se refiere al valor del atributo, pero en esta pregunta nos referimos a los nombres de los atributos.
ED-209
@threeFourOneSixOneThree He cambiado el final de mi respuesta a 'los guiones bajos no son válidos en los nombres de los atributos html'
ED-209
19

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

Zarefet
fuente