ASP.NET MVC ListBox不显示所选列表项

时间:2017-08-07 16:03:07

标签: asp.net asp.net-mvc listbox

我遇到了大麻烦。我读了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作为当前的解决方案。

1 个答案:

答案 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代码,以便首先返回正确的数据。