Bindestrich-HTML-Attribute mit asp.net mvc

111

Gibt es eine schönere Syntax beim Erstellen von Elementen mit getrennten Attributen, anstatt Folgendes zu verwenden:

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

Wenn man sich die HTML-Spezifikationen für die vorgeschlagenen Standards HTML 5 und WIA ARIA ansieht , scheint es, dass Bindestriche in HTML-Attributen häufiger als eine Art einfacher Namensabstand geplant sind.

Beispielsweise schlägt HTML 5 vor, dass benutzerdefinierten Attributen ein Präfix vorangestellt wird data-und WIA ARIA das aria-Präfix für alle WIA ARIA-Attribute verwendet.

Bei Verwendung von HTML-Hilfsprogrammen in ASP.NET MVC wird beispielsweise <%= Html.TextBox("name", value, new { attribute = attributeValue }) %>das anonyme Objekt in ein Wörterbuch konvertiert.

Leider werden in C # keine Bindestriche in Namen unterstützt, daher besteht die einzige Alternative darin, ein Wörterbuch zu erstellen. Hat jemand eine schönere Alternative oder eine einfache Möglichkeit gesehen, die Funktionalität der HTML-Erweiterungen von ASP.NET MVC zu ändern, ohne die gesamte Erweiterung neu schreiben zu müssen?

Chris Chilvers
quelle

Antworten:

202

Verwenden Sie einen Unterstrich im Namen des Datenattributs, und dieser behandelt ihn auf magische Weise und konvertiert ihn in einen Bindestrich. Es ist bekannt, dass Sie einen Bindestrich anstelle eines Unterstrichs wünschen, da Unterstriche in HTML-Attributnamen nicht gültig sind.

<%= Html.TextBox("name", value, new { @data_foo = "bar"}) %>
ED-209
quelle
2
Ich habe in mehreren SO-Fragen ein ähnliches Problem gefunden, und dies ist die beste Antwort.
user2780436
Könnten Sie den Grund für Ihre Aussage hinzufügen? Unterstriche sind in HTML-Attributen nicht gültig . Mindestens in HTML 4.01 heißt es : Der Attributwert darf nur Buchstaben (az und AZ), Ziffern (0-9), Bindestriche (ASCII-Dezimalzahl 45), Punkte (ASCII-Dezimalzahl 46), Unterstriche (ASCII-Dezimalzahl 95) und Doppelpunkte ( ASCII Dezimalstelle 58) ,
Surfmuggle
@threeFourOneSixOneThree Ihr Zitat bezieht sich auf den Attributwert, aber in dieser Frage beziehen wir uns auf Attributnamen.
ED-209
@threeFourOneSixOneThree Ich habe das Ende meiner Antwort in "Unterstriche sind in HTML-Attributnamen nicht gültig" geändert
ED-209
19

Die Antwort bei ActionLink htmlAttributes schlägt vor, Unterstriche anstelle von Bindestrichen zu verwenden. MVC.Net soll beim Senden der Seite an den Browser Bindestriche anstelle der Unterstriche ausgeben.

Zarepheth
quelle