Necesito que los elementos de mi menú desplegable se muestren en orden alfabético. El siguiente es el código:
<select id="participantIds" data-placeholder="Select Participants" class="chosen-select" multiple style="width:100%;" tabindex="4" asp-for="UserIds" asp-items="@(new SelectList(ViewBag.Users, "Id", "Name"))"> He intentado hacerlo con `OrderBy pero parece que no funciona para `ViewBag`. ¿Cómo lo hago con JavaScript o Jquery? Mi ViewBag es de:
this.ViewBag.Users = await this._eventSessionService.GetAllUsers(eventSessionId);Dado que ViewBag es dinámico, no puede utilizar Orderby u otros métodos en una propiedad dinámica.
Ahora, suponiendo que su ViewBag.Users es de List<Users> , puede convertir la propiedad en una colección de tipo conocido y el método de extensión debería estar disponible.
<select id="participantIds" data-placeholder="Select Participants" class="chosen-select" multiple style="width:100%;" tabindex="4" asp-for="UserIds" asp-items="@(new SelectList((ViewBag.Users as List<Users>).OrderBy(x=>x.Name), "Id", "Name"))"> Una alternativa es ordenar la lista en el controlador antes de asignarla a ViewBag :
var userList = await this._eventSessionService.GetAllUsers(eventSessionId); this.ViewBag.Users = userList.OrderBy(x=>x.Name); También puede usar JQuery para ordenar nuestra lista después de que se haya inicializado:
var myList = $('#participantIds'); var selected = myList.val(); var opts_list = myList.find('option'); opts_list.sort(function(a, b) { return $(a).text() > $(b).text() ? 1 : -1; }); myList.html('').append(opts_list); myList.val(selected);