Asp.net-Mvc

MVC.net 在視圖中獲取枚舉顯示名稱,而無需在視圖中引用枚舉類型

  • February 17, 2012

我在一個類中有以下輔助方法ViewModelBase,它由其他視圖模型繼承:

public string GetEnumName<T>(Enum value)
       {
           Type enumType = typeof(T);
           var enumValue = Enum.GetName(enumType, value);
           MemberInfo member = enumType.GetMember(enumValue)[0];

           var attrs = member.GetCustomAttributes(typeof(DisplayAttribute), false);
           var outString = ((DisplayAttribute)attrs[0]).Name;

           if (((DisplayAttribute)attrs[0]).ResourceType != null)
           {
               outString = ((DisplayAttribute)attrs[0]).GetName();
           }

           return outString;
       }

然後我從這樣的視圖中呼叫它:

<p>
@{var rel = Model.GetEnumDisplayName<Enums.wheteverEnum>(Model.wheteverEnum); }
@rel
</p>

問題是 - 我可以使用這種方法,所以我不必告訴它的類型enum?基本上我想為所有enums做這個:

@Model.GetEnumDisplayName(Model.wheteverEnum)

typeof,不T,不需要Enums在視圖中添加對命名空間的引用…

可能的?

您可以簡單地刪除類型參數並使其成為擴展方法。

   public static string DisplayName(this Enum value)
   {
       Type enumType = value.GetType();
       var enumValue = Enum.GetName(enumType, value);
       MemberInfo member = enumType.GetMember(enumValue)[0];

       var attrs = member.GetCustomAttributes(typeof(DisplayAttribute), false);
       var outString = ((DisplayAttribute)attrs[0]).Name;

       if (((DisplayAttribute)attrs[0]).ResourceType != null)
       {
           outString = ((DisplayAttribute)attrs[0]).GetName();
       }

       return outString;
   }

   @Model.wheteverEnum.DisplayName()

引用自:https://stackoverflow.com/questions/9328972