ASP.NET MVC: размещение пользовательских атрибутов в теге option в списке выбора - PullRequest
25 голосов
/ 02 декабря 2009

Я использую 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> из любой коллекции, которую мы передаем. Это хорошо работает для простых вещей, но я хочу иметь возможность добавить атрибут заголовка к каждому тегу option ( не сам список ). Но DropDownListFor принимает только IEnumerable<SelectListItem>, а у SelectListItem нет места, которое я могу добавить в атрибут title.

Есть ли способ сделать это, не отказываясь от метода DropDownListFor и записывая список выбора и каждый элемент вручную?

Ответы [ 2 ]

4 голосов
/ 02 декабря 2009

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 голосов
/ 02 декабря 2009

Глядя на исходный код MVC, DropDownListFor использует DropDownList, который использует SelectInternal, который использует ListItemToOption, который оборачивает вызовы TagBuilder. Вы можете изменить и включить этот источник, чтобы принимать дополнительные вызовы TagBuilder при создании фактического тега параметра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...