wake-up-neo.net

Zeigt den Namen der Listenliste in Razor an

Wie kann ich die benutzerdefinierten Namen meiner Enums in einer Dropdown-Liste in Razor anzeigen? Mein aktueller Code lautet:

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

Meine Aufzählung lautet:

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
}

Zum Beispiel möchte ich in meiner DropDownList anstelle von ExpiredNotYetReplaced "Abgelaufen, noch nicht ersetzt" anzeigen.

18
rajeemcariazo

Ab MVC 5.1 haben sie diesen neuen Helfer hinzugefügt. Sie brauchen nur eine Aufzählung

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

und Sie können die Dropdown-Liste mit den Namen erstellen, indem Sie schreiben

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

Ich habe eine Enumerationserweiterung, um den Anzeigenamen abzurufen.

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;
}

Welches können Sie so verwenden:

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

Ich verwende einen praktischen Helfer, um aus Enumen ausgewählte Listen zu erstellen:

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");
}
4
James Hull

sie können den asp.net-Kern für dropdown verwenden 

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

In ASP.Net Core kann die HtmlHelper-Methode IHtmlHelper.GetEnumSelectList () verwendet werden, die beispielsweise wie folgt verwendet werden kann: 

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