ASP.NET AJAX Extensions 1.0 和 ASP.NET AJAX 3.5 中的默认行为肯定发生了变化。这可以通过查看 Sys.WebForms.PageRequestManager 的默认 endPostBack 事件处理程序来看出。前一个版本使用警报显示错误,而后一个版本只是重新抛出错误。
// ASP.NET AJAX Extensions 1.0
function Sys$WebForms$PageRequestManager$_endPostBack(error, response) {
this._processingRequest = false;
this._request = null;
this._additionalInput = null;
var handler = this._get_eventHandlerList().getHandler("endRequest");
var errorHandled = false;
if (handler) {
var eventArgs = new Sys.WebForms.EndRequestEventArgs(error, this._dataItems, response);
handler(this, eventArgs);
errorHandled = eventArgs.get_errorHandled();
}
this._dataItems = null;
if (error && !errorHandled) {
alert(error.message);
}
}
// ASP.NET 3.5
function Sys$WebForms$PageRequestManager$_endPostBack(error, executor, data) {
if (this._request === executor.get_webRequest()) {
this._processingRequest = false;
this._additionalInput = null;
this._request = null;
}
var handler = this._get_eventHandlerList().getHandler("endRequest");
var errorHandled = false;
if (handler) {
var eventArgs = new Sys.WebForms.EndRequestEventArgs(error, data ? data.dataItems : {}, executor);
handler(this, eventArgs);
errorHandled = eventArgs.get_errorHandled();
}
if (error && !errorHandled) {
throw error;
}
}
如果您希望警报出现在您的 ASP.NET AJAX 3.5 代码中,您只需进行一些小的更改。
首先,您需要为 ScriptManager 的 AsyncPostBackError 事件添加一个处理程序,然后设置 AsyncPostBackErrorMessage。
protected void ScriptManager1_AsyncPostBackError(object sender, AsyncPostBackErrorEventArgs e)
{
ScriptManager1.AsyncPostBackErrorMessage = e.Exception.Message;
}
然后您需要为客户端 PageRequestManager 的 endRequest 事件添加一个处理程序。在那里,您可以获得在服务器端设置的 AsyncPostBackErrorMessage 并使用警报向用户显示消息。
function pageLoad()
{
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(onEndRequest);
}
function onEndRequest(sender, args)
{
var msg = args.get_error().message;
alert(msg);
args.set_errorHandled(true);
}
我希望这有帮助。