MVC orderby在下拉列表中

use*_*541 3 c# linq asp.net-mvc

我有一个在表格中设置的下拉列表.我最初让表的唯一ID成为项目列表顺序的控件.但是,工作要求更改此订单.我可以重新排列表格,但仍然使用唯一的标识符订购,但我相信这个订单会定期更改,直到他们满意为止.所以我添加了一个名为zoneOrder的字段.我遇到的麻烦是如何使用下面的代码订购

ViewBag.zoneId = new SelectList(db.tblZoneLists, "zoneId", "zoneDesc");
Run Code Online (Sandbox Code Playgroud)

我试过了

ViewBag.zoneId = new SelectList(db.tblZoneLists, "zoneId", "zoneDesc").OrderByDescending(e=>e.zoneOrder)
Run Code Online (Sandbox Code Playgroud)

但这不起作用,实际上当我输入e => e时.intellisense只给我选项如'value','text'

And*_*i V 6

你需要重新排序:

ViewBag.zoneId = new SelectList(db.tblZoneLists
                                  .OrderByDescending(e=>e.zoneOrder), 
                 "zoneId", "zoneDesc")
Run Code Online (Sandbox Code Playgroud)

SelectList对象是SelectListItems 的列表.每个SelectListItem有3个属性:Text,ValueSelected.当你打电话OrderByDescendingSelectList,你实际上是在尝试订购一个SelectListItems 列表.这就是Intellisense建议Value财产的原因.

由于您正在尝试订购DropDownList,因此您应首先订购数据源,即tblZoneLists.这就是你为数据排序然后将其传递给SelectList构造函数的原因.