Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在页面卸载中检测是否已发生未处理的异常?_C#_Asp.net_Error Handling_Global Asax - Fatal编程技术网

C# 如何在页面卸载中检测是否已发生未处理的异常?

C# 如何在页面卸载中检测是否已发生未处理的异常?,c#,asp.net,error-handling,global-asax,C#,Asp.net,Error Handling,Global Asax,即使发生未处理的异常,也会调用Page_Unload。我需要处理这种情况 我有一个变量状态验证,当变量在Page_Unload中的状态不正确时引发异常。该异常稍后由Global.asax中的Application\u Error处理。当另一个异常已经发生时,我需要禁止抛出异常 页面: public partial class _Default : System.Web.UI.Page { private int tst = 0; protected void Page_Load(

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

我有一个变量状态验证,当变量在Page_Unload中的状态不正确时引发异常。该异常稍后由
Global.asax
中的
Application\u Error
处理。当另一个异常已经发生时,我需要禁止抛出异常

页面:

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
中得到“试图除以零”,但我得到的是“卸载时异常”

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


我不允许在
页面加载中解决这种情况(例如通过捕获异常)。

为什么不这样使用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>


关于

我在实际应用中就是这样使用它的。给出的代码只是一个简化的示例。但这并不能解决问题——获取的消息与抛出的消息不同。因此,需要一个更好的示例,最好是使用控件和实际数据/异常@Ivanht。问题要么是抑制页面卸载中的抛出,要么是以某种方式在应用程序错误中获取“前一个异常”。发生的异常未知。如果我知道异常,我会阻止它,而不是显示它。好吧,也许这对你有帮助,另外你是否需要page_unload方法,因为如果是这样的话,你就不会得到“异常原因”,该方法将始终运行,并将重置你从load方法得到的任何异常,如果不使用它,可以在lastErrorWrapper.InnerException中看到异常。希望这能帮助你@IvanHI编辑你的标题。请参阅“”,其中的共识是“不,他们不应该”。