问题
When trying to save an order we first load the object from session. This works. Then we add information to the order and put it back into session. I then receive and Object reference not set to an instance of an object error.
Private Sub SaveOrder()
'load the order
Order = Session("Order")
'Add order information here
Session("Order") = Order 'The error is occurring here.
End Sub
The stack trace is as follows:
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)
Any help with this would be greatly appreciate.
Added requested code:
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
I've added the top of the aspx page (The whole thing is too large).
<%@ 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
回答1:
Your code examples don't show the Page_Load or the exact lines around line 9 of the aspx file, but it sounds like you are assuming that Order will be populated at all times. If you are only loading the Order object in Page_Load during a non-postback, when the user clicks the button, the Order object is not being loaded early enough in the page lifecycle.
Try removing the check for IsPostback and always reload the Order object from the Session.
来源:https://stackoverflow.com/questions/11980307/object-reference-not-set-to-instance-of-an-object-when-saving-to-session