SelectedValues在MultiSelectList mvc中不起作用

时间:2014-02-17 10:18:49

标签: c# asp.net asp.net-mvc razor asp.net-mvc-5

我有一个像

这样的课程
 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);
    }

在View Code中我有

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

运行时我的动作SelectedValues不起作用。我做错了什么?

1 个答案:

答案 0 :(得分:11)

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