2011-06-16 40 views
0

我在显示包含两个数据库对象的数据列表时遇到困难。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; } 
} 
} 

这是目前使用视图代码IM,客户现场都包含在一个局部视图,这将是理想的,如果我能在局部添加客户名称查看但只有我能制定出如何访问对象的方式是使用两个每个语句

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

} 
} 

有另一种方式来accesss从视图中两个对象,而不对每个statment这样我就可以在两个列表合并在一起在局部视图中。

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

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

回答

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

+0

感谢ive用我的控制器代码更新了上面的内容,它更多地用于在视图中访问这两个对象的语法,即控制器和视图模型正在返回数据 – liam 2011-06-16 14:18:07

+0

如果您喜欢少些冗长的内容,看看Telerik的网格,它很容易使用,并且有一个流畅的绑定语法。您也可以拥有您可能需要的内部网格(针对每个客户)。但是与常规的aspx不同,你不能避免为你想要在MVC中显示的数据手动编写某种html。 – 2011-06-16 14:24:55

+0

净谢谢,我明白,我将需要编写一些即时通讯的HTML,我遇到的问题是从同一视图访问多个表的snytax。 – liam 2011-06-16 15:52:14

相关问题