问题

我试图使用 Html.DropDownList 扩展方法,但无法弄清楚如何使用它与枚举.

假设我有这样的枚举:

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

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

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



解决方法

For MVC v5.1 use Html.EnumDropDownListFor

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

For MVC v5 use EnumHelper

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

For MVC 5 and lower

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

通过使用MyApp.Common




相关问题推荐