Добавить css-классы в элементы razor

в бритве, если бы у меня было что-то вроде:

@Html.EditorFor(model => model.name) или еще: @Html.CheckBoxFor(m => m.RememberMe)

Как добавить к ним класс css или идентификатор? Я читал о помощниках, но должен ли я сделать помощника для каждого отдельного элемента? нет ли простого способа добавить класс или идентификатор в элементы формы razor?

3 ответов


вы не можете сделать это с помощью тега EditorFor помощник просто потому, что вы не знаете, какой шаблон будет использоваться. Вы можете достичь этого, но вам нужно будет написать пользовательский шаблон редактора. Например, это может быть достигнуто путем переопределения default editor template и с учетом второго параметра, который представляет дополнительные данные представления.

вот пример того, как такой пользовательский шаблон редактора может искать строковые типы (~/Views/Shared/EditorTemplates/string.cshtml):

@Html.TextBox(
    "", 
    ViewData.TemplateInfo.FormattedModelValue,
    ViewData
)

и тогда вы могли бы использовать его так:

@Html.EditorFor(model => model.name, new { @class = "myclass" })

С помощью помощника CheckBoxFor вы можете сделать это:

@Html.CheckBoxFor(m => m.RememberMe, new { @class = "myclass" })

Это легко для CheckboxFor, вы можете сделать это так:

@Html.CheckBoxFor(m => m.RememberMe, new { @class="your_class", @id="the_id" })

Это немного сложнее с EditorFor, поскольку он не поддерживается из коробки. Я имею в виду, что вы можете создать шаблон для каждого типа, а затем сделать TextBoxFor для добавления атрибутов html (тот же синтаксис, что и с CheckBoxFor). Возможно, вам придется сделать это для каждого типа вы хотите.


, потому что EditorFor не зависит от типа, вы не можете использовать его на них.

на CheckBoxFor, вы можете использовать:

@Html.CheckBoxFor(m => m.RememberMe, new { @class = "myClass", id = "myID" })

Примечание @ до class потому что это зарезервированное ключевое слово в C#