심재운 블로그

728x90
반응형

 

 

EnumDisplayName 는 dropdownlist 에서 이름을 표기할 것이며, 값은 0, 1,2,3~ 형식으로 처리한다.

 

 

public enum eUserRole : int
{
   [EnumDisplayName(DisplayName="Super Admin")]
   SuperAdmin = 0,

   [EnumDisplayName(DisplayName = "Phoenix Admin")]
   PhoenixAdmin = 1,
   [EnumDisplayName(DisplayName = "Office Admin")]
   OfficeAdmin = 2,
   [EnumDisplayName(DisplayName = "Report User")]
   ReportUser = 3,
   [EnumDisplayName(DisplayName = "Billing User")]
   BillingUser = 4
}

 

어트리뷰트의 DisplayName 속성을 추가하자.

 

public class EnumDisplayNameAttribute : Attribute
{
   private string _displayName;
   public string DisplayName
   {
      get { return _displayName; }
      set { _displayName = value; }
   }
}

 

 

 

이제 이를 활용하는 확장메소드만 남았다.

 

public static class ExtensionMethods
{
    public static System.Web.Mvc.SelectList ToSelectList<TEnum>(this TEnum obj)
        where TEnum : struct, IComparable, IFormattable, IConvertible // correct one
    {

    return new SelectList(Enum.GetValues(typeof(TEnum)).OfType<Enum>()
        .Select(x =>
            new SelectListItem
            {
                Text = x.DisplayName(),
                Value = (Convert.ToInt32(x)).ToString()
            }), "Value", "Text");
    }

   public static string DisplayName(this Enum value)
   {
       FieldInfo field = value.GetType().GetField(value.ToString());

       EnumDisplayNameAttribute attribute
               = Attribute.GetCustomAttribute(field, typeof(EnumDisplayNameAttribute))
                   as EnumDisplayNameAttribute;

       return attribute == null ? value.ToString() : attribute.DisplayName;
 

  }
}

 

 

cshtml 에서 이를 활용하자.~

 

@Html.DropDownList("EnumDropDownWithSelected",  eUserRole.SuperAdmin.ToSelectList((int)eUserRole.OfficeAdmin))

 

 

 

 

 

 

728x90
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band

본문과 관련 있는 내용으로 댓글을 남겨주시면 감사하겠습니다.

비밀글모드

  1. http://www.codeproject.com/Articles/1056011/Bind-Enum-to-DropdownList-in-ASP-NET-MVC
    2015.11.19 14:36 신고
  2. 잼스
    좋으신 강좌 잘보고있습니다~
    많은 도움을 주셔서감사합니다.

    궁금한사항이 있어 질문을 남깁니다.
    ToSelectList 확장 메서드에는 값을 받지 않는데
    cshtml 에서는 값을 받어라구요
    컴파일 에러나지 않나요~
    2015.12.24 09:07
loading