Как отсортировать выпадающий список 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. Однако я хочу отсортировать это, прежде чем связать это. Как я мог это сделать?

8.11.2009 23:12:18
Будет ли это полезно для вас, это из другого аналогичного вопроса: stackoverflow.com/questions/188141/…
Anthony Forloney 8.11.2009 23:20:58
No SelectListItem не реализует компаратор таким же образом. Это не нравится, когда я пытаюсь сортировать это так.
chobo2 8.11.2009 23:55:03
8 ОТВЕТОВ
РЕШЕНИЕ

Ну вот:

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);
11
9.11.2009 00:09:34
И это самое быстрое решение :)
LukLed 8.11.2009 23:31:44
Я полагал, что кто-то ответит этим. Я знаю, что могу сделать это вручную, но я мог бы добавить много в будущем и подумать, есть ли простой способ сортировки, это сэкономит мне время.
chobo2 8.11.2009 23:54:10

Если вы можете использовать LINQ, то:

list.OrderBy(x => x.Value)

или

list.OrderByDescending(x =>x.Value)

должен сделать это.

редактировать

Это следует читать;

list = list.OrderBy(x => x.Value);
16
15.07.2016 18:46:33
Ты имеешь в виду и будь эффективным и все ... Пшхттт. :)
Josh 8.11.2009 23:21:54
Да, моя ошибка извините
griegs 8.11.2009 23:23:30
Я пробовал это, но это никогда не сортируется для меня. Я сортировал "текст", хотя. Я попробую "значение"
chobo2 8.11.2009 23:51:45
Не кажется, что он хочет сортировать с помощью orderby.
chobo2 8.11.2009 23:55:34
Вы вставили код, как у меня, или вы сделали list = list.orderby ...?
griegs 9.11.2009 00:19:48
var sorted = (from li in list
             orderby li.Text
             select li).ToList();

Вуаля !!

2
8.11.2009 23:20:51

Вы также можете отсортировать его на стороне клиента с помощью 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
8.11.2009 23:27:41

list.sort

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

{new SelectListItem () {Text = "bob", Value = "bob"},
новый SelectListItem () {Text = "apple", Value = "apple"},
новый SelectListItem () {Text = "grapes", Value = "виноград"},};

list.sort;

-1
8.11.2009 23:31:18
List.sort () не работает. Это приходит с ошибкой, что он не может отсортировать его.
chobo2 8.11.2009 23:53:18

------- Процедура хранения ----- (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 Helper Class ----

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;
        }
    }
-2
15.01.2014 08:12:29

Разве идея MVC не разделить функцию и дисплей? Что если вы хотите повторно использовать один и тот же список с разными порядками?

Я бы подумал, что это будет лучше, поскольку он сортирует только для указанного элемента управления.

Добавьте свойство к модели, которую вы используете для представления:

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" })
0
18.11.2015 09:51:18
@ Html.DropDownListFor (x => x.ID, новый SelectList (Model.Fruit.OrderBy (y => y.Text), «Значение», «Текст»), «- Выбрать один -», новый {@ class = "form-control"}) это было сделано, спасибо
Krish 13.01.2016 07:29:52

Очень простой способ справиться с этим в контроллере:

ViewBag.change_week = new SelectList(db.weeks.OrderBy(x=> x.week_guid), "week_guid", "week_number");
0
22.01.2018 13:03:43