741 Stimmen

Wie erstellen Sie eine Dropdownliste aus einer Aufzählung in ASP.NET MVC?

Ich versuche, die Html.DropDownList Erweiterungsmethode, kann aber nicht herausfinden, wie man sie mit einer Aufzählung verwenden kann.

Nehmen wir an, ich habe eine Aufzählung wie diese:

public enum ItemTypes
{
    Movie = 1,
    Game = 2,
    Book = 3
}

Wie erstelle ich eine Auswahlliste mit diesen Werten unter Verwendung der Html.DropDownList Erweiterungsmethode?

Oder ist meine beste Wette, um einfach eine for-Schleife erstellen und die Html-Elemente manuell erstellen?

12voto

ceedee Punkte 186

Lösung des Problems, die Zahl anstelle des Textes zu erhalten, mit der Erweiterungsmethode von Prise.

public static SelectList ToSelectList<TEnum>(this TEnum enumObj)
{
  var values = from TEnum e in Enum.GetValues(typeof(TEnum))
               select new { ID = (int)Enum.Parse(typeof(TEnum),e.ToString())
                         , Name = e.ToString() };

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

0 Stimmen

Das ist genau das, was ich gesucht habe, obwohl es ein bisschen hässlicher ist, als ich dachte, dass es sein müsste. Ich frage mich, warum Visual Studio lässt Sie nicht direkt Cast e à int .

0 Stimmen

Oder Sie könnten einfach Folgendes verwenden ID = Convert.ToInt32(e) .

12voto

Louie Bacaj Punkte 1377

Eine super einfache Möglichkeit, dies zu erreichen - ohne all die Erweiterungen, die übertrieben erscheinen - ist dies:

Ihre Aufzählung:

    public enum SelectedLevel
    {
       Level1,
       Level2,
       Level3,
       Level4
    }

Innerhalb Ihres Controllers binden Sie die Enum an eine Liste:

    List<SelectedLevel> myLevels = Enum.GetValues(typeof(SelectedLevel)).Cast<SelectedLevel>().ToList();

Danach werfen Sie es in eine ViewBag:

    ViewBag.RequiredLevel = new SelectList(myLevels);

Schließlich binden Sie es einfach an die Ansicht:

    @Html.DropDownList("selectedLevel", (SelectList)ViewBag.RequiredLevel, new { @class = "form-control" })

Dies ist bei weitem der einfachste Weg, den ich gefunden habe, und erfordert keine Erweiterungen oder andere verrückte Dinge.

UPDATE : Siehe Kommentar von Andrews weiter unten.

3 Stimmen

Dies funktioniert nur, wenn Sie Ihrer Aufzählung keinen Wert zugewiesen haben. Hätten Sie Level1 = 1 wäre der Wert der Auswahlliste "Level1" anstelle von 1 .

11voto

Lafi Punkte 553

Jetzt wird diese Funktion in MVC 5.1 sofort unterstützt durch @Html.EnumDropDownListFor()

Besuchen Sie den folgenden Link:

https://docs.microsoft.com/en-us/aspnet/mvc/overview/releases/mvc51-release-notes#Enum

Es ist wirklich schade, dass Microsoft 5 Jahre gebraucht hat, um eine solche Funktion zu implementieren, die laut der obigen Abstimmung so gefragt ist!

11voto

Garry Shutler Punkte 31414

Sie sollten etwas verwenden wie Enum.GetValues

10voto

Mr. Pumpkin Punkte 5815
@Html.DropDownListFor(model => model.Type, Enum.GetNames(typeof(Rewards.Models.PropertyType)).Select(e => new SelectListItem { Text = e }))

0 Stimmen

Gut! Wie kann man Wert und Text von enum auf diese Weise erhalten? Ich meine, ich habe SomeEnum { some1 = 1, some2 = 2} Ich muss Zahlen (1, 2) für Wert und Text (some1, some2) für Text der Auswahlliste erhalten

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X