Was ist die beste Weise zu binden @Html.DropDownListFor in ASP.NET MVC5?
Ich soll binden @Html.DropDownListFor
aus Model
Daten ohne Verwendung Viewbag
und Blick auf viele andere Beispiele im web. Aber die meisten von Ihnen verwenden Viewbag
oder eine Erweiterung Methode und ich will ein besserer Ansatz, um dieses problem zu lösen. Ich habe versucht, die folgenden Methoden, aber es scheint nicht zu funktionieren:
@Html.DropDownListFor(m => m.LabId, new SelectList(Model.Lab, "Id", "Name"),
"---- Select----", new { @class = "selectpicker" } )
Ist es möglich, zu binden @Html.DropDownListFor
direkt aus dem Modell ohne Verwendung Viewbag oder eine zusätzliche Methode in der Controller
im ASP.NET MVC5
? Könnten Sie bitte geben Sie einige Beispiele an führen Sie diesen am besten?
ViewBag
ist nur ein container -- übergeben, welche Daten Sie brauchen, wie eine stark typisierte @model
InformationsquelleAutor Willys | 2016-09-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die stark typisierten view-model-Ansatz, die keine dynamische Sachen wie ViewBag
Können Sie eine neue Eigenschaft hinzuzufügen, um Ihre view-model für die SELECT-Optionen der Typ
IEnumrable<SelectListItem>
.view-Modell ist ein einfaches POCO-Klasse dient zur übertragung von Daten zwischen view-to-action-Methode und vice versa. Sie sind spezifisch für die Ansichten. Das hinzufügen von Eigenschaften nur erforderlich für die Ansicht.
und in Ihrer Aktion zu ERHALTEN, erstellen Sie ein Objekt dieser view-Modell, laden Sie die Labs-Eigenschaft und senden zur Ansicht.
und in der Ansicht, die stark typisiert ist diese Ansicht, Modell, rufen Sie die DropDownListFor Helfer-Methode
Pre-wählen Sie eine option im dropdown -
Wenn Sie, wie zu pre-wählen Sie eine option, wenn razor rendert die Seite, können Sie die
SelectedLabId
Eigenschaft Wert Ihrer Ansicht Modell, um dievalue
- Eigenschaft Wert, der der Option-Element(SelectListItem).Wenn Sie wollen, mit echten Daten, statt der hard codierten 2 Elemente, Sie können dies tun,
Vorausgesetzt
dbContext
ist Ihre DbContext-Klasse-Objekt und es hat eineLabs
Eigenschaft des TypsDbSet<Lab>
wo jedes Labor Person hat eine Id-und Name-Eigenschaft.Es gibt eine feine Unterscheidung zwischen Standard-und ausgewählten Wert, wenn es um DropDownListFor, und ich würde argumentieren, dass Ihre Methode der vor-Auswahl der Wert ist nicht ganz korrekt - Sie sollten Sie besser verwenden Sie eine der DropDownListFor Parameter für, anstatt es auf das Modell. Ich schrieb einen kurzen Artikel auf, der problem - nimblegecko.com/...
InformationsquelleAutor Shyju
Sind Sie auf einem guten Weg, indem er die Elemente der Liste in Ihrem Modell. Ich weiß nicht, wie Sie implementiert haben, dass in Ihrem code.
Den
Lab
Eigenschaft in der model-Klasse sein sollte, die eine IEnumerable -, List-oder Collection-von dem, was Sie wollen. und dann in deinem razor-Ansicht, die sieht gut aus.Vielleicht, was Sie vergessen, ist zur Initialisierung der Liste von der action-Methode im controller bevor Sie an den view. E. g:
Oben ich nehme an, das repository sollte etwas sein, das Zugriff hat, oder Mittel, um die benötigten Daten, und auch, dass die
Labs
Eigentum ist definiert alsIEnumerable<Lab> Labs
in der ViewModel-Klasse.Alles sollte funktionieren. Vielleicht sollten Sie klar machen, welche Fehler Sie bekommen.
InformationsquelleAutor pmbanugo