Как добавить атрибут класса к элементу HTML, созданному помощниками HTML MVC?

188

ASP.NET MVC может генерировать элементы HTML, например @Html.ActionLink(), с помощью помощников HTML @Html.BeginForm()и т. Д.

Я знаю, что могу указать атрибуты формы, создав анонимный объект, и передать этот объект для параметра (в данном случае четвертого), htmlAttributesуказав idдля элемента:

Html.BeginForm("Foo", "Bar", FormMethod.Post, new { id = "MyForm"})

Но как насчет classатрибута? Очевидно, это не работает:

Html.BeginForm("Foo", "Bar", FormMethod.Post, new { class = "myclass"})

Поскольку это просто генерирует случайные синтаксические ошибки, когда запрашивается мое представление, потому что оно ожидает чего-то другого после встречи с ключевым словом C # class.

Я также попробовал:

new { _class = "myclass"}

и

new { class_ = "myclass"}

Но они также не работали, поскольку подчеркивания заменяются черточками .

Я знаю, что могу с таким же успехом написать элементы HTML вручную или обернуть форму внутри a <div class="myClass">, но мне все равно было бы интересно узнать, как это должно быть сделано.

Адриан Григоре
источник

Ответы:

348

Чтобы создать анонимный тип (или любой другой тип) со свойством, которое имеет зарезервированное ключевое слово в качестве имени в C #, вы можете добавить к имени свойства знак at @:

Html.BeginForm("Foo", "Bar", FormMethod.Post, new { @class = "myclass"})

Для VB.NET этот синтаксис будет выполнен с использованием точки, .которая на этом языке является синтаксисом по умолчанию для всех анонимных типов :

Html.BeginForm("Foo", "Bar", FormMethod.Post, new with { .class = "myclass" })
Сообщество
источник
Парсер не достаточно умен, IMO, если ему нужен этот совет, учитывая контекст, в котором он находится в тот момент кода.
toddmo
3

В настоящее время наилучшей практикой в ​​разработке CSS является создание более общих селекторов с модификаторами, которые можно применять как можно шире по всему веб-сайту. Я бы постарался избежать определения отдельных стилей для отдельных элементов страницы.

Если целью CSS-класса <form/>элемента является управление стилем элементов в форме, вы можете добавить атрибут класса к существующему <fieldset/>элементу, который по умолчанию инкапсулирует любую форму в веб-страницах, созданных ASP.NET MVC. Класс CSS в форме редко требуется.

Тим
источник
4
Вы, конечно, правы, однако этот случай отличается. Я искал способ указать метаданные для нескольких плагинов jquery. Обычно это делается путем неправильного использования атрибута класса.
Адриан Григоре
13
Вы можете предложить лучшие практики, но если у меня есть шаблон, который использует css в форме, я не собираюсь разбивать шаблон, чтобы сделать его «правильным». Реальность такова, что клиент не собирается платить больше, потому что вы сделали правильно css ...
Кристиан Пейн
1
@ChristianPayne Они могут быть вынуждены платить больше в будущем, потому что вы этого не сделали.
Ян Уорбертон,
1
Я отклонил этот ответ, потому что он не отвечает на вопрос. Более адекватный ответ сначала ответит на вопрос, а затем даст рекомендации по передовому опыту.
Бен