Я, вероятно, не стал бы связывать данные, поскольку это перечисление, и оно не изменится после времени компиляции (если только у меня не будет одного из этих сутулых моментов).
Лучше просто перебрать перечисление:
Dim itemValues As Array = System.Enum.GetValues(GetType(Response))
Dim itemNames As Array = System.Enum.GetNames(GetType(Response))
For i As Integer = 0 To itemNames.Length - 1
Dim item As New ListItem(itemNames(i), itemValues(i))
dropdownlist.Items.Add(item)
Next
Или то же самое в C #
Array itemValues = System.Enum.GetValues(typeof(Response));
Array itemNames = System.Enum.GetNames(typeof(Response));
for (int i = 0; i <= itemNames.Length - 1 ; i++) {
ListItem item = new ListItem(itemNames[i], itemValues[i]);
dropdownlist.Items.Add(item);
}
Используйте следующий служебный класс,
Enumeration
чтобы получитьIDictionary<int,string>
(пара значений и имен перечисления ) из перечисления ; затем вы привязываете IDictionary к привязываемому элементу управления.Пример: использование служебного класса для привязки данных перечисления к элементу управления
источник
Я использую это для ASP.NET MVC :
источник
Моя версия - это просто сжатая форма приведенного выше:
источник
Каждый тип Enum является производным от System.Enum. Есть два статических метода, которые помогают привязать данные к элементу управления раскрывающимся списком (и получить значение). Это Enum.GetNames и Enum.Parse. Используя GetNames, вы можете выполнить привязку к элементу управления раскрывающимся списком следующим образом:
Теперь, если вы хотите, чтобы значение Enum снова при выделении ....
источник
После прочтения всех сообщений я придумал комплексное решение для поддержки отображения описания перечисления в раскрывающемся списке, а также выбора правильного значения из модели в раскрывающемся списке при отображении в режиме редактирования:
перечисление:
класс расширения enum:
Класс модели:
и просмотр:
и если вы используете это раскрывающееся меню без привязки к модели, вы можете использовать это вместо этого:
Таким образом, вы можете ожидать, что в раскрывающемся списке будет отображаться описание вместо значений перечисления. Также, когда дело доходит до редактирования, ваша модель будет обновлена выбранным значением в раскрывающемся списке после публикации страницы.
источник
Как уже говорили другие, не привязывайте данные к перечислению, если вам не нужно привязываться к разным перечислениям в зависимости от ситуации. Есть несколько способов сделать это, пара примеров ниже.
ObjectDataSource
Декларативный способ сделать это с помощью ObjectDataSource. Сначала создайте класс BusinessObject, который будет возвращать список для привязки DropDownList к:
Затем добавьте HTML-разметку на страницу ASPX, чтобы указать на этот класс BO:
Этот вариант не требует кода.
Код позади DataBind
Чтобы минимизировать HTML на странице ASPX и выполнить привязку в коде позади:
В любом случае, уловка состоит в том, чтобы позволить методам типа Enum GetValues, GetNames и т. Д. Работать за вас.
источник
Я не уверен, как это сделать в ASP.NET, но посмотрите этот пост ... это может помочь?
источник
Вы можете использовать linq:
источник
источник
источник
Общий код, использующий ответ шесть.
источник
Найдя этот ответ, я придумал, что я считаю лучшим (по крайней мере, более элегантным) способом сделать это, подумал, что вернусь и поделюсь им здесь.
Page_Load:
LoadValues:
SaveValues:
источник
Это, наверное, старый вопрос ... но я так и сделал свой.
Модель:
Затем в представлении: вот как использовать раскрывающийся список.
Это должно заполнить все в вашем списке перечислений. Надеюсь это поможет..
источник
[Display(Name = "Option number one")] Option1,
Это не совсем то, что вы ищете, но может помочь:
http://blog.jeffhandley.com/archive/2008/01/27/enum-list-dropdown-control.aspx
источник
Почему бы не использовать это, чтобы передать каждый listControle:
А пользоваться так же просто, как:источник
С тех пор ASP.NET был обновлен с некоторыми дополнительными функциями, и теперь вы можете использовать встроенное перечисление для раскрывающегося списка.
Если вы хотите привязать к самому Enum, используйте это:
Если вы привязываетесь к экземпляру Response, используйте это:
источник
Это мое решение для заказа Enum и DataBind (текст и значение) в раскрывающемся списке с помощью LINQ
источник
Ознакомьтесь с моим сообщением о создании специального помощника «ASP.NET MVC - Создание помощника DropDownList для перечислений»: http://blogs.msdn.com/b/stuartleeks/archive/2010/05/21/asp-net-mvc -Создание-а-DropDownList-хелперов-для-enums.aspx
источник
Если вы хотите иметь более понятное описание в поле со списком (или другом элементе управления), вы можете использовать атрибут Description со следующей функцией:
Вот пример перечисления с примененными атрибутами Description:
Затем привяжите к контролю вот так ...
Таким образом, вы можете поместить любой текст в раскрывающийся список без необходимости выглядеть как имя переменной.
источник
Вы также можете использовать методы расширения. Для тех, кто не знаком с расширениями, я предлагаю проверить документацию VB и C # .
Расширение VB:
Чтобы использовать расширение:
Расширение C #:
Чтобы использовать расширение:
Если вы хотите установить выбранный элемент одновременно, замените
с участием
Преобразование в System.Enum позволяет избежать проблем с размером int и выводом. Например, 0xFFFF0000 будет 4294901760 как uint, но будет -65536 как int.
TryCast и как System.Enum немного быстрее, чем Convert.ChangeType (enumTypeValues [i], enumUnderType) .ToString () (12:13 в моих тестах скорости).
источник
Учебник по asp.net и winforms с combobox и dropdownlist: как использовать Enum с Combobox в C # WinForms и Asp.Net
надежда помогает
источник
Принятое решение не работает, но приведенный ниже код поможет другим, ищущим кратчайшее решение.
источник
Вы можете сделать это намного короче
источник