AJAX クライアント ライフ サイクル イベント

更新 : 2007 年 11 月

AJAX 対応の ASP.NET ページでは、ASP.NET 2.0 Web ページと同じサーバー ライフ サイクル イベントが発生するだけでなく、クライアント ライフ サイクル イベントも発生します。クライアント イベントを使用すると、ポストバックと非同期ポストバックの両方の UI をカスタマイズできます (部分ページ更新)。クライアント イベントにより、ブラウザ内のページの有効期間中にカスタム スクリプト コンポーネントを管理することもできます。

クライアント イベントは、Microsoft AJAX Library 内のクラスによって発生します。ページに ASP.NET AJAX サーバー コントロールが含まれている場合、これらのクラスは自動的にインスタンス化されます。クライアント クラスが提供する API により、イベントにバインドし、そのイベントのハンドラを提供できます。Microsoft AJAX Library はブラウザに依存しないため、ハンドラ用に作成するコードは、サポート対象のすべてのブラウザで同じように機能します。

最初の要求 (GET 要求) と同期ポストバックのキー イベントは、Application インスタンスの load イベントです。load イベント ハンドラ内のスクリプトを実行すると、すべてのスクリプトとコンポーネントが読み込まれ、使用できるようになります。UpdatePanel コントロールを使用した部分ページ レンダリングを有効にすると、キー クライアント イベントは PageRequestManager クラスのイベントになります。これらのイベントにより、多数の一般的なシナリオを処理できます。たとえば、ポストバックのキャンセル、ポストバックの優先順位の設定、コンテンツが更新されたときの UpdatePanel コントロールのアニメーション化などの機能があります。

クライアント イベントは、ページを作成する場合、またはコンポーネントを記述する場合に便利です。ページ開発者の場合、ブラウザでページを読み込んでアンロードするときに呼び出されるカスタム スクリプトを提供できます。

サーバー ライフ サイクル イベントの詳細については、「ASP.NET ページのライフ サイクルの概要」を参照してください。

クライアント クラス

ASP.NET AJAX Web ページのクライアント ライフ サイクル中にイベントを発生させる 2 つのメイン Microsoft AJAX Library クラスは、Application クラスと PageRequestManager クラスです。

Application クラスは、ページに ScriptManager コントロールが含まれる場合、ブラウザでインスタンス化されます。Application クラスは Page サーバー コントロールに似ています。このサーバー コントロールは Control クラスから派生しますが、サーバー イベントを発生させるための追加機能を提供します。同様に、Application クラスは Sys.Component クラスから派生しますが、ユーザーが処理できるクライアント ライフ サイクル イベントを発生させます。

ページに ScriptManager コントロールと 1 つ以上の UpdatePanel コントロールが含まれる場合、そのページは部分ページ更新を実行できます (部分ページ レンダリングが有効で、ブラウザでサポートされている場合)。その場合、PageRequestManager クラスのインスタンスはブラウザで自動的に有効になります。PageRequestManager クラスは、非同期ポストバックに固有のクライアント イベントを発生させます。部分ページ レンダリングの詳細については、「部分ページ レンダリングの概要」を参照してください。

クライアント イベントのハンドラの追加

Application クラスと PageRequestManager クラスによって発生したイベントのハンドラを追加または削除するには、そのクラスの add_eventname メソッドと remove_eventname メソッドを使用します。Application オブジェクトの init イベントに MyLoad というハンドラを追加する方法の例を次に示します。

Sys.Application.add_init(MyInit);
function MyInit(sender) {
}
Sys.Appplication.remove_init(MyInit);
Sys.Application.add_init(MyInit);
function MyInit(sender) {
}
Sys.Appplication.remove_init(MyInit);
Bb386417.alert_note(ja-jp,VS.90).gifメモ :

この例は、add_eventname メソッドと remove_eventname メソッドの構文だけを示しています。特定のイベントを使用して実行できる処理の詳細については、このトピックの後半で説明します。

アプリケーションの load イベントと unload イベントの処理

Application オブジェクトの load イベントと unload イベントを処理する場合、ハンドラを明示的にイベントにバインドする必要はありません。その代わりに、予約名 pageLoad と pageUnload を使用する関数を作成します。この方法を使用して Application オブジェクトの load イベントのハンドラを追加する方法の例を次に示します。

function pageLoad(sender, args) {
}
function pageLoad(sender, args) {
}

その他のクライアント クラスのイベント

ここでは、Application クラスと PageRequestManager クラスによって発生するイベントについてのみ説明します。Microsoft AJAX Library にも、DOM 要素イベントのハンドラを追加、消去、および削除するためのクラスがあります。次のようなクラスがあります。

DOM エレメントによって発生するイベントについては、このトピックでは説明しません。

Application クラスと PageRequestManager クラスのクライアント イベント

AJAX ASP.NET 対応のページで処理できる Application クラスと PageRequestManager クラスのクライアント イベントを次の表に示します。イベントが発生する順序については、このトピックの後半で説明します。

イベント

説明

Sys.Application.init イベント

すべてのスクリプトが読み込まれた後、オブジェクトが作成される前に発生します。コンポーネントを記述している場合、init イベントにより、ページにコンポーネントを追加するためのライフ サイクル内のポイントが提示されます。これにより、後続のページ ライフル サイクルで、他のコンポーネントまたはスクリプトがコンポーネントを使用できます。ページ開発者の場合、ほとんどのシナリオでは、init イベントではなく load イベントを使用する必要があります。

init イベントは、ページが最初にレンダリングされたときに 1 回だけ発生します。後続の部分ページ更新では、init イベントは発生しません。

Sys.Application.load イベント

すべてのスクリプトが読み込まれ、$create を使用して作成されたアプリケーション内のすべてのオブジェクトが初期化された後に発生します。load イベントは、非同期ポストバックを含むサーバーへのすべてのポストバックに対して発生します。

ページ開発者の場合、pageLoad という名前の関数を作成できます。この関数は、load イベントにハンドラを自動的に提供します。pageLoad ハンドラは、add_load メソッドによって load イベントに追加されたハンドラの後に呼び出されます。

load イベントは、Sys.ApplicationLoadEventArgs オブジェクトである eventargs パラメータを使用します。イベント引数を使用すると、部分ページ更新の結果としてページが更新されるかどうか、および前の load イベントの発生後に作成されたコンポーネントを確認できます。

Sys.Application.unload イベント

すべてのオブジェクトが破棄される前、およびブラウザ ウィンドウの window.unload イベントが発生する前に発生します。

ページ開発者の場合、pageUnload という名前の関数を作成できます。この関数は、unload イベントにハンドラを自動的に提供します。pageUnload イベントは、ページがブラウザからアンロードされる直前に呼び出されます。このイベント中に、コードが保持しているリソースを解放する必要があります。

Sys.Component.propertyChanged イベント

コンポーネントのプロパティが変更されたときに発生する可能性があります。このイベントが発生するのは、コンポーネント開発者がプロパティの set アクセサで Sys.Component.raisePropertyChange メソッドを呼び出した場合だけです。詳細については、「カスタム コンポーネント プロパティの定義と PropertyChanged イベントの発生」を参照してください。

propertyChanged イベントは、Sys.applicationLoadEventArgs オブジェクトである eventargs パラメータを使用します。

Sys.Component.disposing イベント

Application インスタンスが破棄されたときに発生します。

Sys.WebForms.PageRequestManager の initializeRequest イベント

非同期要求が開始される前に発生します。このイベントを使用すると、別の非同期ポストバックを優先するなど、ポストバックをキャンセルできます。

initializeRequest イベントは、Sys.WebForms.InitializeRequestEventArgs オブジェクトである eventargs パラメータを使用します。このオブジェクトにより、ポストバックの原因となった要素と基の要求オブジェクトが使用できるようになります。InitializeRequestEventArgscancel プロパティを公開します。cancel を true に設定すると、新しいポストバックがキャンセルされます。

Sys.WebForms.PageRequestManager の beginRequest イベント

非同期ポストバックが開始され、ポストバックがサーバーに送信される前に発生します。既に処理中のポストバックがある場合は停止されます (abortPostBack メソッドを使用)。このイベントを使用して、要求ヘッダーを設定したり、要求が処理中であることを示すページでアニメーションを開始したりできます。

beginRequest イベントは、Sys.WebForms.BeginRequestEventArgs オブジェクトである eventargs パラメータを使用します。このオブジェクトにより、ポストバックの原因となった要素と基の要求オブジェクトが使用できるようになります。

Sys.WebForms.PageRequestManager の pageLoading イベント

サーバーから非同期ポストバックへの応答が受信された後、ページ上のコンテンツが更新される前に発生します。このイベントを使用すると、更新されたコンテンツにカスタム遷移効果を適用できます。

pageLoading イベントは、Sys.WebForms.PageLoadingEventArgs オブジェクトである eventargs パラメータを使用します。このオブジェクトにより、最新の非同期ポストバックの結果として削除および更新されるパネルに関する情報が使用できるようになります。

Sys.WebForms.PageRequestManager の pageLoaded イベント

同期または非同期ポストバックの結果として、ページ上のすべてのコンテンツが更新された後に発生します。同期ポストバックではパネルが作成されるだけですが、非同期ポストバックではパネルが作成および更新されます。このイベントを使用すると、更新されたコンテンツのカスタム遷移効果を管理できます。

pageLoaded イベントは、Sys.WebForms.PageLoadedEventArgs オブジェクトである eventargs パラメータを使用します。このオブジェクトにより、最新のポストバックで更新および作成されたパネルに関する情報が使用できるようになります。

Sys.WebForms.PageRequestManager の endRequest イベント

非同期ポストバックに対する応答が処理されページが更新された後、または応答の処理中 (エラーがある場合) に発生します。エラーが発生すると、ページは更新されません。このイベントを使用して、ユーザーへのカスタマイズされたエラー通知の提供、またはエラーの記録を行います。

endRequest イベントは、Sys.WebForms.EndRequestEventArgs オブジェクトである eventargs パラメータを使用します。このオブジェクトにより、発生したエラーおよびエラーが処理されたかどうかに関する情報が使用できるようになります。応答オブジェクトも使用できるようになります。

イベント順序の例

入れ子関係にある 2 つの UpdatePanel コントロールを含むページで発生したクライアント イベントの例を次に示します。親パネル内のボタンをクリックしたときと、入れ子になったパネル内のボタンをクリックしたときの違いがわかります。親パネル内のボタンをクリックすると、親パネルが更新され、入れ子になったパネルが削除および再作成されます。入れ子になったパネル内のボタンをクリックすると、入れ子になったパネルだけが更新されます。

<%@ Page Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Client Event Example</title>
    <style type="text/css">
    #OuterPanel { width: 600px; height: 200px; border: 2px solid blue; }
    #NestedPanel { width: 596px; height: 60px; border: 2px solid green; 
                   margin-left:5 px; margin-right:5px; margin-bottom:5px;}
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        <Scripts>
           <asp:ScriptReference Path="ClientEventTest.js" />
        </Scripts>
        </asp:ScriptManager>
        <asp:UpdatePanel ID="OuterPanel" UpdateMode="Conditional" runat="server">
        <ContentTemplate>
            Postbacks from inside the outer panel and inner panel are
            asynchronous postbacks. PRM = Sys.WebForms.PageRequestManager. APP = Sys.Application.
            <br /><br />
            <asp:Button ID="OPButton1" Text="Outer Panel Button" runat="server" />
            Last updated on
            <%= DateTime.Now.ToString() %>
            <br /><br />

            <asp:UpdatePanel ID="NestedPanel" UpdateMode="Conditional" runat="server">
            <ContentTemplate>
                <asp:Button ID="NPButton1" Text="Nested Panel 1 Button" runat="server" />
                Last updated on
                <%= DateTime.Now.ToString() %>
                <br />
            </ContentTemplate>
            </asp:UpdatePanel>
        </ContentTemplate>
        </asp:UpdatePanel>

        <input type="button" onclick="Clear();" value="Clear" />

        <asp:Button ID="FullPostBack" runat="server" Text="Full Postback" />
        <a href="https://www.microsoft.com">Test Window Unload</a>
        <br />
        <span id="ClientEvents"></span>    
    </div>
    </form>
</body>
</html>
<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Client Event Example</title>
    <style type="text/css">
    #OuterPanel { width: 600px; height: 200px; border: 2px solid blue; }
    #NestedPanel { width: 596px; height: 60px; border: 2px solid green; 
                   margin-left:5 px; margin-right:5px; margin-bottom:5px;}
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        <Scripts>
           <asp:ScriptReference Path="ClientEventTest.js" />
        </Scripts>
        </asp:ScriptManager>
        <asp:UpdatePanel ID="OuterPanel" UpdateMode="Conditional" runat="server">
        <ContentTemplate>
            Postbacks from inside the outer panel and inner panel are
            asynchronous postbacks. PRM = Sys.WebForms.PageRequestManager. APP = Sys.Application.

            <br /><br />
            <asp:Button ID="OPButton1" Text="Outer Panel Button" runat="server" />
            Last updated on
            <%= DateTime.Now.ToString() %>
            <br /><br />

            <asp:UpdatePanel ID="NestedPanel" UpdateMode="Conditional" runat="server">
            <ContentTemplate>
                <asp:Button ID="NPButton1" Text="Nested Panel 1 Button" runat="server" />
                Last updated on
                <%= DateTime.Now.ToString() %>
                <br />
            </ContentTemplate>
            </asp:UpdatePanel>
        </ContentTemplate>
        </asp:UpdatePanel>

        <input type="button" onclick="Clear();" value="Clear" />

        <asp:Button ID="FullPostBack" runat="server" Text="Full Postback" />
        <a href="https://www.microsoft.com">Test Window Unload</a>
        <br />
        <span id="ClientEvents"></span>    
    </div>
    </form>
</body>
</html>
// Hook up Application event handlers.
var app = Sys.Application;
app.add_load(ApplicationLoad);
app.add_init(ApplicationInit);
app.add_disposing(ApplicationDisposing);
app.add_unload(ApplicationUnload);


// Application event handlers for component developers.
function ApplicationInit(sender) {
  var prm = Sys.WebForms.PageRequestManager.getInstance();
  if (!prm.get_isInAsyncPostBack())
  {
      prm.add_initializeRequest(InitializeRequest);
      prm.add_beginRequest(BeginRequest);
      prm.add_pageLoading(PageLoading);
      prm.add_pageLoaded(PageLoaded);
      prm.add_endRequest(EndRequest);
  }
  $get('ClientEvents').innerHTML += "APP:: Application init. <br/>";
}
function ApplicationLoad(sender, args) {
  $get('ClientEvents').innerHTML += "APP:: Application load. ";
  $get('ClientEvents').innerHTML += "(isPartialLoad = " + args.get_isPartialLoad() + ")<br/>";
}
function ApplicationUnload(sender) {
  alert('APP:: Application unload.');
}
function ApplicationDisposing(sender) {
  $get('ClientEvents').innerHTML += "APP:: Application disposing. <br/>";

}
// Application event handlers for page developers.
function pageLoad() {
  $get('ClientEvents').innerHTML += "PAGE:: Load.<br/>";
}

function pageUnload() {
  alert('Page:: Page unload.');
}

// PageRequestManager event handlers.
function InitializeRequest(sender, args) {
  $get('ClientEvents').innerHTML += "<hr/>";
  $get('ClientEvents').innerHTML += "PRM:: Initializing async request.<br/>";  
}
function BeginRequest(sender, args) {
  $get('ClientEvents').innerHTML += "PRM:: Begin processing async request.<br/>";
}
function PageLoading(sender, args) {
  $get('ClientEvents').innerHTML += "PRM:: Loading results of async request.<br/>";
  var updatedPanels = printArray("PanelsUpdating", args.get_panelsUpdating());
  var deletedPanels = printArray("PanelsDeleting", args.get_panelsDeleting());

  var message = "-->" + updatedPanels + "<br/>-->" + deletedPanels + "<br/>";

  document.getElementById("ClientEvents").innerHTML += message;
}
function PageLoaded(sender, args) {
  $get('ClientEvents').innerHTML += "PRM:: Finished loading results of async request.<br/>";
  var updatedPanels = printArray("PanelsUpdated", args.get_panelsUpdated());
  var createdPanels = printArray("PaneslCreated", args.get_panelsCreated());

  var message = "-->" + updatedPanels + "<br/>-->" + createdPanels + "<br/>";

  document.getElementById("ClientEvents").innerHTML += message;
}
function EndRequest(sender, args) {
  $get('ClientEvents').innerHTML += "PRM:: End of async request.<br/>";
}

// Helper functions.
function Clear()
{
  $get('ClientEvents').innerHTML = "";
}
function printArray(name, arr)
{
    var panels = name + '=' + arr.length;
    if(arr.length > 0)
    {
        panels += "(";
        for(var i = 0; i < arr.length; i++)
        {
            panels += arr[i].id + ',';
        }
        panels = panels.substring(0, panels.length - 1);
        panels += ")";
    }
    return panels;
}
// Hook up Application event handlers.
var app = Sys.Application;
app.add_load(ApplicationLoad);
app.add_init(ApplicationInit);
app.add_disposing(ApplicationDisposing);
app.add_unload(ApplicationUnload);


// Application event handlers for component developers.
function ApplicationInit(sender) {
  var prm = Sys.WebForms.PageRequestManager.getInstance();
  if (!prm.get_isInAsyncPostBack())
  {
      prm.add_initializeRequest(InitializeRequest);
      prm.add_beginRequest(BeginRequest);
      prm.add_pageLoading(PageLoading);
      prm.add_pageLoaded(PageLoaded);
      prm.add_endRequest(EndRequest);
  }
  $get('ClientEvents').innerHTML += "APP:: Application init. <br/>";
}
function ApplicationLoad(sender, args) {
  $get('ClientEvents').innerHTML += "APP:: Application load. ";
  $get('ClientEvents').innerHTML += "(isPartialLoad = " + args.get_isPartialLoad() + ")<br/>";
}
function ApplicationUnload(sender) {
  alert('APP:: Application unload.');
}
function ApplicationDisposing(sender) {
  $get('ClientEvents').innerHTML += "APP:: Application disposing. <br/>";

}
// Application event handlers for page developers.
function pageLoad() {
  $get('ClientEvents').innerHTML += "PAGE:: Load.<br/>";
}

function pageUnload() {
  alert('Page:: Page unload.');
}

// PageRequestManager event handlers.
function InitializeRequest(sender, args) {
  $get('ClientEvents').innerHTML += "<hr/>";
  $get('ClientEvents').innerHTML += "PRM:: Initializing async request.<br/>";  
}
function BeginRequest(sender, args) {
  $get('ClientEvents').innerHTML += "PRM:: Begin processing async request.<br/>";
}
function PageLoading(sender, args) {
  $get('ClientEvents').innerHTML += "PRM:: Loading results of async request.<br/>";
  var updatedPanels = printArray("PanelsUpdating", args.get_panelsUpdating());
  var deletedPanels = printArray("PanelsDeleting", args.get_panelsDeleting());

  var message = "-->" + updatedPanels + "<br/>-->" + deletedPanels + "<br/>";

  document.getElementById("ClientEvents").innerHTML += message;
}
function PageLoaded(sender, args) {
  $get('ClientEvents').innerHTML += "PRM:: Finished loading results of async request.<br/>";
  var updatedPanels = printArray("PanelsUpdated", args.get_panelsUpdated());
  var createdPanels = printArray("PaneslCreated", args.get_panelsCreated());

  var message = "-->" + updatedPanels + "<br/>-->" + createdPanels + "<br/>";

  document.getElementById("ClientEvents").innerHTML += message;
}
function EndRequest(sender, args) {
  $get('ClientEvents').innerHTML += "PRM:: End of async request.<br/>";
}

// Helper functions.
function Clear()
{
  $get('ClientEvents').innerHTML = "";
}
function printArray(name, arr)
{
    var panels = name + '=' + arr.length;
    if(arr.length > 0)
    {
        panels += "(";
        for(var i = 0; i < arr.length; i++)
        {
            panels += arr[i].id + ',';
        }
        panels = panels.substring(0, panels.length - 1);
        panels += ")";
    }
    return panels;
}

一般的なシナリオのイベント順序

イベントの順序は、ページで使用されるコンテンツ、および行われる要求の種類 (初期要求、ポストバック、または非同期ポストバック) によって異なります。ここでは、いくつかの一般的なシナリオのイベント順序について説明します。

初期要求

ページの初期要求では、限られた数のクライアント イベントが発生します。初期要求の次のシナリオを想定します。

次のクライアント イベントが次の順序で発生します。

  1. 初期要求がサーバーに送信されます。

  2. クライアントが応答を受信します。

  3. Application インスタンスが init イベントを発生させます。

  4. Application インスタンスが load イベントを発生させます。

ブラウザ内のページの有効期間中に、Application インスタンスの init イベントが 1 回のみ発生します。後続の非同期ポストバックに対しては発生しません。初期要求中に、PageRequestManager イベントは発生しません。

非同期ポストバック

非同期ポストバックは、サーバーにページ データを送信し、応答を受信して、ページの一部を更新します。非同期ポストバックの次のシナリオを想定します。

  • ページには ScriptManager コントロールが含まれ、コントロールの SupportsPartialRendering プロパティと EnablePartialRendering プロパティは両方とも true です。

  • ページには UpdatePanel コントロールが含まれ、コントロールの ChildrenAsTriggers プロパティは true です。

  • UpdatePanel コントロール内のボタンにより、非同期ポストバックが開始されます。

  • サーバーからの応答が正常に返されました。

次のクライアント イベントが次の順序で発生します。

  1. UpdatePanel 内のボタンがクリックされ、非同期ポストバックが開始されます。

  2. PageRequestManager インスタンスが initializeRequest イベントを発生させます。

  3. PageRequestManager インスタンスが beginRequest イベントを発生させます。

  4. 要求がサーバーに送信されます。

  5. クライアントが応答を受信します。

  6. PageRequestManager インスタンスが pageLoading イベントを発生させます。

  7. PageRequestManager インスタンスが pageLoaded イベントを発生させます。

  8. Application インスタンスが load イベントを発生させます。

  9. PageRequestManager インスタンスが endRequest イベントを発生させます。

詳細については、「PageRequestManager のイベントの処理」を参照してください。

Application インスタンスの load イベントは、PageRequestManagerpageLoaded イベントの後、endRequest イベントの前に発生することに注意してください。

複数の非同期ポストバック

サーバー上またはブラウザ内で以前に開始された要求が処理を完了する前に、ユーザーが新しい要求を開始すると、複数の非同期ポストバックが発生する可能性があります。複数の非同期ポストバックの次のシナリオを想定します。

  • ページには ScriptManager コントロールが含まれ、コントロールの SupportsPartialRendering プロパティと EnablePartialRendering プロパティは両方とも true です。

  • ページには、UpdatePanel コントロールが含まれています。

  • 非同期ポストバックを開始する UpdatePanel コントロール内のボタンが 2 回クリックされます。2 回目のクリックは、1 回目のクリックによって開始された要求をサーバーが処理している間に発生します。

  • 最初の要求への応答がサーバーから正常に返されました。

次のクライアント イベントが次の順序で発生します。

  1. UpdatePanel 内のボタンがクリックされ、非同期ポストバックが開始されます。

  2. PageRequestManager インスタンスが initializeRequest イベントを発生させます。

  3. PageRequestManager インスタンスが beginRequest イベントを発生させます。

  4. 要求がサーバーに送信されます。

  5. ボタンが再度クリックされ、2 回目の非同期ポストバックが開始されます。

  6. PageRequestManager インスタンスが 2 回目のボタン クリックの initializeRequest イベントを発生させます。

  7. PageRequestManager インスタンスが 1 回目のボタン クリックの endRequest イベントを発生させます。

  8. PageRequestManager インスタンスが 2 回目のボタン クリックの beginRequest イベントを発生させます。

  9. 2 回目のクリックによって開始された要求がサーバーに送信されます。

  10. 2 回目のクリックに対して応答が受信されます。

  11. PageRequestManager インスタンスが pageLoading イベントを発生させます。

  12. PageRequestManager インスタンスが pageLoaded イベントを発生させます。

  13. Application インスタンスが load イベントを発生させます。

  14. PageRequestManager インスタンスが endRequest イベントを発生させます。

非同期ポストバックの既定の動作では、最新の非同期ポストバックが優先されます。2 つの非同期ポストバックが順に発生し、最初のポストバックがブラウザで処理中の場合、最初のポストバックはキャンセルされます。最初のポストバックがサーバーに送信された場合、サーバーは 2 番目の要求を受信したときに処理を開始し、最初の要求を返しません。特定の非同期ポストバックを優先する方法の詳細については、「特定の非同期ポストバックの優先的処理」を参照してください。

ページからの移動

ユーザーがページから移動すると、現在のページがブラウザからアンロードされ、unload イベントを処理してリソースを解放できます。ページからの移動の次のシナリオを想定します。

次のクライアント イベントが次の順序で発生します。

  1. 新しいページの要求が開始されます。

  2. ブラウザが新しいページに対する応答を受信します。

  3. Application インスタンスが unload イベントを発生させます。

  4. 新しいページが表示されます。

新しいページの要求でエラーが発生しても、unload イベントは発生しますが、新しいページは表示されません。

参照

概念

ASP.NET ページのライフ サイクルの概要

カスタム コンポーネント プロパティの定義と PropertyChanged イベントの発生

PageRequestManager のイベントの処理

カスタム クライアント イベントの作成