如何对ASp.net MVC下拉列表进行排序?

我有这个代码

List list = new List() { new SelectListItem() { Text = "bob", Value = "bob"}, new SelectListItem() { Text = "apple", Value = "apple"}, new SelectListItem() { Text = "grapes", Value = "grapes"}, }; 

这将用于与asp.net mvc html帮助器绑定。 但是我想在绑定它之前对它进行排序。 我怎么能这样做?

干得好:

 List list = new List() { new SelectListItem() { Text = "apple", Value = "apple"}, new SelectListItem() { Text = "bob", Value = "bob"}, new SelectListItem() { Text = "grapes", Value = "grapes"}, }; 

排序:)

对不起,无法阻止自己:)

编辑

看起来好像你需要:

 var fruits = new List {"apple", "bob", "grapes"}; fruits.Sort(); var fruitsSelectList = new SelectList(fruits); 

然后在视野中

 Html.DropDownList("Fruit",fruitsSelectList); 

如果你可以使用LINQ那么:

 list.OrderBy(x => x.Value) 

要么

 list.OrderByDescending(x =>x.Value) 

应该这样做。

编辑

应该读;

 list = list.OrderBy(x => x.Value); 
 var sorted = (from li in list orderby li.Text select li).ToList(); 

瞧!

你也可以使用javascript(jquery)在客户端对它进行排序

顺便说一句,如果您知道列表中的元素,请自行排序:

 List list = new List { new SelectListItem { Text = "apple", Value = "apple"}, new SelectListItem { Text = "bob", Value = "bob"}, new SelectListItem { Text = "grapes", Value = "grapes"} }; 

MVC的想法不是将function和显示分开吗? 如果您想重复使用不同排序的相同列表,该怎么办?

我认为这将是最好的,因为它只对指定的控件进行排序。

将属性添加到您用于视图的模型:

 public SelectList Fruit { get; set; } 

在构造函数中填充该列表(我正在使用entity framework):

 model.Fruit= new SelectList(db.tblFruit.Select(f => new { Id = f.ID, Name = f.Name }), "ID", "Name", "[Select Fruit]"); 

然后添加您的选择列表:

 @Html.DropDownListFor(x => x.ID, new SelectList(Model.Fruit.OrderBy(y => y.Text), "Value", "Text"), "-- Select One --", new { @class = "form-control" }) 

在Controller中处理它的一种非常简单的方法:

 ViewBag.change_week = new SelectList(db.weeks.OrderBy(x=> x.week_guid), "week_guid", "week_number"); 

list.Sort

 List list = new List() 

{new SelectListItem(){Text =“bob”,Value =“bob”},
new SelectListItem(){Text =“apple”,Value =“apple”},
new SelectListItem(){Text =“grapes”,Value =“grapes”},};

list.sort;

——-存储过程—–(SQL)

 USE [Your Database] GO CRATE PROC [dbo].[GetAllDataByID] @ID int AS BEGIN SELECT * FROM Your_Table WHERE ID=@ID ORDER BY Your_ColumnName END 

———- ———的Default.aspx

   

——— ——- Default.aspx.cs

 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { List table= new List(); YourtableRepository tableRepo = new YourtableRepository(); int conuntryInfoID=1; table= tableRepo.GetAllDataByID(ID); ddlYourTable.DataSource = stateInfo; ddlYourTable.DataTextField = "Your_ColumnName"; ddlYourTable.DataValueField = "ID"; ddlYourTable.DataBind(); } } 

——- LINQ助手class—-

 public class TableRepository { string connstr; public TableRepository() { connstr = Settings.Default.YourTableConnectionString.ToString(); } public List GetAllDataByID(int ID) { List table= new List(); using (YourTableDBDataContext dc = new YourTableDBDataContext ()) { table= dc.GetAllDataByID(CID).ToList(); } return table; } }