如何对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; } }