asp.mvc传递多个列表进行查看

时间:2017-02-27 00:17:36

标签: asp.net-mvc razor model controller

我想知道是否有办法将超过1个列表传递给要渲染的视图。

这是我在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&#34;列表&#34;?

2 个答案:

答案 0 :(得分:0)

创建一个包含每个列表集合的具体视图。

然后为您的每个收藏品使用  @Html.ListboxFor(m => m.YourCollection)

更多信息:https://msdn.microsoft.com/en-us/library/system.web.mvc.html.selectextensions.listboxfor(v=vs.118).aspx

答案 1 :(得分:0)

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