【问题标题】:How to sort an ASP.NET MVC dropdownlist?如何对 ASP.NET MVC 下拉列表进行排序?
【发布时间】:2010-12-14 11:19:24
【问题描述】:

我有这个代码

    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 帮助程序的绑定。但是我想在绑定之前对其进行排序。我怎么能这样做?

【问题讨论】:

  • 这对你有帮助吗,它来自另一个类似的问题:stackoverflow.com/questions/188141/…
  • No SelectListItem 没有以相同的方式实现比较器。当我尝试这样排序时,它不喜欢这样。

标签: c# asp.net-mvc


【解决方案1】:

如果你可以使用 LINQ,那么:

list.OrderBy(x => x.Value)

list.OrderByDescending(x =>x.Value)

应该这样做。

编辑

应该这样写;

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

【讨论】:

  • 你的意思是要高效,一切...... Pshhttt。 :)
  • 我试过这个,但它从来没有为我排序。我虽然按“文本”排序。我会尝试“价值”
  • Naw 它似乎不想用 orderby 排序。
  • 你是按我的方式插入代码还是你做了 list = list.orderby...?
  • 为我工作,按文本排序。不过,请务必使用 list = list.OrderBy(...),因为 list.OrderBy(...) 本身什么也不做。
【解决方案2】:

给你:

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

【讨论】:

  • 这是最快的解决方案:)
  • 我认为有人会对此做出回应。我知道我可以手工完成,但我可能会在未来添加很多内容,并认为如果有一种简单的排序方法可以节省我的时间。
【解决方案3】:
var sorted = (from li in list
             orderby li.Text
             select li).ToList();

瞧!!

【讨论】:

    【解决方案4】:

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

    【讨论】:

    • @Html.DropDownListFor(x => x.ID, new SelectList(Model.Fruit.OrderBy(y => y.Text), "Value", "Text"), "-- 选择一个 --", new { @class= "form-control" }) 这成功了,谢谢
    【解决方案5】:

    您也可以在客户端使用 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"}
     };
    

    【讨论】:

      【解决方案6】:

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

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

      【讨论】:

        【解决方案7】:

        列表.排序

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

        { new SelectListItem() { Text = "bob", Value = "bob"},
        新的 SelectListItem() { Text = "apple", Value = "apple"},
        新的 SelectListItem() { Text = "grapes", Value = "grapes"}, };

        list.sort;

        【讨论】:

        • List.sort() 不起作用。它带有一个无法对其进行排序的错误。
        【解决方案8】:

        -------存储过程-----(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---------

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

        【讨论】:

          猜你喜欢
          • 2023-03-21
          • 1970-01-01
          • 2017-05-02
          • 2011-07-11
          • 2015-11-20
          • 1970-01-01
          • 2016-10-05
          • 2010-10-14
          • 1970-01-01
          相关资源
          最近更新 更多