ScriptManager1.AsyncPostBackErrorMessage未显示错误消息

时间:2009-11-04 05:46:05

标签: asp.net scriptmanager pagerequestmanager asyncpostbackerror

我总是使用以下两位代码(用于工作)来捕获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事件处理程序方法,则会出现同样的错误。

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

2 个答案:

答案 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, "");