【问题标题】:MVC how to correctly display localized enum in display form?MVC 如何以显示形式正确显示本地化枚举?
【发布时间】:2014-01-04 16:26:14
【问题描述】:

我有一个关于枚举的问题,基本上我已经创建了一个本地化的枚举下拉列表,以正确显示具有本地化的枚举。

但是当我想稍后在另一个页面的某个地方显示选定的枚举时,我不再获得本地化。

任何想法,或者任何人都可以给我一个链接,指向一些用于显示枚举的 html 扩展。

我有以下几点:

public enum Gender
{
        [Display(ResourceType = typeof(Resources.Base), Name = "Male")]
        M= 0,
        [Display(ResourceType = typeof(Resources.Base), Name = "Female")]
        F= 1,
}

在我看来,我有以下几点:

@Html.LabelForModel(Model.Gender.ToString())

在我设置的控制器中:

Model.Gender = Gender.M

我没有从基地显示男性,而是显示“M”。

知道如何解决这个问题吗?

【问题讨论】:

  • 我还在寻找答案,如果有人可以...?

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


【解决方案1】:

最后我自己解决了我的问题,我创建了一个自定义 html 帮助程序来正确显示“显示”注释。

    public static MvcHtmlString DisplayEnum(this HtmlHelper helper, Enum e)
    {
        string result = string.Empty;

        var display = e.GetType()
                   .GetMember(e.ToString()).First()
                   .GetCustomAttributes(false)
                   .OfType<DisplayAttribute>()
                   .LastOrDefault();

        if (display != null)
        {
            result = display.GetName();
        }

        return helper.Label(result);
    }

【讨论】:

  • 你得到了名字,但我认为你没有得到这个名字的资源,是吗?
  • @deadManN 阅读docs
【解决方案2】:

您应该在视图中使用此代码:

@Html.LabelFor(m => m.Gender)

因为Display 属性使用LabelFor 方法来显示您的值。ToString 只是将您的枚举值转换为字符串。它没有关于您的属性的任何信息。

【讨论】:

  • 现在我得到的是性别而不是 M,但我需要查看“男性”或它的本地化版本
猜你喜欢
  • 2021-10-31
  • 1970-01-01
  • 2015-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多