Razor 中枚举下拉列表的显示名称

Posted

技术标签:

【中文标题】Razor 中枚举下拉列表的显示名称【英文标题】:Display name of enum dropdownlist in Razor 【发布时间】:2013-09-15 08:05:08 【问题描述】:

如何在 Razor 的下拉列表中显示我的枚举的自定义名称?我当前的代码是:

@html.DropDownListFor(model => model.ExpiryStage,
        new SelectList(Enum.GetValues(typeof(ExpiryStages))),
        new  @class = "selectpicker" )

我的枚举是:

public enum ExpiryStages

    [Display(Name = "None")]
    None = 0,

    [Display(Name = "Expires on")]
    ExpiresOn = 1,

    [Display(Name = "Expires between")]
    ExpiresBetween = 2,

    [Display(Name = "Expires after")]
    ExpiresAfter = 3,

    [Display(Name = "Current")]
    Current = 4,

    [Display(Name = "Expired not yet replaced")]
    ExpiredNotYetReplaced = 5,

    [Display(Name = "Replaced")]
    Replaced = 6

例如,我想在 DropDownList 中显示“Expired NotYetReplaced”而不是 ExpiredNotYetReplaced。

【问题讨论】:

我创建了这篇关于制作Html.EnumDropDownListFor() 辅助方法的博文:henkmollema.blogspot.nl/2013/07/… 【参考方案1】:

从 MVC 5.1 开始,他们添加了这个新的助手。你只需要一个枚举

public enum WelcomeMessageType
    
        [Display(Name = "Prior to accepting Quote")]
        PriorToAcceptingQuote,
        [Display(Name = "After Accepting Quote")]
        AfterAcceptingQuote
    

您可以通过书写来创建显示名称的下拉列表

@Html.EnumDropDownListFor(model => model.WelcomeMessageType, null, new  @id = "ddlMessageType", @class = "form-control", @style = "width:200px;" )

【讨论】:

为了搜索者的利益,您必须使用[Display(Name="...")]。 [Description("...")] 不适用于 EnumDropDownListFor【参考方案2】:

我有一个枚举扩展来检索显示名称。

public static string GetDescription<TEnum>(this TEnum value)

    var attributes = value.GetAttributes<DescriptionAttribute>();
    if (attributes.Length == 0)
    
       return Enum.GetName(typeof(TEnum), value);
    

    return attributes[0].Description;

你可以这样使用:

Enum.GetValues(typeof(ExpiryStages)).Select(e => new  Id = Convert.ToInt32(e), Name = e.GetDescription() );

我使用一个方便的助手从枚举中生成选择列表:

public static SelectList SelectListFor<T>() 
        where T : struct

    var t = typeof (T);

    if(!t.IsEnum)
    
        return null;
    

    var values = Enum.GetValues(typeof(T)).Cast<T>()
                   .Select(e => new  Id = Convert.ToInt32(e), Name = e.GetDescription() );

    return new SelectList(values, "Id", "Name");

【讨论】:

【参考方案3】:

在ASP.Net Core中,可以使用HtmlHelper方法IHtmlHelper.GetEnumSelectList(),例如如下:

asp-items="@Html.GetEnumSelectList<MyEnumType>()"

【讨论】:

【参考方案4】:

你可以使用下拉 asp.net core

                    <select asp-for="DeliveryPolicy" asp-items="Html.GetEnumSelectList<ExpiryStages>()">
                        <option selected="selected" value="">Please select</option>
                    </select>

【讨论】:

以上是关于Razor 中枚举下拉列表的显示名称的主要内容,如果未能解决你的问题,请参考以下文章

在 razor 下拉列表中添加 CSS 类

如何在下拉列表中显示枚举文本值?

如何使用 Spring 和 Thymeleaf 在下拉列表中显示所有可能的枚举值?

将枚举的键值绑定到下拉列表框

MVC 4 Razor - 创建动态下拉列表

如何在 ASP.NET Core 2.0 Razor 页面中填充下拉列表