2017-02-27 49 views
0

我想知道是否有一种方法可以将多个列表传递给一个视图来呈现。asp.mvc传递多个列表来查看

这是我在把PeopleController

public ActionResult Index() 
{ 
    EmployeeContext db = new EmployeeContext(); 

    //Sites 
    List<SelectListItem> listSelectListItem = new List<SelectListItem>(); 

    foreach (Sites loc in db.Locations) 
    { 
     SelectListItem selectListItem = new SelectListItem() 
     { 
      Text = loc.HRSite, 
      Value = loc.HRSite 
     }; 
     listSelectListItem.Add(selectListItem); 
    } 

    SiteViewModel siteViewModel = new SiteViewModel(); 
    siteViewModel.Sites = listSelectListItem; 

    //Cost Centers 
    List<SelectListItem> listSelectListItem2 = new List<SelectListItem>(); 

    foreach (CostCenter cc in db.CostCenterNumbers) 
    { 
     SelectListItem selectListItem = new SelectListItem() 
     { 
      Text = cc.CostCenterNumber, 
      Value = cc.CostCenterNumber 
     }; 
     listSelectListItem2.Add(selectListItem); 
    } 

    CCViewModel ccViewModel = new CCViewModel(); 
    ccViewModel.CostCenter = listSelectListItem2; 

    List<object> myModel = new List<object>(); 
    myModel.Add(siteViewModel); 
    myModel.Add(ccViewModel); 

    return View(myModel); 

下面的代码是我的看法:

@model IEnumerable<object> 
@{ 
    List<MVCDemo.Models.CostCenter> lstCostCenter = Model.ToList()[0] as List<MVCDemo.Models.CostCenter>; 
    List<MVCDemo.Models.Sites> lstLocation = Model.ToList()[1] as List<MVCDemo.Models.Sites>; 

} 

<h3>Cost Center</h3> 
<ul> 
    @foreach (var item in lstCostCenter) 
    { 
     <li>@item.CostCenterNumber</li> 
    } 
</ul> 
<hr /> 
<h3>Site</h3> 
<ul> 
    @foreach (var item in lstLocation) 
    { 
     <li>@item.HRSite</li> 
    } 
</ul> 

我怎样才能改变含有2个列表框,而不是2 “名单” 的观点?

+0

改进的代码可读性,我猜测代码可以改进以更好地理解 –

回答

0

我建议创建一个ViewModel来保存数据。简单地传递“对象”更方便。它有很多好处,其中一个就是你可以在剃刀中使用强类型的html助手。 然后您可以使用@ Html.ListboxFor作为suggested by dan m