【问题标题】:ASP.net MVC2 Passing data between strongly typed viewsASP.net MVC2 在强类型视图之间传递数据
【发布时间】:2011-06-15 15:46:17
【问题描述】:

我有以下 MVC2 视图,它使用视图模型进行强类型化,视图模型包含一个数据库表中的值列表,我需要在视图中显示第二个表中的单个值,这是我的视图代码

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"   Inherits="System.Web.Mvc.ViewPage<CustomerDatabase.WebUI.Models.CustomerSitesListViewModel>    " %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Customer Sites
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<% foreach (var customerSite in Model.CustomerSites) { %>
<% Html.RenderPartial("CustomerSiteSummary", customerSite); %>
<%} %>
</asp:Content>

这是视图模型,请注意我在视图模型中包含了一个客户成员,因为除了客户站点列表之外,我还想显示客户名称

namespace CustomerDatabase.WebUI.Models
{
public class CustomerSitesListViewModel
{
    public IList<CustomerSite> CustomerSites { get; set; }
    public PagingInfo PagingInfo { get; set; }
    public Customer customer { get; set; }
}
}

这是我的视图控制器代码

 public ViewResult List([DefaultValue(1)] int page)
    {
        var customerSitesToShow = customerSiteRepository.CustomerSites;
        var viewModel = new CustomerSitesListViewModel
        {
            CustomerSites = customerSitesToShow.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)
    }

这是我渲染列表的局部视图,

<%@ Control Language="C#"    Inherits="System.Web.Mvc.ViewUserControl<CustomerDatabase.Domain.Entities.CustomerSite>" %>
<div class="item">
<div class="customer-list-item">
<h2><%:Model.customer.CustomerName%></h2>
<%: Model.AddressLine1 %> 
<%: Model.AddressLine2%>

虽然智能感知允许我使用

从视图中访问客户对象
<h2><%:Model.customer.CustomerName%></h2>

当我导航到视图时引发错误,

对象引用未设置为对象的实例。 源错误:

Line 7:   <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
Line 8:   <% foreach (var customerSite in Model.CustomerSites) { %>
Line 9:   <%:Model.customer.CustomerName%>
Line 10:  <% Html.RenderPartial("CustomerSiteSummary", customerSite); %>
Line 11:  <%} 

我认为错误是由于视图呈现列表,我尝试将 viewmodel 成员更改为

 public IList<Customer> {get; set;}

但这也不起作用。

谁能建议我可以实现这一目标的方法或提供任何关于我哪里出错的建议这是一个我在下班后或在 Internet 上研究后无法解决的问题?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-2 strongly-typed-view


    【解决方案1】:

    看起来模型属性之一未初始化。如果您在该行添加断点并检查变量,我很确定您会找到 1 即 null

    【讨论】:

    • 是的,您是正确的,客户对象返回 null,现在只需要找出原因。
    • 如果是这种情况,则必须是您的存储库代码未填充 .Customer 属性。看看:var customerSitesToShow = customerSiteRepository.CustomerSites;
    • 谢谢,我现在设法用客户姓名列表填充客户对象,我现在遇到的问题是我有两个要在视图中显示的列表,一个是客户姓名列表,另一个是其他网站详细信息列表,我真正需要的是包含客户名称和网站详细信息的列表。
    • 能否用问题和当前输出更新原始问题?您在上面发布的代码应该输出 1 个名称列表,后跟 2 个地址字段。
    • 感谢您的快速响应,我在这里描述了这个问题stackoverflow.com/questions/6373170/…
    猜你喜欢
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多