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

时间:2011-06-16 14:03:01

标签: asp.net-mvc-2 list ienumerable

我在显示包含两个数据库对象的数据列表时遇到了困难。

我的视图很强大,可以输入一个视图模型,其中包括一个客户列表和一个客户站点列表(每个站点都存储在他们自己的表中)。我目前使用两个每个语句来呈现两个列表,但实际上我需要一个包含两个对象的列表,简而言之它是​​一个客户站点列表,其中还包含来自customer表的客户名称。

这是我的viewmodel

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)
    }

}
}

是否有另一种方法可以从视图中访问两个对象而不使用for each statment,因此我可以在局部视图中将两个列表合并在一起。

<% foreach **(var customer in Model.customers)** { %>

感谢任何人提供的任何建议。

1 个答案:

答案 0 :(得分:0)

很抱歉,但您的问题对我来说仍然有点模糊,但无论如何,您似乎想要一些像这样的数据结构。

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循环构建一个数据列表(就像您已经在做的那样)。