如何将枚举转换为List <SelectListItem>?

leo*_*ora 63 c# asp.net-mvc enums selectlistitem

我有一个asp.net-mvc网页,我想显示一个基于枚举的下拉列表.我想显示每个枚举项的文本,id是与枚举关联的int值.有没有优雅的方式进行这种转换?

SLa*_*aks 120

您可以使用LINQ:

Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>().Select(v => new SelectListItem {
    Text = v.ToString(),
    Value = ((int)v).ToString()
}).ToList();
Run Code Online (Sandbox Code Playgroud)


Mak*_*Vi. 26

从MVC 5.1开始,如果需要在视图中填充选项,最优雅的方法是使用Html帮助器的EnumDropDownListFor方法select:

@Html.EnumDropDownListFor(m => m.MyEnumProperty,new { @class="form-control"})
Run Code Online (Sandbox Code Playgroud)

或控制器中的EnumHelper的GetSelectList方法:

var enumList = EnumHelper.GetSelectList(typeof (MyEnum));
Run Code Online (Sandbox Code Playgroud)


Rub*_*nov 7

我使用GetEnumSelectList了 Html Helper 类

<select asp-for="MyProperty" class="form-control" asp-items="@Html.GetEnumSelectList<MyEnum>()" ></select>
Run Code Online (Sandbox Code Playgroud)


oke*_*eld 5

我使用可以重用的静态方法来完成此操作。

public static IEnumerable<SelectListItem> EnumToSelectList<T>()
{
    return (Enum.GetValues(typeof(T)).Cast<T>().Select(
        e => new SelectListItem() { Text = e.ToString(), Value = e.ToString() })).ToList();
}
Run Code Online (Sandbox Code Playgroud)