ASP.NET MVC: добавление пользовательских атрибутов в тег опции в списке выбора
Я использую ASP.NET MVC и пытаюсь отобразить список выбора с помощью метода HtmlHelper.DropDownListFor, например:
<%= Html.DropDownListFor(x => x.AllTopics, SelectListHelper.GetSelectListItems(Model.AllTopics), "Select a Topic", new { id = "allTopics", @class = "topic-dropdown" })%>
где SelectListHelper просто возвращает IList<SelectListItem>
из любой коллекции, которую мы передаем. Это отлично работает для простых вещей, но я хочу иметь возможность добавлять атрибут title для каждого тега не список выбрать). Но DropDownListFor принимает только IEnumerable<SelectListItem>
, а в элементе SelectListItem нет ни одного места, в которое я могу поместить атрибут title.
Есть ли способ сделать это, не упомянув метод DropDownListFor и выписав список выбора и каждый элемент вручную?
Ответы
Ответ 1
DropDownList и производные не поддерживают функциональность, которую вы ищете. Но вы также можете просто обработать строку, возвращаемую DropDownList.
<%=
Html.DropDownListFor(x => x.AllTopics,
SelectListHelper.GetSelectListItems(Model.AllTopics),
"Select a Topic",
new { id = "allTopics", @class = "topic-dropdown" })
.Replace("<option", "<option attr=\"value\"")
%>
Ответ 2
Глядя на исходный код MVC, DropDownListFor
использует DropDownList
, который использует SelectInternal
, который использует ListItemToOption
, который обертывает вызовы TagBuilder. Вы можете изменить и включить этот источник, чтобы принимать дополнительные вызовы в TagBuilder, когда создан фактический тег.