我总是使用以下两位代码(用于工作)来捕获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
已使用Exception消息设置,我总是在警报框中的页面中获得相同的错误报告,无论是异常消息是什么,说:
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
事件处理程序方法,则会出现同样的错误。
无论我做什么,我都会得到同样的错误。会导致什么?
答案 0 :(得分:2)
这可能是一个黑暗的镜头,但可能在调用ScriptManager1_AsyncPostBackError
函数后进行全局异常处理。如果该异常处理正在对错误页面执行server.transfer
,那么发回的HTML将无法由脚本管理器解析。
这发生在我的一个网站上,并通过向ScriptManager1_AsyncPostBackError
函数添加Server.ClearError()来解决。这阻止了Global.Application_Error
函数被调用。
答案 1 :(得分: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, "");