2016-07-15 2 views
1

Я украсил следующее перечисление с дисплеем DataAnnotation атрибуты:DataAnnotations: зачитать свойство Имени в коде

public enum RequiredOptions 
{ 
    [Display(Name="Optional",Description ="Optional")] 
    Optional, 
    [Display(Name="Not Used",Description ="Not Used")] 
    NotUsed, 
    [Display(Name="Required",Description ="Required")] 
    Required 
} 

Я хотел бы зачитать значение имени атрибута Display для заданного значения перечисления в мой код. Как мне это сделать?

public static string DisplayRequiredOptionName(RequiredOptions opt) 
    { 
     // Return the value of Name from the display attribute from opt 
    } 
+3

Я думаю, что вы обычно делаете это с помощью отражения и GetCustomAttributes(). –

ответ

0

Ну, после того, как делают некоторые рытье в исходном коде MVC (см ЦСИ \ System.Web.Mvc \ Html \ SelectExtensions.cs см GetDisplayName()), вот что я должен работать:

public static string GetEnumDisplayName<T>(T enumInstance) 
    { 
     return GetDisplayName(enumInstance.GetType().GetField(enumInstance.ToString())); 
    } 

    private static string GetDisplayName(FieldInfo field) 
    { 
     DisplayAttribute display = field.GetCustomAttribute<DisplayAttribute>(inherit: false); 
     if (display != null) 
     { 
      string name = display.GetName(); 
      if (!String.IsNullOrEmpty(name)) 
      { 
       return name; 
      } 
     } 

     return field.Name; 
    }