2010-03-07 8 views
12

Ich versuche zu verstehen, die beste Möglichkeit zur Implementierung eines DropDownList in ASP.NET MVC 2 mit dem DropDownListFor Helfer. Dies ist eine mehrteilige Frage.Die beste Methode zum Implementieren von DropDownList in ASP.NET MVC 2?

Erstens, was ist der beste Weg, um die Listendaten an die Ansicht zu übergeben?

  1. übergeben Sie die Liste in Ihrem Modell mit einer SelectList Eigenschaft, die in die Daten
  2. übergeben Sie die Liste enthält über ViewData

Wie kann ich einen leeren Wert in den DropDownList bekommen? Soll ich es in die SelectList erstellen, wenn ich es erstelle oder gibt es andere Möglichkeiten, dem Helfer zu sagen, dass er automatisch einen leeren Wert erstellen soll?

Schließlich, wenn aus irgendeinem Grund gibt es einen Server Side Error und ich muss den Bildschirm mit der DropDownList wieder anzeigen, muss ich die Listenwerte wieder in das Ansichtsmodell übergeben? Diese Daten werden nicht zwischen Beiträgen gepflegt (zumindest nicht, wenn ich sie über mein Ansichtsmodell übergebe), so dass ich sie einfach erneut abrufen wollte (sie wird zwischengespeichert). Gehe ich das richtig?

Antwort

9

Ihre beste Wette ist eine Select in Ihrem Controller erstellen - hier meine Erweiterungsmethode verwenden: http://blog.wekeroad.com/2010/01/20/my-favorite-helpers-for-aspnet-mvc

Pop, die in Viewdata die gleichen Schlüssel wie Ihr Eigentum in Namen: ViewData["statusid"]=MySelectList

Dann benutzen Sie einfach Html.DropDownFor(x=>x.StatusID) und Sie sind fertig.

+1

Das Problem mit ViewData ist, dass es Ihren Controller so viel schwieriger zu testen macht. Wenn Sie alles im ViewModel behalten, sind Ihre Tests viel besser. – Mac

+2

Es ist eigentlich überhaupt nicht anders - mit dem ViewModel muss man ViewData.Model spelunkieren, sonst fragt man einfach mit einem Schlüssel danach. Kein Unterschied ... –

+0

http://StackOverflow.com/a/5177332/986862 –

0

(Sie wissen schon!)

  1. übergeben Sie die Liste in Ihrem Modell mit einer Select Eigenschaft, die die Daten

Ja enthält, es hinzufügen, wenn Sie die Select bauen. (Wenn Sie die Liste mit LINQ erstellen, könnte Union nützlich sein.)

Ja, tun Sie, und ja, Sie sind.

3

in Teilen Answering:

  1. Der beste Weg IMHO ist die Liste in den ViewModel wie dies zu passieren:

    public SelectList Colors 
    { 
        get 
        { 
         // Getting a list of Colors from the database for example... 
         List<Color> colors = GetColors().ToList(); 
    
         // Returning a SelectList to be used on the View side 
         return new SelectList(colors, "Value", "Name"); 
        } 
    } 
    
  2. Um eine leere oder Standardoption zu erhalten wie (- Pick Farbe -), können Sie dies auf der Sichtseite tun:

    @Html.DropDownListFor(m => m.Color, Model.Colors, "-- Pick a color --") 
    
  3. Sie müssen die Liste erneut abrufen/ausfüllen, wenn sie Teil der ViewModel ist.


einen Blick auf den Posten folgenden Blog Nehmen.Es kann Ihnen ein paar Tipps geben:

Drop-down Lists and ASP.NET MVC

2

Sie so etwas wie tun könnte:

<%= Html.DropDownListFor((x => x.ListItems), Model.ListItems, "")%> 

oder

<%= Html.DropDownList("ListItems", Model.ListItems, "")%> 

Der letzte param 'option' macht eine leere Liste Artikel

In diesem Fall können Sie sehen, dass ListItems eine Eigenschaft des Modells ist.

Ich habe die Ansicht stark auf das Modell auch getippt.

0

Ich finde es intuitiver, mit einer Sequenz von SelectListItems (anstatt einer SelectList) zu arbeiten.

Zum Beispiel würde dies eine IEnumerable<SelectListItem> aus einer Sequenz von Kundenobjekten erstellen, die Sie an den Helfer Html.DropDownListFor (...) übergeben können. Die Eigenschaft 'Ausgewählt' legt optional das Standardelement in der Dropdown-Liste fest.

Verwandte Themen