我正在尝试创建一个错误消息页面,以便在发生异常时显示异常,并且错误消息页面上有一个返回按钮,用于返回导致异常的上一页。
这是用于重定向错误页面的代码。
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会话状态不可用,如图所示在吹响。
我不明白为什么会话[&#34;例外&#34;]为空。如果有人回答我的问题,我将不胜感激。感谢。
答案 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>