【问题标题】:ASP.NET MVC2 displaying 2 lists of data in a strongly typed viewASP.NET MVC2 在强类型视图中显示 2 个数据列表
【发布时间】:2011-09-16 10:06:15
【问题描述】:

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

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

这是我的视图模型

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

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

【问题讨论】:

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


    【解决方案1】:

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

    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 循环的网格(就像您已经在做的那样)。

    【讨论】:

    • 感谢我用我的控制器代码更新了上面的内容,它更多的是访问我坚持的视图中的两个对象的语法,控制器和视图模型正在返回数据
    • 如果你喜欢不那么冗长的东西,那么你可以看看 Telerik 网格,它易于使用并且具有流畅的绑定语法。您还可以拥有您可能需要的内部网格(针对每个客户)。但与常规的 aspx 不同,您无法避免必须为要在 MVC 中显示的数据手动编写某种 html。
    • 谢谢,我知道我需要编写一些我很好的 HTML,我遇到的问题是从同一个视图访问多个表的语法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多