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

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

4

2 回答 2

1

MultiSelectList 构造函数还采用一个 IEnumerable 待选择项目列表,因此如果您将代码更改为:

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

然后,该列表应以选择的所有客户项目开始。

于 2013-04-09T16:24:13.597 回答
1

我通过将第 4 个参数作为 int 或 string 的列表传递来解决,该列表具有对象的唯一键,而不是对象列表。

new MultiSelectList(ViewBag.Customers, "Id", "Name", Model.Customers.Select(c => c.Id))
于 2013-04-10T19:31:52.170 回答