4

我一直使用以下两位代码(用于工作)来捕获 Ajax asyncPostBackError

<asp:ScriptManager ID="ScriptManager1" runat="server" OnAsyncPostBackError="ScriptManager1_AsyncPostBackError" />

protected void ScriptManager1_AsyncPostBackError(object sender, AsyncPostBackErrorEventArgs e) 
{ 
ScriptManager1.AsyncPostBackErrorMessage = e.Exception.Message; 
}

但是现在,即使在此事件处理函数中捕获了未处理的异常并AsyncPostBackErrorMessage设置了异常消息,无论异常消息是什么,我总是在页面中的警告框中收到相同的错误报告,说:

Error: Sys.WebForms.PageRequestManagerParserErrorException: The message recieved from the server could not be parsed. Common causes for this error are when the response is modified by calls to the Respnse.Write() ....

asyncPostBack如果您有未处理的异常并且您没有连接Scriptmanger's asyncPostBackError事件处理程序方法,则该错误与您将得到的错误相同。

无论我做什么,我都会得到同样的错误。什么会导致这种情况?

4

2 回答 2

3

这可能是在黑暗中的一枪,但也许全局异常处理是在你的ScriptManager1_AsyncPostBackError函数被调用之后发生的。如果该异常处理正在server.transfer对错误页面进行处理,则脚本管理器将无法解析返回的 HTML。

这发生在我的一个站点上,并通过将 Server.ClearError() 添加到ScriptManager1_AsyncPostBackError函数中来解决。这阻止了Global.Application_Error函数被调用。

于 2012-06-28T22:16:07.520 回答
0

从 VS 2005 升级到 VS 2008 后,我似乎面临同样的问题。我使用以下代码:

if (e.Exception is LandingPageUIExceptionInvalidMSISDN)
{
    msgresolved = "ErrorPopUpInvalidNumber";
    ScriptManager.GetCurrent(Page).AsyncPostBackErrorMessage = msgresolved;
}

为了处理异常并显示正确的错误消息。当AsyncPostBackErrorMessage在 JavaScript 中执行以下命令时,它被正确分配但在客户端:

var ErrorPopUpDivID = e.get_error().message;
alert(ErrorPopUpDivID);

ErrorPopUpDivID不是我分配给的AsyncPostBackErrorMessage。它曾经也为我工作。我会尝试弄清楚它是否可能是 .NET 3.5 问题。

最后,以下 3 行 JavaScript 解决了我的问题:

var ErrorPopUpDivID = e.get_error().message;
var re = new RegExp("Sys.*: ", "g");
ErrorPopUpDivID = ErrorPopUpDivID.replace(re, "");
于 2009-11-16T10:51:55.337 回答