ASP.NET MVC列表框不显示选择的列表项目
问题描述:
我在一个很大的麻烦。我读了4个stackoverflow问题和一个blogpost。我尝试了5种不同的方法来查看多个选择列表中的选定项目。ASP.NET MVC列表框不显示选择的列表项目
我没有成功。
将生成多个选择列表,但不会选择这些项目。我没有更多的想法。
型号:
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作为当前的解决方案。
答
您不能将<select multiple>
绑定到复杂对象的集合。它绑定到并返回一组简单值(所选选项的值)。
你SelectedCompanies
财产必须是IEnumerable<int>
(假设的Company
CompanyId
也int
)。注意SelectListItem
的Selected
属性在绑定到属性时会被忽略。
你也使用相同的集合为选定的公司和所有公司的名单,没有任何意义。您的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
和GetEditableModel()
代码返回正确的数据在第一位。
你核实了selectedCompanies中的什么?正因为如此,对我而言,选择公司是空洞的。 – MaCron
@Dabagab你尝试使用ListBox与“Model.SelectListCompanies作为MultiSelectList”我的意思是@ Html.ListBox(“SelectedCompanies”,Model.SelectListCompanies作为MultiSelectList,Model.SelectedCompanies.Select(x => x.CompanyId.ToString() )) – hasan
@MaCron这不是empyt。它有11个项目。我打了它:) – Dabagab