developer tip

열거 형을 목록으로 변환하는 방법

optionbox 2020. 11. 23. 08:01
반응형

열거 형을 목록으로 변환하는 방법?


asp.net-mvc 웹 페이지가 있고 열거 형을 기반으로하는 드롭 다운 목록을 표시하고 싶습니다. 각 enum 항목의 텍스트와 enum이 연결된 int 값인 id를 표시하고 싶습니다. 이 변환을 수행하는 우아한 방법이 있습니까?


LINQ를 사용할 수 있습니다.

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

MVC 5.1부터 가장 우아한 방법은 뷰에서 옵션 을 채워야하는 경우 Html 도우미의 EnumDropDownListFor 메서드 를 사용하는 것입니다 select.

@Html.EnumDropDownListFor(m => m.MyEnumProperty,new { @class="form-control"})

또는 컨트롤러에서 EnumHelper의 GetSelectList 메서드 :

var enumList = EnumHelper.GetSelectList(typeof (MyEnum));

재사용 할 수있는 정적 방법을 사용하여이 작업을 수행했습니다.

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

Enum.GetNames()열거 형 항목의 이름이 포함 된 문자열 배열을 가져 오는 데 사용할 수 있습니다 . 항목 이름이 사용자에게 친숙하다면 이것으로 충분할 것입니다. 그렇지 않으면 GetName()각 항목에 대해 멋진 이름을 반환하는 고유 한 메서드를 만들 수 있습니다 .

또는-열거 형이 변경되지 않거나 거의 변경되지 않는 경우 하드 코딩 된 항목을 드롭 다운에 직접 추가하는 메서드를 만들 수 있습니다. 이것은 아마도 더 효율적일 것입니다 (중요한 경우).


이제 사용 Tuple<string, string>했지만 이것을 사용하여 변환 할 수 있습니다.

var values = Enum.GetValues(typeof(DayOfWeek))
    .Cast<DayOfWeek>()
    .Select(d => Tuple.Create(((int)d).ToString(), d.ToString()))
    .ToList()

GetEnumSelectListHtml Helper 클래스에서 사용 했습니다.

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

참고 URL : https://stackoverflow.com/questions/3489453/how-can-i-convert-an-enumeration-into-a-listselectlistitem

반응형