2017-08-07 155 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()代碼返回正確的數據在第一位。