Hinzufügen einer CSS-Klasse zur Auswahl mit @ Html.DropDownList ()

76

Ich erstelle meine erste MVC-Anwendung, nachdem ich jahrelang Webformulare erstellt habe, und aus irgendeinem Grund kann ich diese Funktion nicht ausführen:

@Html.DropDownList("PriorityID", String.Empty, new {@class="textbox"} )

Fehlermeldung:

System.Web.Mvc.HtmlHelper<SPDR.Models.Bug>'enthält keine Definition für DropDownListund die Überlastung der besten Erweiterungsmethode System.Web.Mvc.Html.SelectExtensions.DropDownList(System.Web.Mvc.HtmlHelper, string, System.Collections.Generic.IEnumerable<System.Web.Mvc.SelectListItem>, object)enthält einige ungültige Argumente

Jede Hilfe sehr geschätzt!

Lee Bailey
quelle
Sie verwenden keine Überladung, die diese Parameter akzeptiert. Siehe die Dokumentation .
vcsjones

Antworten:

104

Als ich mir den Controller ansah und etwas mehr darüber erfuhr, wie MVC tatsächlich funktioniert, konnte ich dies verstehen.

Meine Ansicht war eine der automatisch generierten und enthielt diese Codezeile:

@Html.DropDownList("PriorityID", string.Empty)

Um HTML-Attribute hinzuzufügen, musste ich Folgendes tun:

@Html.DropDownList("PriorityID", (IEnumerable<SelectListItem>)ViewBag.PriorityID, new { @class="dropdown" })

Nochmals vielen Dank an @Laurent für Ihre Hilfe. Mir ist klar, dass die Frage nicht so klar war, wie es hätte sein können ...

AKTUALISIEREN:

Ein besserer Weg, dies zu tun, wäre, DropDownListFor zu verwenden. Wenn möglich, verlassen Sie sich auf keine magische Zeichenfolge für das Namensattribut

@Html.DropDownListFor(x => x.PriorityID, (IEnumerable<SelectListItem>)ViewBag.PriorityID, new { @class = "dropdown" })
Lee Bailey
quelle
Vielen Dank. Es hilft mir sehr
Zamir
4
Ich verwende Ihre Lösung (meine Ansicht wird ebenfalls automatisch generiert), aber wenn ich in der Bearbeitungsansicht meinen ausgewählten Wert verloren habe, können Sie mir helfen? @ Html.DropDownList ("StateGroupID", (IEnumerable <SelectListItem>) ViewBag.StateGroupID, String.Empty, new {@class = "form-control"})
Willy
@Willy, ich bin nicht 100% sicher, was Sie unter "meinen ausgewählten Wert verloren" verstehen - meinen Sie, dass der ausgewählte Wert nicht korrekt auf dem Server veröffentlicht wird? Bitte sehen Sie meine Bearbeitung für eine mögliche Lösung ...
Lee Bailey
2
Wenn ich den Datensatz bearbeitet habe, ist die Dropdown-Liste leer und sollte an einen Wert gebunden sein. Ich habe die Lösung gefunden, indem ich den Nullwert am 2. Parameter @ Html.DropDownList ("StateGroupID", null, String.Empty, new {@class = "form-control"}) übergeben habe
Willy
1
Es ist in Ordnung. Aber wenn Sie einen Standardwert wie -select-mit Ihrer Liste wollen, müssen Sie ihn ändern müssen, wie@Html.DropDownList("PriorityID", (IEnumerable<SelectListItem>)ViewBag.PriorityID, String.Empty, new { @class="dropdown" })
gdmanandamohon
39

Wie die Signatur aus der Fehlermeldung impliziert, muss das zweite Argument ein IEnumerable sein, genauer gesagt ein IEnumerable von SelectListItem. Es ist die Liste der Auswahlmöglichkeiten. Sie können den SelectList-Typ verwenden, der eine IEnumerable von SelectListItem ist. Für eine Liste ohne Auswahlmöglichkeiten:

@Html.DropDownList("PriorityID", new List<SelectListItem>(), new {@class="textbox"} )

Für eine Liste mit einigen Auswahlmöglichkeiten:

@Html.DropDownList(
    "PriorityID", 
    new List<SelectListItem> 
    { 
        new SelectListItem { Text = "High", Value = 1 }, 
        new SelectListItem { Text = "Low",  Value = 0 },
    }, 
    new {@class="textbox"})

Vielleicht kann dieses Tutorial hilfreich sein: So erstellen Sie eine DropDownList mit ASP.NET MVC

Laurent le Beau-Martin
quelle
Danke für die Antwort Laurent, leider habe ich immer noch Probleme. Bei Verwendung Ihrer Codezeile wird folgende Fehlermeldung angezeigt: System.Web.Mvc.SelectList 'enthält keinen Konstruktor, der 0 Argumente akzeptiert. Diese Zeile funktioniert, ich erhalte das select-Tag, möchte jedoch nur eine CSS-Klasse hinzufügen: @Html .DropDownList ("PriorityID", String.Empty)
Lee Bailey
Du hast recht, ich habe mich verändert new List<SelectListItem>(). SelectList ist eigentlich eine Hilfsklasse, mit der Sie eine Liste mit Auswahlmöglichkeiten aus einer anderen Liste von Objekten erstellen können. Siehe das Tutorial, das ich meinem Beitrag hinzugefügt habe.
Laurent le Beau-Martin
Vielen Dank, das funktioniert jedoch mit Überladung Nr. 2 (String-Name, String-OptionLabel). Mein Dropdown-Menü wird automatisch mit den Datensätzen aus meiner Prioritäts-Tabelle gefüllt. Genau das möchte ich, ich muss nur die CSS-Klasse hinzufügen - aber es scheint, dass es keine Überlastung gibt, die das erlaubt?!
Lee Bailey
19

Wenn Sie mehr als ein Argument hinzufügen, führen Sie eine Dropdown-Liste in Asp.Net MVC durch. Wenn Sie den Datensatz bearbeiten oder den Wert im Ansichtsbeutel übergeben.

Verwenden Sie dies, es wird Arbeit sein: -

@Html.DropDownList("CurrencyID",null,String.Empty, new { @class = "form-control-mandatory" })
Mohita
quelle
Du hast meinen Tag gemacht @mohita
Muhammad Ashikuzzaman
8

Es gibt einige Optionen im Konstruktor-Look, wenn Sie keine Dropdown-Liste haben und eine CSS-Klasse einfügen möchten, die Sie gerne verwenden können

@Html.DropDownList("Country", null, "Choose-Category", new {@class="form-control"})

In diesem Fall ist Land der Name Ihres Dropdowns. Null bedeutet, dass Sie keine generische Liste von Ihrem Controller übergeben. "Kategorie auswählen" ist das ausgewählte Element und das letzte in der CSS-Klasse, wenn Sie keine Standardoption auswählen möchten Ersetzen Sie einfach "Kategorie auswählen" durch ""

mk Mughal
quelle
6

Sie können dies mit jQuery tun

  $("select").addClass("form-control")

Wählen Sie hier das HTML-Tag Select und den Namen der Form-Control-Klasse

 @Html.DropDownList("SupplierId", "Select Supplier")

und hier ist SupplierId ViewBagList, Select Supplier is - Display Name

Praveen MP
quelle
4

Probieren Sie es einfach aus

@Html.DropDownList("PriorityID", (IEnumerable<SelectListItem>)ViewBag.PriorityID,  new { @class="dropdown" })

Wenn Sie jedoch einen Standardwert oder keinen Optionswert möchten, müssen Sie diesen versuchen, da String.Emptyfür Sie kein Wert ausgewählt wird, der -select-als Standardoption fungiert

@Html.DropDownList("PriorityID", (IEnumerable<SelectListItem>)ViewBag.PriorityID, String.Empty, new { @class="dropdown" })
gdmanandamohon
quelle
1

Versuchen Sie den folgenden Code:

@Html.DropDownList("ProductTypeID",null,"",new { @class = "form-control"})
Alfred Jose
quelle
1

Versuche dies:

@Html.DropDownList(
    "country", 
    new[] {
        new SelectListItem() { Value = "IN", Text = "India" },
        new SelectListItem() { Value = "US", Text = "United States" }
    }, 
    "Country",
    new { @class = "form-control",@selected = Model.Country}
)
Abhishek Maurya
quelle
Willkommen bei Stack Overflow! Während dieses Code-Snippet die Frage lösen kann, hilft eine Erklärung wirklich dabei, die Qualität Ihres Beitrags zu verbessern. Denken Sie daran, dass Sie die Frage in Zukunft für Leser beantworten und diese Personen möglicherweise die Gründe für Ihren Codevorschlag nicht kennen. Bitte versuchen Sie auch, Ihren Code nicht mit erklärenden Kommentaren zu überfüllen. Dies verringert die Lesbarkeit sowohl des Codes als auch der Erklärungen!
Rizier123
Nehmen Sie sich einen Moment Zeit, um die Bearbeitungshilfe in der Hilfe zu lesen . Die Formatierung beim Stapelüberlauf unterscheidet sich von anderen Websites.
Rizier123
0

Sie können dies einfach tun:

@Html.DropDownList("PriorityID", null, new { @class="form-control"})
ladymbm
quelle
-1

Versuche dies

 @Html.DropDownList("Id", null, new { @class = "ct-js-select ct-select-lg" })
Krishna Prajapati
quelle