Атрибуты html с переносом через asp.net mvc


111

Есть ли более приятный синтаксис при создании элементов с атрибутами через дефис вместо использования:

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

Глядя на спецификации HTML для предлагаемых стандартов HTML 5 и WIA ARIA, кажется, что дефисы в атрибутах HTML планируется сделать более распространенными как своего рода простой интервал между именами.

Например, HTML 5 предлагает настраиваемые атрибуты с префиксом, data-а WIA ARIA использует aria-префикс для всех атрибутов WIA ARIA.

При использовании помощников HTML в ASP.NET MVC, таких как <%= Html.TextBox("name", value, new { attribute = attributeValue }) %>анонимный объект, преобразуется в словарь.

К сожалению, в C # нет поддержки дефисов в именах, поэтому единственной альтернативой является создание словаря. Синтаксис для которого очень подробный, видел ли кто-нибудь более приятную альтернативу или простой способ изменить функциональность расширений HTML ASP.NET MVC без необходимости переписывать все расширение?

Ответы:


202

Используйте подчеркивание в имени атрибута данных, и он волшебным образом обработает его за вас, преобразовав в дефис. Он знает, что вам нужен дефис, а не подчеркивание, так как подчеркивания недопустимы в именах атрибутов html.

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

2
Я нашел аналогичную проблему в нескольких SO-вопросах, и это лучший ответ.
user2780436 01

Не могли бы вы указать причину, по которой подчеркивания в вашем заявлении недействительны в атрибутах html . По крайней мере, html 4.01 гласит : значение атрибута может содержать только буквы (az и AZ), цифры (0-9), дефисы (десятичное ASCII 45), точки (десятичное ASCII 46), подчеркивания (десятичное ASCII 95) и двоеточия ( ASCII decimal 58) ,
surfmuggle

@threeFourOneSixOneThree ваша цитата относится к значению атрибута, но в этом вопросе мы имеем в виду имена атрибутов.
ED-209

@threeFourOneSixOneThree Я изменил конец своего ответа на «символы подчеркивания недействительны в именах атрибутов html»
ED-209,

19

Ответ, представленный на ActionLink htmlAttributes, предлагает использовать подчеркивания вместо дефисов. MVC.Net должен выдавать дефисы вместо подчеркивания при отправке страницы в браузер.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.