5

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

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

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");
    }

当我单击分配按钮时,它会打开 errorMessage 页面并显示异常,但是当我单击返回按钮时,程序崩溃并指向 global.asax 文件并说会话状态在此上下文中不可用,如 blew 所示。 在此处输入图像描述

我不明白为什么 session["exception"] 为空。如果有人回答我的问题,将不胜感激。谢谢。

4

3 回答 3

6

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

这通常发生在您抛出的错误是在您的应用程序初始阶段,因此会话对象没有被初始化。例如。在 Begin_Request 事件中。

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

IE

if (HttpContext.Current.Session != null) { //do your stuff}
于 2013-02-22T04:50:01.513 回答
1

而不是使用位于您的内部的代码行:

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

完全摆脱它,在你的按钮的 HTML 代码中,添加这行代码:

PostBackUrl="insert your path here"

因此,它应该会引导您回到您开始的页面。

于 2013-02-22T04:45:30.680 回答
0

当您在 web.config 中定义错误页面时,您可以在错误页面中访问异常:

HttpContext.Current.AllErrors

<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/ErrorPage.aspx">
</customErrors>
于 2013-08-06T08:25:20.923 回答