【问题标题】:Object reference not set to instance of an object when saving to session保存到会话时对象引用未设置为对象实例
【发布时间】:2012-08-16 03:23:29
【问题描述】:

当尝试保存订单时,我们首先从会话中加载对象。这行得通。 然后我们将信息添加到订单中并将其放回会话中。 然后我收到对象引用未设置为对象错误的实例。

Private Sub SaveOrder()
    'load the order
    Order = Session("Order")

    'Add order information here

    Session("Order") = Order 'The error is occurring here.
End Sub

堆栈跟踪如下:

    Error Path: Contact.aspx
    Error Detail: Object reference not set to an instance of an object.
    Error Source: Void __RenderContent1(System.Web.UI.HtmlTextWriter, System.Web.UI.Control)
    Error Stack Trace:    at ASP.orderentry_uc3_contact_aspx.__RenderContent1(HtmlTextWriter __w, Control parameterContainer) in C:\Portal Websites\Portals\OrderEntry\UC3\Contact.aspx:line 9
   at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
   at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
   at System.Web.UI.HtmlControls.HtmlForm.RenderChildren(HtmlTextWriter writer)
   at System.Web.UI.HtmlControls.HtmlContainerControl.Render(HtmlTextWriter writer)
   at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
   at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
   at System.Web.UI.Page.Render(HtmlTextWriter writer)
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

对此的任何帮助将不胜感激。

添加了请求的代码:

Imports ComponentArt.Web.UI

Partial Class OrderEntry_UC3_Contact
Inherits Company.Pages.CompanyPage
Public Order As Company.Orders.UC3.Order

Protected Sub btnNext_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnNext.Click
    If Valid() Then
        SaveOrder() 'This is line 9
        Response.Redirect("Payment.aspx")
    End If
End Sub

我已经添加了aspx页面的顶部(整个东西太大了)。

<%@ Page Language="VB" MasterPageFile="~/Portal/PortalNoFooter.master" AutoEventWireup="false"
    EnableTheming="true" CodeFile="Contact.aspx.vb" Inherits="OrderEntry_UC3_Contact"
    Title="Contact" %>

<%@ Register TagPrefix="ComponentArt" Namespace="ComponentArt.Web.UI" Assembly="ComponentArt.Web.UI" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
      //To large to submit the whole thing
</asp:Content>
enter code here

【问题讨论】:

  • 仔细检查您的代码。引用变量Order 可能被分配给Nothing (null)。
  • 你能显示aspx文件顶部的代码吗?请务必至少包含第 9 行,如错误消息中所示。
  • 订单不是什么。否则它会在保存东西(原始对象和复杂对象)时崩溃。
  • 您向我们展示的代码和堆栈跟踪没有加起来。你能把aspx页面也给我们看一下吗?
  • 感谢您添加代码。您使用的是代码隐藏文件还是内联服务器端代码?堆栈跟踪指向渲染事件期间的某些内容,这应该发生在您的按钮事件处理程序之后。我不确定我们是否有足够的信息来提供适当的帮助。你还能给我们什么?

标签: asp.net vb.net session object reference


【解决方案1】:

您的代码示例未显示 Page_Load 或 aspx 文件第 9 行周围的确切行,但听起来您假设 Order 将始终被填充。如果您在非回发期间仅在Page_Load 中加载Order 对象,则当用户单击按钮时,Order 对象在页面生命周期中加载得不够早。

尝试取消对IsPostback 的检查并始终从会话中重新加载Order 对象。

【讨论】:

  • 您也可以根据需要将其从会话中拉出并避免整个问题。
猜你喜欢
  • 2011-06-15
  • 1970-01-01
  • 1970-01-01
  • 2012-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多