如何让我的下拉列表按我在 MVC 中的项目的字母顺序排列?

How do I get my dropdownlist to be in alphabetical order for my project in MVC?

我需要让下拉列表中的元素按字母顺序显示。以下是代码:

<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"))">
我试过用 `OrderBy 来做,但它似乎对 `ViewBag` 不起作用?如何使用 JavaScript 或 Jquery 来实现?

我的 ViewBag 属于:

this.ViewBag.Users = await this._eventSessionService.GetAllUsers(eventSessionId);

由于 ViewBag 是动态的,因此您不能在动态 属性

上使用 Orderby 或其他方法

现在假设您的 ViewBag.Users 属于 List<Users>,您可以将 属性 转换为已知类型集合,然后扩展方法应该可用。

<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"))">

另一种方法是在控制器中对列表进行排序,然后再将其分配给 ViewBag:

var userList = await this._eventSessionService.GetAllUsers(eventSessionId);
this.ViewBag.Users = userList.OrderBy(x=>x.Name);

您还可以在初始化后使用 JQuery 对我们的列表进行排序:

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);