如何在Page_Unload中检测到已经发生了未处理的异常?

时间:2013-05-07 09:28:58

标签: c# asp.net error-handling global-asax

即使发生了未处理的异常,也会调用Page_Unload。我需要处理这种情况。

我有一个变量状态验证,当变量在Page_Unload中没有处于正确状态时抛出异常。该例外稍后由Application_Error中的Global.asax处理。我需要在已经发生另一个异常时禁止抛出异常。

页面:

public partial class _Default : System.Web.UI.Page
{
    private int tst = 0;
    protected void Page_Load(object sender, EventArgs e)
    {
        tst = tst / tst; //causes "Attempted to divide by zero."
        tst = 1;
    }
    protected void Page_Unload(object sender, EventArgs e)
    {
        if (tst == 0) throw new Exception("Exception on unload"); 
    }
}

的Global.asax:

void Application_Error(object sender, EventArgs e)
{
    // Get the error details
    Exception lastErrorWrapper = Server.GetLastError();
    System.Diagnostics.Debug.Print(lastErrorWrapper.Message);
}

我需要在Global.asax“尝试除以零。”但我得到“卸载时出现异常”

给出的例子大大简化了。真实情况包括用户控件和条件编译。

我无法解决Page_Load中的情况(例如通过捕获异常)。

1 个答案:

答案 0 :(得分:0)

为什么不使用像这样的global.asax方法

void Application_Error(object sender, EventArgs e)
        {
            // Code that runs when an unhandled error occurs
            // Get the error details
            Exception lastErrorWrapper = Server.GetLastError();            
            System.Diagnostics.Debug.Print(lastErrorWrapper.Message);
            Response.Redirect("~/error.aspx?q=" + lastErrorWrapper.Message);
        }

然后它不会在这里显示错误,替代是:

在web.config中设置自定义错误页面

<customErrors mode="On" defaultRedirect="mypage.aspx">   
    </customErrors>

此致