ASP.NET AJAX Extensions 1.0 と ASP.NET AJAX 3.5 では、既定の動作が明らかに変更されました。これは、Sys.WebForms.PageRequestManager のデフォルトの endPostBack イベント ハンドラーを見るとわかります。前のバージョンは Alert を使用してエラーを表示しますが、後者は単にエラーを再スローします。
// 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);
}
これが役立つことを願っています。