【问题标题】:Using ASP.NET MVC 5, how do I get the localized DisplayAttribute string for an Enum value in a View?使用 ASP.NET MVC 5,如何获取视图中枚举值的本地化 DisplayAttribute 字符串?
【发布时间】:2015-07-18 05:51:53
【问题描述】:

如果我在Enum 值上使用DisplayAttribute,如何根据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 文件,其中包含以下内容:

如果我只有枚举的值,我将如何检索正确的本地化值?我想使用正确的本地化值在视图中显示。

我看过使用类型转换器、扩展方法等的解决方案,但似乎都添加了很多应该相对简单的代码。将DisplayAttribute 用于所有其他目的使得本地化变得非常简单,因为它在内部处理它。

【问题讨论】:

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


    【解决方案1】:

    我发现解决这个问题的最简单方法不需要任何额外的代码是视图本身中的以下代码:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-04
      • 1970-01-01
      相关资源
      最近更新 更多