selectlistitem net mvc ejemplos dropdownlist drop down asp asp.net asp.net-mvc drop-down-menu

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.