如何处理错误消息:在此上下文中无法使用会话状态

时间:2013-02-22 04:42:40

标签: c# asp.net

我正在尝试创建一个错误消息页面,以便在发生异常时显示异常,并且错误消息页面上有一个返回按钮,用于返回导致异常的上一页。

这是用于重定向错误页面的代码。

protected void btnAssign_Click(object sender, EventArgs e)
{
    try
    {
        SqlDataSource3.Insert();
    }
    catch (Exception ex)
    {
        Session["Exception"] = ex;
        Response.Redirect("~/ErrorMessage.aspx", false);
    } 
}

这是我的global.asax文件的代码

void Application_Error(object sender, EventArgs e) 
{ 
    // Code that runs when an unhandled error occurs
    Exception ex = Server.GetLastError().InnerException;
    Session["Exception"] = ex;
    Response.Redirect("~/ErrorMessage.aspx");
}

这是errorMessage页面的代码。

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            Exception ex = (Exception)Session["Exception"];
            Session.Remove("Exception");
            Literal1.Text = "<p style='color:blue'><b>An unrecoverable error has occurred:</b></p><br /><p style='color:red'>" + ex.Message + "</p>";
        }  
    }
    protected void btnReturn_Click(object sender, EventArgs e)
    {
        Response.Redirect("~/IncidentAssignment.aspx");
    }

当我单击assign按钮时,它会打开errorMessage页面并显示异常,但是当我单击return按钮时,程序崩溃并指向global.asax文件,并说在此上下文中Session会话状态不可用,如图所示在吹响。 enter image description here

我不明白为什么会话[&#34;例外&#34;]为空。如果有人回答我的问题,我将不胜感激。感谢。

3 个答案:

答案 0 :(得分:6)

您正试图在应用程序错误事件中访问会话状态,其中可能是您​​的会话对象未被初始化。在应用程序的某个其他位置可能会抛出错误,因为它指的是整个应用程序。

通常,当您的错误抛出应用程序初始阶段时会发生这种情况,因此会话对象未被初始化。在Begin_Request事件中。

您可以在访问会话对象之前进行空检查。

if (HttpContext.Current.Session != null) { //do your stuff}

答案 1 :(得分:1)

而不是使用位于:

内的代码行
protected void btnReturn_Click(object sender, EventArgs e)
{
    Response.Redirect("~/IncidentAssignment.aspx");
}

完全摆脱它,并在按钮的HTML代码中添加以下代码:

PostBackUrl="insert your path here"

因此,它会引导您返回您开始的页面。

答案 2 :(得分:0)

在web.config中定义错误页面时, 然后在错误页面中,您可以访问例外:

HttpContext.Current.AllErrors

<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/ErrorPage.aspx">
</customErrors>