ASP.NET MVC2 отображает 2 списка данных в строго типизированном представлении - PullRequest
0 голосов
/ 16 июня 2011

У меня возникают проблемы с отображением списка данных, в котором содержатся два объекта базы данных.

Мое представление строго типизировано для модели представления, которая включает в себя список клиентов и список сайтов клиентов (каждый из которых хранится в ихсобственный стол).В настоящее время я использую два для каждой статистики для отображения обоих списков, но на самом деле мне нужен один список, который содержит оба объекта, в двух словах, это список сайтов клиентов, который также содержит имена клиентов из таблицы клиентов.

Это моя модель представления

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)** { %>

Спасибо за любой совет, который может предложить любой.

1 Ответ

0 голосов
/ 16 июня 2011

Извините, но ваш вопрос все еще немного расплывчат для меня, но в любом случае кажется, что вам нужна такая структура данных.

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 для списка данных (как вы уже делаете).

...