8

Ich möchte wissen, Was ist der beste Weg zum Erstellen von Dropdown-Listen in MVC 4? Mit ViewBag oder ein anderer Ansatz?Was ist der beste Weg, Drop-down-Listen in MVC 4 zu erstellen?

+0

es ist nicht View.Bag es ist ViewBag –

+1

Ich würde empfehlen, sie mit Ihrem 'ViewModel' zu übergeben. – Artless

+0

Hmm, ich habe viele Dropdown-Listen in View. Ich möchte sie mit ViewBag erstellen, aber ich möchte mich nicht beeilen, vielleicht gibt es andere Möglichkeiten, die besser sind als viewBag –

Antwort

10

Ich würde argumentieren, dass, da die Elemente Variablenwerte innerhalb Ihrer Ansicht sind, dass sie in das Ansichtsmodell gehören. Das View Model ist nicht notwendig nur für Artikel zurück aus der Ansicht.

Modell:

public class SomethingModel 
{ 
    public IEnumerable<SelectListItem> DropDownItems { get; set; } 
    public String MySelection { get; set; } 

    public SomethingModel() 
    { 
     DropDownItems = new List<SelectListItem>(); 
    } 
} 

Controller:

public ActionResult DoSomething() 
{ 
    var model = new SomethingModel();   
    model.DropDownItems.Add(new SelectListItem { Text = "MyText", Value = "1" }); 
    return View(model) 
} 

Ausblick:

@Html.DropDownListFor(m => m.MySelection, Model.DropDownItems) 

bevölkern diese in der Steuerung oder wo auch immer angemessen ist für das Szenario.

Alternativ kann für mehr Flexibilität, schalten public IEnumerable<SelectListItem> für public IEnumerable<MyCustomClass> und dann tun:

@Html.DropDownFor(m => m.MySelection, 
    new SelectList(Model.DropDownItems, "KeyProperty", "ValueProperty") 

In diesem Fall werden Sie natürlich auch, dass Ihr Controller-Aktion ändern, anstatt zu füllen model.DropDownItems mit Instanzen von MyCustomClass .

+1

Danke, @ Ant P.Wie kann ich in diesem Beispiel dataValueField bekommen? –

+0

Ich möchte diese neue SelectList schreiben (Model.DisplayList, "TestplanId", "Name") –

+1

@ ElvinArzumanoğlu Ich habe einige Informationen hinzugefügt, wie Sie dies erreichen können. –