MVC如何正确显示显示形式的本地化枚举?

时间:2014-01-04 16:26:14

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

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

但是当我想稍后在另一页的某个地方展示选定的枚举时,我就不再进行本地化了。

任何想法,或者任何人都可以给我一些链接到一些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”。

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

2 个答案:

答案 0 :(得分:7)

最后我自己解决了我的问题,我创建了一个自定义的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);
    }

答案 1 :(得分:1)

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

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

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