使用一些具有大量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操作来记录它之外,还有什么选项可以用来实际捕获/记录这个错误吗?
我知道有两种方法:
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 的错误处理自定义