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?

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"}) %>

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.