2016-07-15 7 views
1

でNameプロパティを読み出し、私は表示DataAnnotationと、次のenumを飾っている属性:DataAnnotations:コード

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

私は、内の指定された列挙型の値の表示属性の名前値を読み出したいのですが私のコード。これはどうすればいいですか?

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

私はあなたがリフレクションとGetCustomAttributes()を使って通常そうすると思います。 –

答えて

0

まあ、MVCのソースコードにいくつかの掘削を行った後(参照SRC \ System.Web.Mvcは\ SelectExtensions.cs \、GETDISPLAYNAME()を参照HTML)、ここで私が動作するようになったものです:

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; 
    } 
関連する問題