Attributs HTML avec trait d'union avec asp.net mvc

111

Existe-t-il une syntaxe plus agréable lors de la création d'éléments avec des attributs coupés au lieu d'utiliser:

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

En regardant les spécifications HTML pour les normes proposées HTML 5 et WIA ARIA, il semble que les tirets dans les attributs HTML sont prévus pour être plus courants comme une sorte d'espacement simple des noms.

Par exemple, HTML 5 propose que les attributs personnalisés soient préfixés par data-et WIA ARIA utilise le aria-préfixe pour tous les attributs WIA ARIA.

Lors de l'utilisation des aides HTML dans ASP.NET MVC, par exemple, <%= Html.TextBox("name", value, new { attribute = attributeValue }) %>l'objet anonyme est converti en dictionnaire.

Malheureusement, en C #, il n'y a pas de support pour les traits d'union dans les noms, donc la seule alternative est de créer un dictionnaire. La syntaxe pour laquelle est très verbeuse, est-ce que quelqu'un a vu une alternative plus agréable ou un moyen simple de modifier la fonctionnalité des extensions HTML d'ASP.NET MVC sans avoir à réécrire l'extension entière?

Chris Chilvers
la source

Réponses:

202

Utilisez un trait de soulignement dans le nom de l'attribut de données, et il le gérera comme par magie pour vous, en le convertissant en trait d'union. Il sait que vous voulez un trait d'union plutôt qu'un trait de soulignement car les traits de soulignement ne sont pas valides dans les noms d'attributs html.

<%= Html.TextBox("name", value, new { @data_foo = "bar"}) %>
ED-209
la source
2
J'ai trouvé un problème similaire dans plusieurs questions SO, et c'est la meilleure réponse.
user2780436
Pouvez-vous ajouter la raison pour laquelle les traits de soulignement de votre déclaration ne sont pas valides dans les attributs html . Au moins les états HTML 4.01 : La valeur d'attribut ne peut contenir que des lettres (az et AZ), des chiffres (0-9), des tirets (ASCII décimal 45), des points (ASCII décimal 46), des traits de soulignement (ASCII décimal 95) et des deux-points ( ASCII decimal 58) ,
surfmuggle
@threeFourOneSixOneThree votre citation fait référence à la valeur d'attribut, mais dans cette question, nous faisons référence aux noms d'attributs.
ED-209 le
@threeFourOneSixOneThree J'ai changé la fin de ma réponse en "Les traits de soulignement ne sont pas valides dans les noms d'attributs html"
ED-209
19

La réponse fournie sur ActionLink htmlAttributes suggère d'utiliser des traits de soulignement au lieu de tirets. MVC.Net est censé émettre des traits d'union au lieu des traits de soulignement lors de l'envoi de la page au navigateur.

Zarepheth
la source