MVC5在@ Html.ActionLink中显示漂亮的Enum DisplayName

时间:2014-11-01 14:33:48

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

在我的asp.net MVC5项目中,我正在使用Enums的[Display(Name =“String”)]注释,只要我使用它就能正常工作:

@Html.DisplayFor(modelItem => item.Category)

现在我想将我漂亮的Enum名称用作

中的链接文本
@Html.ActionLink(item.Category.ToString(), "Category", new { id = item.Category })

它当然是这样的,但我没有看到DisplayName值(带空格)。我怎样才能做到这一点?

这就是我的枚举的样子(只是为了澄清):

public enum Category
{
    Book,
    Movie,
    [Display(Name = "TV Show")]
    TVShow,
    [Display(Name = "Video Game")]
    Videogame,
    Music,
    Software,
    Other
}

1 个答案:

答案 0 :(得分:2)

 public static class EnumExtension
{
    public static string GetDisplayName(this System.Enum en)
    {
        Type type = en.GetType();
        MemberInfo[] memInfo = type.GetMember(en.ToString());
        if (memInfo != null && memInfo.Length > 0)
        {
            object[] attrs = memInfo[0].GetCustomAttributes(typeof(DisplayAttribute), true);
            if (attrs != null && attrs.Length > 0)
            {
                return ((DisplayAttribute)attrs[0]).Name;
            }
        }
        return en.ToString();
    }
}

@Html.ActionLink(item.Category.GetDisplayName(), "Category", new { id = item.Category })