반응형
열거 형을 목록으로 변환하는 방법?
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()
GetEnumSelectList
Html Helper 클래스에서 사용 했습니다.
<select asp-for="MyProperty" class="form-control" asp-items="@Html.GetEnumSelectList<MyEnum>()" ></select>
반응형
'developer tip' 카테고리의 다른 글
\ n 및 \ r \ n을 (0) | 2020.11.23 |
---|---|
OS 또는 장치 유형과 같은 시스템 정보를 감지하는 방법 (0) | 2020.11.23 |
Java에서 두 개의 PDF 파일을 하나로 병합하는 방법은 무엇입니까? (0) | 2020.11.23 |
프로그래밍은 수학의 하위 집합입니까? (0) | 2020.11.22 |
NSUserDefaults 사전 iOS에서 모든 키 삭제 (0) | 2020.11.22 |