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,並使用Alert向用戶顯示消息。
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);
}
我希望這會有所幫助。
那麼......沒有人使用.NET 3.5,或者沒有人擔心會出錯? :) – aquinas 2009-09-02 13:14:48