Мне нужен совет о том, как лучше всего получить доступ к двум таблицам базы данных из одного частичного представления.
У меня есть модель представления, которая включает два списка объектов, клиентов и сайтов клиентов,
public class CustomerSitesListViewModel
{
public IList<CustomerSite> CustomerSites { get; set; }
public PagingInfo PagingInfo { get; set; }
public IList<Customer> customers { get; set; }
}
У меня есть частичное представление, которое наследует модель представления
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<CustomerDatabase.WebUI.Models.CustomerSitesListViewModel>" %>
<ul id="list-of-sites">
<li><%: Model.AddressLine1 %></li>
<li><%: Model.AddressLine2%></li>
<li><%: Model.AddressLine3%></li>
Тогда у меня есть для каждого цикла в главном представлении, которое вставляет частичное представление
<% foreach (var customerSite in Model.CustomerSites) { %>
<% %>
<% Html.RenderPartial("CustomerSiteSummary", customerSite); %>
<%} %>
Теперь в частичном представлении идентификатора хотелось бы иметь возможность доступа к свойствам для обоих объектов, как для клиента, так и для сайта клиента, я думал, что смогу получить к ним доступ таким образом
<%Html.DisplayFor(modelItem => Model.customers.CustomerName)%>
<%Html.DisplayFor(modelItem => Model.CustomerSite.AddressLine1)%>
Однако самое дальнее, что я могу получить, это
Model.customers
Есть ли в любом случае доступ к свойствам клиентов, т. Е. Клиентам. Имя клиента,
Это один из аспектов MVC, который я действительно не понимаю, я застрял с этим уже более недели, буду признателен за любой совет, который кто-либо может предложить.
Привет
Ли
Обновление =======
Я добавил следующие модели просмотра
Модель просмотра клиента
public class CustomerViewModel
{
public int Id { get; set; }
public string CustomerName { get; set; }
public string PrimaryContactName { get; set; }
public string PrimaryContactNo { get; set; }
public SiteViewModel Site { get; set; }
}
Модель просмотра сайта
public class SiteViewModel
{
public int Id { get; set; }
public int CustomerId { get; set; }
public string AddressLine1 { get; set; }
public string AddressLine2 { get; set; }
}
Мастер модель просмотра
public class CustomerSitesListViewModel
{
public IList<CustomerSite> CustomerSites { get; set; }
public PagingInfo PagingInfo { get; set; }
public IList<Customer> customers { get; set; }
public IEnumerable<CustomerViewModel> Customers { get; set; }
}
Я строго ввел представление в CustomerSitesListViewModel
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<CustomerDatabase.WebUI.Models.CustomerSitesListViewModel>" %>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Customer Sites</h2>
<%= Html.DisplayFor(x => x.Customers) %>
<div class="pager">
<%: Html.PageLinks(Model.PagingInfo, x => Url.Action("List", "CustomerSites", new { page = x }))%>
Я добавил шаблон в Views Shared / DisplayTemplates
CustomerSitesListViewModel.ascx
<%= Html.DisplayFor(x => x.Customers.) %>
Это по-прежнему не позволяет мне получить доступ к свойствам, я могу получить доступ как к объектам клиентов, так и к объектам клиентов, но не к свойствам, поэтому дальше всего меня отпустят x.Customers или x.CustomerSites
Это мой контроллер, который возвращает два списка клиентов и сайтов
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
Можете ли вы дать совет, где я иду не так?
Большое спасибо
Ли