asp.net - net - mvc combobox c#
ASP.NET MVC: poner atributos personalizados en la etiqueta de opción en la lista de selección (2)
Estoy usando ASP.NET MVC, y estoy tratando de representar una lista de selección con el método HtmlHelper.DropDownListFor, así:
<%= Html.DropDownListFor(x => x.AllTopics, SelectListHelper.GetSelectListItems(Model.AllTopics), "Select a Topic", new { id = "allTopics", @class = "topic-dropdown" })%>
donde SelectListHelper simplemente devuelve un IList<SelectListItem>
de la colección que estamos transmitiendo. Esto funciona bien para cosas simples, pero quiero poder agregar un atributo de título a cada etiqueta de opción ( no a la lista de selección en sí). Pero el DropDownListFor solo toma un IEnumerable<SelectListItem>
, y el SelectListItem no tiene ningún lugar donde pueda poner el atributo del título.
¿Hay alguna forma de hacer esto sin renunciar al método DropDownListFor y escribir la lista de selección y cada elemento a mano?
DropDownList y sus derivados no admiten la funcionalidad que está buscando. Pero también puede simplemente procesar la cadena devuelta por DropDownList.
<%=
Html.DropDownListFor(x => x.AllTopics,
SelectListHelper.GetSelectListItems(Model.AllTopics),
"Select a Topic",
new { id = "allTopics", @class = "topic-dropdown" })
.Replace("<option", "<option attr=/"value/"")
%>
En cuanto al código fuente de MVC, DropDownListFor
usa DropDownList
, que usa SelectInternal
, que usa ListItemToOption
, que envuelve las llamadas a TagBuilder. Puede modificar e incluir esta fuente para aceptar llamadas adicionales a TagBuilder cuando se cree la etiqueta de opción real.