0

枚举类

public enum DataReleaseChoice 
{
    Accept, 
    Decline,
    [Display(Name = "Retrieve your application")]
    Continue
}

在我看来:

<input name="@Html.NameFor(model => model.DataReleaseAuthorization)" type="submit" value="@DataReleaseChoice.Accept" class="btn btn-primary" />
<input name="@Html.NameFor(model => model.DataReleaseAuthorization)" type="submit" value="@DataReleaseChoice.Decline" class="btn btn-primary" />

我要做的就是为新的“继续”按钮添加一行,但它应该显示 DisplayAttributes 值(“检索您的应用程序”)

我查看了如何通过 MVC 剃须刀代码获取枚举成员的显示名称属性中提供的示例?但我很难在 Razor 视图中使用它。我可以使用以下代码在控制器中显示值,

var displayAttribute = PAI.Web.Utilities.EnumHelper<DataReleaseChoice>.GetDisplayValue(DataReleaseChoice.Continue);

但是当我在剃刀视图中使用相同如下时,

<input name="@Html.NameFor(model => model.DataReleaseAuthorization)" type="submit" value="@PAI.Web.Utilities.EnumHelper<DataReleaseChoice>.GetDisplayValue(DataReleaseChoice.Continue)" class="btn btn-primary" />, 

我得到错误

Using the generic type 'EnumHelper<T>' requires 1 type arguments

我正在使用 MVC 5.2.3,并在其他论坛中读到 MVC 5 支持 Enums 的 DisplayAttribute 开箱即用。虽然我很难使用它。

4

1 回答 1

1

使用此扩展方法获取DisplayNameController 或 View 中的枚举:

public static class EnumExtension
{
    public static string GetDisplayName(this Enum value)
    {
        var enumType = value.GetType();
        var enumName = Enum.GetName(enumType, value);
        var member = enumType.GetMember(enumName)[0];

        var attributes = member.GetCustomAttributes(typeof (DisplayAttribute), false);
        var outString = string.Empty;

        outString = ((DisplayAttribute) attributes[0]).ResourceType != null 
            ? ((DisplayAttribute) attributes[0]).GetName() 
            : ((DisplayAttribute)attributes[0]).Name;

        return outString;
    }
}

<input name="@Html.NameFor(model => model.DataReleaseAuthorization)" type="submit" value="@DataReleaseChoice.Continue.GetDsiplayName()" class="btn btn-primary" />,

于 2015-10-07T04:53:46.243 回答