小编典典

如何从 ASP.NET MVC 中的枚举创建下拉列表?

all

我正在尝试使用Html.DropDownList扩展方法,但无法弄清楚如何将它与枚举一起使用。

假设我有一个这样的枚举:

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

如何使用Html.DropDownList扩展方法创建包含这些值的下拉列表?

还是我最好的选择是简单地创建一个 for 循环并手动创建 Html 元素?


阅读 86

收藏
2022-03-03

共1个答案

小编典典

对于 MVC v5.1 使用 Html.EnumDropDownListFor

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

对于 MVC v5,使用 EnumHelper

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

对于 MVC 5 及更低版本

我将 Rune 的答案转换为扩展方法:

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

经过using MyApp.Common

2022-03-03