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.
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;" })
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");
}
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>
In ASP.Net Core kann die HtmlHelper-Methode IHtmlHelper.GetEnumSelectList () verwendet werden, die beispielsweise wie folgt verwendet werden kann:
asp-items="@Html.GetEnumSelectList<MyEnumType>()"