Dzielone atrybuty html z asp.net mvc

111

Czy istnieje ładniejsza składnia podczas tworzenia elementów z atrybutami dzielonymi zamiast używania:

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

Patrząc na specyfikacje HTML dla proponowanych standardów HTML 5 i WIA ARIA , wydaje się, że myślniki w atrybutach HTML są planowane jako bardziej powszechne jako pewnego rodzaju proste odstępy między nazwami.

Np. HTML 5 proponuje, aby atrybuty niestandardowe były poprzedzone prefiksem, data-a WIA ARIA używa aria-przedrostka dla wszystkich atrybutów WIA ARIA.

W przypadku korzystania z pomocników HTML w ASP.NET MVC, takich jak <%= Html.TextBox("name", value, new { attribute = attributeValue }) %>obiekt anonimowy, jest konwertowany na słownik.

Niestety w C # nie ma obsługi łączników w nazwach, więc jedyną alternatywą jest utworzenie słownika. Składnia, dla której jest bardzo rozwlekła, czy ktoś widział lepszą alternatywę lub prosty sposób na zmianę funkcjonalności rozszerzeń HTML ASP.NET MVC bez konieczności ponownego pisania całego rozszerzenia?

Chris Chilvers
źródło

Odpowiedzi:

202

Użyj podkreślenia w nazwie atrybutu danych, a on w magiczny sposób sobie z tym poradzi, konwertując go na łącznik. Wie, że chcesz użyć łącznika, a nie podkreślenia, ponieważ podkreślenia nie są prawidłowe w nazwach atrybutów html.

<%= Html.TextBox("name", value, new { @data_foo = "bar"}) %>
ED-209
źródło
2
Znalazłem podobny problem w kilku pytaniach SO i to jest najlepsza odpowiedź.
user2780436
Czy możesz dodać powód, dla którego podkreślenia w oświadczeniu nie są prawidłowe w atrybutach html . Co najmniej html 4.01 stwierdza : Wartość atrybutu może zawierać tylko litery (az i AZ), cyfry (0-9), łączniki (ASCII dziesiętne 45), kropki (ASCII dziesiętne 46), podkreślenia (ASCII dziesiętne 95) i dwukropki ( ASCII decimal 58) ,
surfmuggle
@threeFourOneSixOneThree Twój cytat odnosi się do wartości atrybutu, ale w tym pytaniu odnosimy się do nazw atrybutów.
ED-209,
@threeFourOneSixOneThree Zmieniłem koniec mojej odpowiedzi na „podkreślenia nie są prawidłowe w nazwach atrybutów html”
ED-209
19

Odpowiedź podana w ActionLink htmlAttributes sugeruje użycie podkreślenia zamiast łączników. MVC.Net ma emitować łączniki zamiast podkreśleń podczas wysyłania strony do przeglądarki.

Zarepheth
źródło