Ich habe eine asp.net-mvc Webseite und ich möchte eine Dropdown-Liste, die auf einem Enum basiert. Ich möchte den Text jedes Aufzählungselements und die ID anzeigen, die der Int-Wert ist, mit dem die Aufzählung verknüpft ist. Gibt es eine elegante Möglichkeit, diese Konvertierung durchzuführen?Wie kann ich eine Aufzählung in eine Liste <SelectListItem> konvertieren?
Antwort
Sie können LINQ verwenden:
Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>().Select(v => new SelectListItem {
Text = v.ToString(),
Value = ((int)v).ToString()
}).ToList();
Obwohl * LINQ * zum inoffiziellen Namen der Enumerable Extensions geworden ist, kann ich nicht anders, als mich zu fragen, ob etwas Angemesseneres existiert. – ChaosPandion
Es ist Teil des Linq Namespace und Projekt und IMO der richtige Name. Linq ist nur der Name für die Spracherweiterung. – Dykam
Dieser Code oben kompiliert nicht. Ich versuche dies zu tun: List
Jetzt habe ich Tuple<string, string>
aber Sie können dies alles verwenden, konvertieren:
var values = Enum.GetValues(typeof(DayOfWeek))
.Cast<DayOfWeek>()
.Select(d => Tuple.Create(((int)d).ToString(), d.ToString()))
.ToList()
Sie Enum.GetNames()
verwenden können, ein String-Array mit den Namen der Enum Elemente zu erhalten. Wenn Ihre Elementnamen benutzerfreundlich sind, ist dies wahrscheinlich gut genug. Andernfalls können Sie Ihre eigene GetName()
-Methode erstellen, die für jedes Element einen schönen Namen zurückgibt.
ODER - wenn sich die Enumeration niemals (oder selten) ändert, können Sie einfach eine Methode erstellen, die Ihrem Dropdown-Menü direkt fest codierte Elemente hinzufügt. Dies ist wahrscheinlich effizienter (wenn Ihnen das wichtig ist).
Seit MVC 5.1, die eleganteste Art und Weise wäre EnumDropDownListFor Methode der Html-Helfer zu verwenden, wenn Sie select
Optionen in der Ansicht füllen müssen:
@Html.EnumDropDownListFor(m => m.MyEnumProperty,new { @class="form-control"})
oder GetSelectList Methode von EnumHelper in Ihrem Controller:
var enumList = EnumHelper.GetSelectList(typeof (MyEnum));
netter, danke! –
Sehr glatt! Wusste das nicht ... sollte die richtige Antwort sein. –
wow, ich wusste es nicht. eine Menge Codezeilen für jetzt gespeichert! Danke mann! –
Ich tat dies mit einer statischen Methode, die ich wiederverwenden konnte.
public static IEnumerable<SelectListItem> EnumToSelectList<T>()
{
return (Enum.GetValues(typeof(T)).Cast<T>().Select(
e => new SelectListItem() { Text = e.ToString(), Value = e.ToString() })).ToList();
}
I verwendet GetEnumSelectList
aus der HTML-Helper-Klasse
<select asp-for="MyProperty" class="form-control" asp-items="@Html.GetEnumSelectList<MyEnum>()" ></select>
die Antwort von Maksim Vi. sollte wirklich die richtige Antwort sein. –