我遇到了大麻烦。我读了4个stackoverflow问题和一个博客帖子。我尝试了5种不同的方法来查看多个选择列表中的所选项目。
我没有成功。
生成多个选择列表,但不选择项目。我不知道了。
模型:
public class EditableModel
{
public IList<Company> SelectedCompanies { get; set; }
public IList<SelectListItem> SelectListCompanies { get; set; }
}
控制器:
public ActionResult Edit(int id)
{
var service = _serviceDAL.GetEditableModel(id);
if (service!= null)
{
service.SelectListCompanies = GetSelectListCompanies(service.SelectedCompanies);
return View(service);
}
}
private IList<SelectListItem> GetSelectListCompanies(IList<Company> selectedCompanies)
{
List<SelectListItem> items = new List<SelectListItem>();
foreach (Companycompany in _companyService.GetCompanies())
{
items.Add(new SelectListItem
{
Value = company.CompanyId.ToString(),
Text = company.Name,
Selected = selectedCompanies.Any(x => x.CompanyId == company.CompanyId)
});
}
return items;
}
查看
@Html.ListBox("SelectedCompanies", Model.SelectListCompanies, Model.SelectedCompanies.Select(x => x.CompanyId.ToString()) )
没什么。选择列表中的项目未选中...
我尝试了这个Multiselect,结果相同,或this one作为当前的解决方案。
答案 0 :(得分:1)
您无法将SelectedCompanies
绑定到复杂对象的集合。它绑定并回发一系列简单值(所选选项的值)。
您的IEnumerable<int>
媒体资源必须为CompanyId
(假设Company
的{{1}}也是int
。另请注意,绑定到属性时,Selected
的{{1}}属性将被忽略。
您还使用了所选公司的相同集合以及所有无意义的公司列表。您的SelectListItem
应该来自SelectListCompanies
。
模型
Company
根据您public class MyViewModel
{
public IEnumerable<int> SelectedCompanies { get; set; }
public IEnumerable<SelectListItem> SelectListCompanies { get; set; }
}
的当前代码,您的代码应为
EditableModel
但是,看起来您应该修改public ActionResult Edit(int id)
{
var service = _serviceDAL.GetEditableModel(id);
....
MyViewModel model = new MyViewModel
{
SelectedCompanies = service.SelectedCompanies.Select(x => x.CompanyId),
SelectListCompanies = GetSelectListCompanies()
};
return View(model);
private IEnumerable<SelectListItem> GetSelectListCompanies()
{
var all companies = ... // call method to get all Companies
return companies.Select(x => new SelectListItem
{
Value = x.CompanyId.ToString(),
Text = x.Name
});
}
和EditableModel
代码,以便首先返回正确的数据。