Reputation: 271
I'm using ASP.NET MVC, and am trying to render a select list with the HtmlHelper.DropDownListFor method, like so:
<%= Html.DropDownListFor(x => x.AllTopics, SelectListHelper.GetSelectListItems(Model.AllTopics), "Select a Topic", new { id = "allTopics", @class = "topic-dropdown" })%>
where SelectListHelper just returns an IList<SelectListItem>
from whatever collection we're passing in. This works fine for simple things, but I want to be able to add a title attribute to each option tag (not the select list itself). But the DropDownListFor only takes in an IEnumerable<SelectListItem>
, and the SelectListItem does not have anyplace that I can put in the title attribute.
Is there any way to do this without foregoing the DropDownListFor method and writing out the select list and each element by hand?
Upvotes: 25
Views: 12938
Reputation: 7426
DropDownList and derivatives don't support the functionality you're looking for. But you could also simply process the string returned by DropDownList.
<%=
Html.DropDownListFor(x => x.AllTopics,
SelectListHelper.GetSelectListItems(Model.AllTopics),
"Select a Topic",
new { id = "allTopics", @class = "topic-dropdown" })
.Replace("<option", "<option attr=\"value\"")
%>
Upvotes: 4
Reputation: 7426
Looking at the MVC source code, DropDownListFor
uses DropDownList
, which uses SelectInternal
, which uses ListItemToOption
, which wraps calls to TagBuilder. You could modify and include this source to accept extra calls to TagBuilder when the actual option tag is built.
Upvotes: 2