2017-08-07 152 views
1

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

+0

你核实了selectedCompanies中的什么?正因为如此,对我而言,选择公司是空洞的。 – MaCron

+0

@Dabagab你尝试使用ListBox与“Model.SelectListCompanies作为MultiSelectList”我的意思是@ Html.ListBox(“SelectedCompanies”,Model.SelectListCompanies作为MultiSelectList,Model.SelectedCompanies.Select(x => x.CompanyId.ToString() )) – hasan

+0

@MaCron这不是empyt。它有11个项目。我打了它:) – Dabagab

回答

1

您不能将<select multiple>绑定到复杂对象的集合。它绑定到并返回一组简单值(所选选项的值)。

SelectedCompanies财产必须是IEnumerable<int>(假设的CompanyCompanyIdint)。注意SelectListItemSelected属性在绑定到属性时会被忽略。

你也使用相同的集合为选定的公司和所有公司的名单,没有任何意义。您的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 
    }); 
} 

但是,它看起来像你应该修改你的EditableModelGetEditableModel()代码返回正确的数据在第一位。