SelectedValues ​​не работает в MultiSelectList mvc

У меня есть класс вроде

 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;
        }
    }

В контроллере я заполняю MiltiselectItems и устанавливаю для него selectedValues ​​

 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);
    }

В режиме просмотра у меня есть

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

при выполнении моего действия SelectedValues ​​не работают. Что я делаю неправильно?

Ответ 1

Последний параметр конструктора MultiSelectList принимает массив выбранных Id, а не набор сложных типов Category.

Если вы измените его на это, он будет работать как ожидалось:

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

Вместо этого он просто превращает его в массив Id.

Смотрите снимок экрана:

Screen grab

Ps Мне также пришлось добавить это к конструктору Category для инициализации коллекции:

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