2

使用一些具有大量 UpdatePanel 的遗留代码。我们遇到了一些对 UpdatePanels 的回发超时(超过默认的 90 秒限制)的问题,我想知道这种情况何时发生。

我们目前正在 Global.asax.cs::Application_Error 中记录所有未处理的异常。如果我在更新面板的回发中手动输入错误,则可以很好地捕获。如果我加入 Thread.Sleep(100 * 1000),我将在 Application_Error中看不到任何内容,但在客户端上我会看到:

Uncaught Sys.WebForms.PageRequestManagerServerErrorException: 
    Sys.WebForms.PageRequestManagerServerErrorException: 
        An unknown error occurred while processing the request on the server. 
        The status code returned from the server was: 500

据我所知,是服务器层抛出错误,而不是应用程序本身,所以我们永远不会看到任何命中 Application_Error 的东西。那是对的吗?

此外,除了在客户端注意到它,然后再执行另一个 POST 操作以记录它之外,是否有任何选项可以实际捕获/记录此错误?

4

1 回答 1

0

我知道你有两种方法:

Server-side:
protected void ScriptManager1_AsyncPostBackError(object sender, AsyncPostBackErrorEventArgs e)  
{
    ScriptManager1.AsyncPostBackErrorMessage = "An error occurred during the request: " + e.Exception.Message; 
}

Client-side:
<script type="text/javascript">
    // Subscribe to the end request event of the update panel
    function pageLoad()  {
        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(onEndRequest);  
    }

    // You can of course have this emit the error information to whatever control you want, I made up the Label1 object for demonstration purposes
    function onEndRequest(sender, args)  {
        var lbl = document.getElementById("Label1");
        lbl.innerHTML = args.get_error().message;
        args.set_errorHandled(true);
    }
</script>

这是一些文档:

自定义 ASP.NET UpdatePanel 控件的错误处理

ASP.NET UpdatePanel 的错误处理自定义

于 2013-06-27T19:56:49.010 回答