【问题标题】:asp.mvc passing more than one list to viewasp.mvc 传递多个列表以查看
【发布时间】:2017-02-27 00:17:35
【问题描述】:

我想知道是否有办法将多个列表传递给要呈现的视图。

这是我在 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 个“列表”?

【问题讨论】:

  • 提高了代码的可读性,我想可以改进代码以便更好地理解

标签: asp.net-mvc razor model controller


【解决方案1】:

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

然后为您的每个集合使用 @Html.ListboxFor(m =&gt; m.YourCollection)

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2020-04-11
      • 1970-01-01
      • 1970-01-01
      • 2013-12-05
      • 1970-01-01
      • 1970-01-01
      • 2021-11-08
      • 1970-01-01
      • 2016-07-27
      相关资源
      最近更新 更多