2010-05-24 6 views
92

Gibt es eine schönere Syntax, wenn Elemente mit Bindestrichen Attributen anstelle der Verwendung zu schaffen: esHyphenated HTML-Attribute mit asp.net MVC

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

Mit Blick auf den HTML-Spezifikationen für den vorgeschlagenen Standards HTML 5 und WIA ARIA Es scheint, dass Bindestriche in HTML-Attributen als eine Art einfacher Namensabstand gebräuchlicher sind.

z. HTML 5 schlägt vor, dass benutzerdefinierte Attribute das Präfix data- haben und WIA ARIA das Präfix aria- für alle WIA ARIA-Attribute verwendet.

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

Leider in C# gibt es keine Unterstützung für Bindestriche in Namen, so dass die einzige Alternative ist, ein Wörterbuch zu erstellen. Die Syntax für die ist sehr ausführlich, hat jemand eine schönere Alternative oder eine einfache Möglichkeit zur Änderung der Funktionalität der HTML-Erweiterungen von ASP.NET MVC gesehen, ohne die gesamte Erweiterung neu schreiben zu müssen?

Antwort

167

Verwenden Sie einen Unterstrich im Datenattributnamen, und es wird auf magische Weise für Sie verarbeitet und in einen Bindestrich konvertiert. Es weiß, dass Sie lieber einen Bindestrich als einen Unterstrich möchten, da Unterstriche in HTML-Attributnamen nicht gültig sind.

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

+1 Ich habe mich gerade davor bewahrt, wirklich hässlichen Code zu schreiben. Vielen Dank! –

+2

Ich fand ein ähnliches Problem mehrere SO Fragen, und das ist die beste Antwort. – user2780436

+0

Könnten Sie den Grund für Ihre Aussage hinzufügen ** Unterstriche sind in HTML-Attributen nicht gültig **. Mindestens [html 4.01 states] (http://www.w3.org/TR/html401/intro/sgmltut.html#didx-attribute): _Der Attributwert darf nur Buchstaben (az und AZ), Ziffern (0- 9), Bindestriche (ASCII Dezimal 45), Punkte (ASCII Dezimal 46), Unterstriche (ASCII Dezimal 95) und Doppelpunkte (ASCII Dezimal 58) _, – surfmuggle

17

Die Antwort unter ActionLink htmlAttributes schlägt vor, Unterstriche anstelle von Bindestrichen zu verwenden. MVC.Net soll anstelle der Unterstriche Bindestriche ausgeben, wenn die Seite an den Browser gesendet wird.

+0

Das funktioniert für mich. –