ASP.NET MVC2在强类型视图中显示2个数据列表

问题描述

| 我在显示包含两个数据库对象的数据列表时遇到困难。 我的视图严格按照一个视图模型输入,该视图模型包含一个客户列表和一个客户站点列表(每个站点都存储在自己的表中)。我目前为每个语句使用两个来呈现两个列表,但实际上我需要一个包含两个对象的列表,简而言之,它是一个客户站点列表,其中也包含来自客户表的客户名称。 这是我的视图模型
namespace CustomerDatabase.WebUI.Models
{
public class CustomerSitesListViewModel
{
    public IList<CustomerSite> CustomerSites { get; set; }
    public PagingInfo PagingInfo { get; set; }
    public IList<Customer> customers { get; set; }
}
}
这是即时消息当前在视图中使用的代码,客户站点包含在部分视图中,如果我可以在部分视图中添加客户名称,那将是理想的选择,但是我可以确定如何访问两个对象的唯一方法是每个语句使用两个
<%@ Page Title=\"\" Language=\"C#\" MasterPageFile=\"~/Views/Shared/Site.Master\"   Inherits=\"System.Web.Mvc.ViewPage<CustomerDatabase.WebUI.Models.CustomerSitesListViewModel>    \" %>
<% foreach (var customer in Model.customers) { %>
<%:customer.CustomerName%></li>
<%} %>
<% foreach (var customerSite in Model.CustomerSites) { %>
<% Html.RenderPartial(\"CustomerSiteSummary\",customerSite); %>
<%} %>
这是我的部分观点
<%@ Control Language=\"C#\"   Inherits=\"System.Web.Mvc.ViewUserControl<CustomerDatabase.Domain.Entities.CustomerSite>\" %>
<div class=\"item\">
<div class=\"customer-list-item\">
<%: Model.AddressLine1%>
<%: Model.AddressLine2%>
<%: Model.AddressLine3%>
<%: Model.Town%>
<%: Model.County%>
<%: Model.Postcode%>
<%: Model.ContactName%>
<%: Model.ContactNo%>
<%: Model.ContactEmail%>
    这是我的控制器代码,它设置了两个列表
public ViewResult List([DefaultValue(1)] int page)
    {
        var customerSitesToShow = customerSiteRepository.CustomerSites;
        var customersToShow = customerRepository.Customers;
        var viewModel = new CustomerSitesListViewModel
        {

            CustomerSites = customerSitesToShow.Skip((page - 1) *   PageSize).Take(PageSize).ToList(),customers = customersToShow.Skip((page - 1) * PageSize).Take(PageSize).ToList(),PagingInfo = new PagingInfo
            {
                CurrentPage = page,ItemsPerPage = PageSize,TotalItems = customerSitesToShow.Count()
            }
        };

        return View(viewModel);  //Passed to view as ViewData.Model (or simply model)
    }

}
}
有没有一种方法可以从视图访问两个对象而无需为每个语句使用,因此我可以在局部视图中将两个列表合并在一起。
<% foreach **(var customer in Model.customers)** { %>
感谢您提供任何可能提供的建议。     

解决方法

        抱歉,您的问题对我来说仍然有点模糊,但是无论如何,似乎您想要这样的数据结构。
namespace CustomerDatabase.WebUI.Models
{
public class CustomerSitesListViewModel
{    
    public PagingInfo PagingInfo { get; set; }
    public IList<Customer> customers { get; set; }
}
public class Custmoer
{
     public IList<CustomerSite> CustomerSites { get; set; }
     //other customer properties
}
}
您可以轻松地在控制器中构建这种视图模型,然后像这样调整视图。您也可以使用网格或使用foreach循环构建网格以获取数据列表(就像您已经在做的那样)。     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...