2009-11-08 67 views
4

我有这样的代码如何对ASp.net MVC下拉列表进行排序?

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

这将被用于与asp.net的MVC HTML辅助结合。不过,我想在绑定它之前对它进行排序。我怎么能这样做?

+0

这是否对您有所帮助,它从另一个类似的问题:http://stackoverflow.com/questions/188141/c-list-orderby-alphabetical-order – 2009-11-08 23:20:58

+0

没有SelectListItem没有实现比较器相同的方式。当我尝试像这样分类时,它不喜欢这个。 – chobo2 2009-11-08 23:55:03

回答

9

在这里你去:

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

排序:)

抱歉,无法克制自己:)

编辑

它看起来好像你需要:

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

,然后在视图

Html.DropDownList("Fruit",fruitsSelectList); 
+4

现在很有趣! – griegs 2009-11-08 23:28:23

+2

这是最快的解决方案:) – LukLed 2009-11-08 23:31:44

+0

我想有人会回应这个。我知道我可以用手工做,但我可能会在未来增加很多,并计算是否有简单的方法来排序它会节省我的时间。 – chobo2 2009-11-08 23:54:10

14

如果你可以使用LINQ然后:

list.OrderBy(x => x.Value) 

list.OrderByDescending(x =>x.Value) 

应该这样做。

编辑

这应该阅读;

list = list.OrderBy(x => x.Value); 
+0

你的意思是,高效率,全部...... Pshhttt。 :) – Josh 2009-11-08 23:21:54

+0

是的,我的错误。对不起 – griegs 2009-11-08 23:23:30

+0

我尝试过,但它从来没有为我排序。尽管我按“文本”排序。我会尝试“价值” – chobo2 2009-11-08 23:51:45

2
var sorted = (from li in list 
      orderby li.Text 
      select li).ToList(); 

瞧!

0

你也可以在客户端使用JavaScript对其进行排序(jQuery的)

顺便说一句,如果你知道列表的元素你来就可以对它们进行排序:

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

list.Sort

List<SelectListItem> list = new List<SelectListItem>() 

{新SelectListI (){text =“bob”,Value =“bob”},
new SelectListItem(){Text =“apple”,Value =“apple”},
new SelectListItem(){Text =“grapes”,值=“葡萄”},};

list.sort;

+0

List.sort()不起作用。它带有一个错误,它无法对其进行排序。 – chobo2 2009-11-08 23:53:18

-2

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

USE [Your Database] 
GO 

CRATE PROC [dbo].[GetAllDataByID] 
@ID int 


AS 
BEGIN 
     SELECT * FROM Your_Table 
     WHERE [email protected] 
     ORDER BY Your_ColumnName 
END 

---------- ---------的Default.aspx

<asp:DropDownList ID="ddlYourTable" runat="server"></asp:DropDownList> 

--------- Default.aspx。CS -------

protected void Page_Load(object sender, EventArgs e) 
     { 
      if (!IsPostBack) 
      { 
       List<YourTable> table= new List<YourTable>(); 
       YourtableRepository tableRepo = new YourtableRepository(); 



       int conuntryInfoID=1; 
       table= tableRepo.GetAllDataByID(ID); 

       ddlYourTable.DataSource = stateInfo; 
       ddlYourTable.DataTextField = "Your_ColumnName"; 
       ddlYourTable.DataValueField = "ID"; 
       ddlYourTable.DataBind(); 



      } 
     } 

------- LINQ助手类----

public class TableRepository 
    { 
     string connstr; 

     public TableRepository() 
     { 
      connstr = Settings.Default.YourTableConnectionString.ToString(); 
     } 

     public List<YourTable> GetAllDataByID(int ID) 
     { 
      List<YourTable> table= new List<YourTable>(); 
      using (YourTableDBDataContext dc = new YourTableDBDataContext()) 
      { 
       table= dc.GetAllDataByID(CID).ToList(); 
      } 
      return table; 
     } 
    } 
0

是不是MVC的想法分离功能和显示?如果你想重复使用不同顺序的同一个列表呢?

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

添加属性您正在使用的视图模型:

public SelectList Fruit { get; set; } 

填充在构造函数列表(我使用实体框架):

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" }) 
+0

@ Html.DropDownListFor(x => x.ID,new SelectList(Model.Fruit.OrderBy(y => y.Text),“Value”,“Text”),“ - Select One - ”,new { @class =“form-control”})这是做的伎俩,谢谢 – Krish 2016-01-13 07:29:52

0

一个非常简单的方法来处理它的控制器:

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