Подтвердить что ты не робот

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 и выписав список выбора и каждый элемент вручную?

4b9b3361

Ответ 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, когда создан фактический тег.