2013-05-19 6 views
5

Ok, damit ich hier eine DropDownList aus meiner Objektliste machen wollen, ist mein bekommen ObjektmethodeDropdownlist aus Objekten MVC

public List<Category> GetCategoriesList() 
{ 
    BaseShopEntities context = new BaseShopEntities(); 
    List<Category> uniqCategories = (from c in context.Category 
              select c).Distinct().ToList<Category>(); 

    return uniqCategories; 
} 

ich versuchte, es in die ViewBag wie folgt zu setzen:

ViewBag.Categories = proxy.GetCategoriesList().ToList(); 

Wenn ich nur Namen von Categorys nehme und es zu Zeichenketten zerlege, gibt es kein Problem, aber ich brauche auch ID

Ich möchte Daten wie diese bekommen aber nicht wissen, wie

@Html.DropDownList("CategoryID", new SelectList(ViewBag.Categories.Name)); 

Antwort

5

Erstens GetCategoriesList bereits eine Liste zurückgibt, so dass Sie nicht ToList benötigen, wenn Sie es an die ViewBag hinzufügen:

ViewBag.Categories = proxy.GetCategoriesList(); 

Zweitens, um eine zu erstellen Dropdownlist, die unabhängig Namen und Werte hat, müssen Sie die folgende Überlastung des SelectList Konstruktor:

SelectList(IEnumerable, String, String) 

Hier legen Sie die Liste mit dem um den SelectList sowie zwei Strings zu füllen, wobei der erste der Name des Werts Feld der Elemente in der Liste und der zweite der Name des Text Feldes ist. Die Werte dieser Felder werden dann mithilfe von Reflektion abgerufen. In Ihrem Fall, wird es wahrscheinlich so etwas wie folgt aussehen:

@Html.DropDownList("CategoryID", 
    new SelectList(ViewBag.Categories, "Id", "Name")); 

Hier gehe ich davon aus, dass jede Kategorie ein Id Feld und eine Name Feld. Wenn diese Feldnamen nicht korrekt sind, müssen Sie die Zeichenfolgen, die an den SelectList-Konstruktor übergeben werden, entsprechend ändern.

Nebenbei bemerkt: Sie sollten ein separates Ansichtsmodell für Kategorien erstellen, das von Ihrer Datenbankentitätsklasse getrennt ist, und stattdessen eine Liste erstellen. Ihre Ansichten sollten nicht direkt auf Ihre Datenelemente zugreifen.

+0

Meine Stunden gerettet. Lief wie am Schnürchen –