Как создать выпадающий список из enum'а в ASP.NET MVC?

695
09 января 2017, 19:53

Внимание! Это перевод вопроса How do you create a dropdownlist from an enum in ASP.NET MVC?

Я хочу создать выпадающий список Html.DropDownList на основе моего перечисления:

public enum ItemTypes
{
    Movie = 1,
    Game = 2,
    Book = 3
}

Как мне это реализовать?

Answer 1

В MVC v5.1 используйте Html.EnumDropDownListFor

@Html.EnumDropDownListFor(
    x => x.YourEnumField,
    "Select My Type", 
    new { @class = "form-control" })

Также в этой версии поддерживается атрибут Display: вы можете добавить к каждому значению перечисления атрибуты вида [Display(Name = "Sample")] и тот же самый код будет выводить в выпадающий список ваши сообщения.

Для MVC v5 используйте EnumHelper

@Html.DropDownList("MyType", 
   EnumHelper.GetSelectList(typeof(MyType)) , 
   "Select My Type", 
   new { @class = "form-control" })

Для MVC 5 и ниже

Используйте следующий extention:

namespace MyApp.Common
{
    public static class MyExtensions{
        public static SelectList ToSelectList<TEnum>(this TEnum enumObj)
            where TEnum : struct, IComparable, IFormattable, IConvertible
        {
            var values = from TEnum e in Enum.GetValues(typeof(TEnum))
                select new { Id = e, Name = e.ToString() };
            return new SelectList(values, "Id", "Name", enumObj);
        }
    }
}

Это позволит вам писать так:

ViewData["taskStatus"] = task.Status.ToSelectList();
READ ALSO
Работа с ComboBox в WF

Работа с ComboBox в WF

Доброе время сутокИмеется ComboBox с выпадающими элементами

382
выбор в Combobox c# согласно запросу

выбор в Combobox c# согласно запросу

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

374
Как узнать путь к проекту в Visual Studio?

Как узнать путь к проекту в Visual Studio?

Пишу программу которая копирует файлы в разные папкиПапка, из которой я копирую файлы должна создаться и лежать в папке проекта (скрин)

650
String^ из файла с переносом строк

String^ из файла с переносом строк

Если написать MessageBox::Show("Строка1\nСтрока2"); То на выходе получаем сообщение с двумя строками

376