一尘不染

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

c#

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

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

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

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

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


阅读 215

收藏
2020-05-19

共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及更低版本

我将符文的答案扩展为扩展方法:

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

2020-05-19