使用ASP.NET MVC 5,如何在View中获取Enum值的本地化DisplayAttribute字符串?

时间:2015-07-18 05:51:53

标签: c# asp.net asp.net-mvc enums localization

如果我在DisplayAttribute值上使用Enum,如何根据Enum值获取本地化资源值。

例如,如果我将Enum定义如下:

public enum ExpireMode {
    [Display(ResourceType = typeof (ModelRes.ExpireMode), Name = "Never")]
    Never = 0,

    [Display(ResourceType = typeof (ModelRes.ExpireMode), Name = "ByCreated")]
    ByCreated = 1,

    [Display(ResourceType = typeof (ModelRes.ExpireMode), Name = "ByLastAccessed")]
    ByLastAccessed = 2,
}

而且,我们假设我创建了一个.resx文件,其中包含ModelRes的自定义命名空间,其中包含以下内容:

enter image description here

如果我拥有的是enum的值,我将如何检索正确的本地化值?我想在视图中使用适当的本地化值来显示。

我已经研究过使用类型转换器,扩展方法等的解决方案,但似乎都添加了许多应该相对简单的代码。将DisplayAttribute用于所有其他目的会使本地化变得微不足道,因为它在内部处理它。

1 个答案:

答案 0 :(得分:0)

我发现解决此问题的最简单方法是不需要任何额外代码,以下是View中的代码:

@ModelRes.ExpireMode.ResourceManager.GetString(Model.ExpireMode.ToString())

Model.ExpireModeEnum类型ExpireMode模型上的属性。 ModelRes是资源类ExpireMode的自定义命名空间。我抓住ResourceManager并使用枚举值的字符串表示来调用GetString,这为我提供了正确的本地化值。