views:

205

answers:

3

What's the recommended way to display localized enum properties in MVC2?

If I have a model like this:

public class MyModel {
  public MyEnum MyEnumValue { get; set; } 
}

and a line in the view like this:

<%: Html.DisplayFor(model => model.MyEnumValue) %>

I was hoping to just annotate the enum values with DisplayAttribute like this:

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
}

That's not supported. It seems there's something else needed. What's the nicest way to implement it?

A: 

You can try using the DescriptionAttribute for this.

E.g.

In the view model:

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;
        }

In the view:

Model.GetDescription(Model.myEnum.GetType(), Model.myEnum) to retrieve the value set in Description. 

I am using something similar to set the displayname and value in my Html.Dropdown.

Rashmi Pandit
Sure, but that's not localized. And Views need to know whether they're displaying an Enum or something else, and I'd hoped to separate that concern. I was hoping to extend the ModelMetadataProvider or something like that. I'll post the answer if I find it.
Tim
Yes, you are right. This won't work for localization req. I'll keep the post though. Some one might find it useful for other scenarios.
Rashmi Pandit
A: 

Hi, I recommended this page

http://adamyan.blogspot.com/2010/02/aspnet-mvc-2-localization-complete.html

AbsolutJav
+1  A: 

take a look at this question may be it is usefull!
http://stackoverflow.com/questions/3431515/in-asp-net-mvc-can-i-make-a-default-editor-template-for-enum

Nour Sabouny