如何从List <myobject> </myobject>中显示多选列表

时间:2013-04-09 16:02:12

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

class User() {
   public List<Customer> Customers;
}

class Customer() {
   public long Id;
   public string Name;
}

我填充所选项目

User MyUser = new User(); 
MyUser.Customers = db.Customers.Where(...).ToList();

我以这种方式传递所有项目的列表

ViewBag.Customers = db.Customers.OrderBy(c => c.Name).ToList();

在我的视图中,我希望将其显示为多选HTML元素,其中所有(ViewBag.Customers)元素和(MyUser.Customers)都已选中。 我试过

@model MySCL.Models.User

@Html.ListBoxFor(m => m.Customers, new MultiSelectList(ViewBag.Customers, "Id", "Name"), new {Multiple = "multiple", size = "5" })

但它只显示完整列表而不选择任何项目。 这是最好的做法吗? 还有另一种更好的方法吗? 如果我有一个字符串列表,我该怎么做呢?而不是客户列表?

2 个答案:

答案 0 :(得分:1)

MultiSelectList constructor还会选择一个IEnumerable项目列表,因此如果您将代码更改为:

new MultiSelectList(ViewBag.Customers, "Id", "Name", Model.Customers)

然后列表应该从所有客户的项目开始。

答案 1 :(得分:1)

我通过传递第4个参数作为int或string的列表来解决,其中包含对象的唯一键而不是对象列表。

new MultiSelectList(ViewBag.Customers, "Id", "Name", Model.Customers.Select(c => c.Id))