使用ASP.NET MVC2中的DataAnnotations显示友好的本地化枚举值

Tim*_*ers 18 asp.net-mvc asp.net-mvc-2

在MVC2中显示本地化枚举属性的推荐方法是什么?

如果我有这样的模型:

public class MyModel {
  public MyEnum MyEnumValue { get; set; } 
}
Run Code Online (Sandbox Code Playgroud)

和视图中的一行如下:

<%: Html.DisplayFor(model => model.MyEnumValue) %>
Run Code Online (Sandbox Code Playgroud)

我希望只是用DisplayAttribute这样注释enum值:

public enum MyEnum
{
    [Display(Name="EnumValue1_Name", ResourceType=typeof(Resources.MyEnumResources))]
    EnumValue1,
    [Display(Name="EnumValue2_Name", ResourceType=typeof(Resources.MyEnumResources))]
    EnumValue2,
    [Display(Name="EnumValue3_Name", ResourceType=typeof(Resources.MyEnumResources))]
    EnumValue3
}
Run Code Online (Sandbox Code Playgroud)

这不受支持.似乎还需要其他东西.实现它的最好方法是什么?

Ras*_*dit 7

您可以尝试使用DescriptionAttribute.

例如

在视图模型中:

public enum MyEnum
        {
             [Description("User Is Sleeping")]
            Asleep,
             [Description("User Is Awake")]
            Awake
        }

 public string GetDescription(Type type, string value)
        {
            return ((DescriptionAttribute)(type.GetMember(value)[0].GetCustomAttributes(typeof(DescriptionAttribute), false)[0])).Description;
        }
Run Code Online (Sandbox Code Playgroud)

在视图中:

Model.GetDescription(Model.myEnum.GetType(), Model.myEnum) to retrieve the value set in Description. 
Run Code Online (Sandbox Code Playgroud)

我正在使用类似的东西来设置我的Html.Dropdown中的displayname和value.