【发布时间】:2011-06-17 09:21:57
【问题描述】:
我正在寻找一些关于从一个局部视图访问两个数据库表的最佳方法的建议。
我有一个包含两个对象列表的视图模型,客户和客户站点,
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>
然后我在插入局部视图的主视图中有一个 for each 循环
<% foreach (var customerSite in Model.CustomerSites) { %>
<% %>
<% Html.RenderPartial("CustomerSiteSummary", customerSite); %>
<%} %>
现在在部分视图 id 中,我希望能够访问客户和客户站点的对象的属性,我想我可以像这样访问它们
<%Html.DisplayFor(modelItem => Model.customers.CustomerName)%>
<%Html.DisplayFor(modelItem => Model.CustomerSite.AddressLine1)%>
但是我能走的最远的是
Model.customers
是否可以访问客户属性,即customers.CustomerName,
这是 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
你能就我哪里出错提供任何建议吗?
非常感谢
利亚姆
【问题讨论】:
标签: asp.net-mvc-2 list viewmodel