2014-02-17 4 views
12

Ich habe eine Klasse wieSelectedValues ​​nicht in MultiSelectList mvc Arbeits

public class Category 
    { 
     public int ID { get; set; } 
     public string Name { get; set; } 
     public ICollection<Category> CategorySelected { get; set; } 
     public static List<Category> GetOptions() 
     { 
      var categories = new List<Category>(); 
      categories.Add(new Category() { ID = 1, Name = "Bikes" }); 
      categories.Add(new Category() { ID = 2, Name = "Cars" }); 
      categories.Add(new Category() { ID = 3, Name = "Trucks" }); 

      return categories; 
     } 
    } 

In der Steuerung I MiltiselectItems Füllen und setzen selectedValues ​​dafür

public ActionResult Index() 
    { 
     Category cat=new Category(); 
     cat.CategorySelected.Add(new Category { ID =1, Name = "Bikes" }); 
     cat.CategorySelected.Add(new Category { ID =3, Name = "Trucks" }); 

     var list = Category.GetOptions(); 
     product.Categories = new MultiSelectList(list, "ID", "Name", CategorySelected); 
    } 

In Code anzeigen I

@Html.ListBox("Category", Model.Categories) 
haben

Wenn meine Aktion ausgeführt wird, funktionieren SelectedValues ​​nicht. Was mache ich falsch?

Antwort

10

Der letzte Parameter des MultiSelectList Konstruktors nimmt ein Array von ausgewählten Id ist keine Sammlung von Category komplexen Typen.

Wenn Sie es dies stattdessen ändern wird es wie erwartet:

product.Categories = new MultiSelectList(list, "ID", "Name", cat.CategorySelected.Select(c => c.ID).ToArray()); 

Es einfach Projekte, die sie in ein Array von Id ‚s statt.

Siehe unten Screenshot:

Screen grab

Ps Ich hatte auch die Sammlung dieser an den Konstruktor Category hinzufügen zu initialisieren:

public Category() 
{ 
    CategorySelected = new List<Category>(); 
} 
Verwandte Themen