ASP.NET Webページでは再送なしにクライアントコールバックをプログラミングで実現

10757 ワード


ASP.NET Webページのデフォルトモデルでは、ユーザーはページと対話し、ボタンをクリックするか、再送の原因となる他の操作を実行します.ページとそのコントロールが再作成され、サーバ上でページコードが実行され、新しいバージョンのページがブラウザに表示されます.ただし、再送を実行せずにクライアントからサーバコードを実行する必要がある場合があります.ページ内のクライアント・スクリプトがステータス情報(ローカル変数値など)を維持している場合、ページの送信とページの新しいコピーの取得はステータスを破壊します.また、ページの再送により、処理オーバーヘッドが発生し、パフォーマンスが低下し、ユーザーが処理を待機してページを再作成しなければなりません.
クライアントの状態が失われ、サーバの往復の処理オーバーヘッドが発生しないようにするには、ASP.NETウェブコードは、クライアントコールバックを実行できるようにします.クライアントコールバックでは、クライアントスクリプト関数はASPに向かう.NETページからリクエストが送信されます.このページは、通常のライフサイクルの変更バージョンで実行されます.これにより、ページが起動し、コントロールと他のメンバーが作成され、特別なタグのメソッドが呼び出されます.このメソッドは、コードに記述された処理プロセスを実行し、ブラウザに別のクライアントスクリプト関数で読み取ることができる値を返します.このプロセスでは、ページはブラウザに常駐します.
クライアントコールバックを使用できるWebサーバコントロールはいくつかあります.たとえば、
TreeView
コントロールは、クライアントコールバックを使用して、必要な入力機能を実現します.詳細については、TreeView Webサーバコントロールの概要を参照してください.
ASP.NET Webページでは、クライアントコールバックの自動処理に使用できるオプションがあります.ASP.NETのAJAX機能(例えば
UpdatePanel
サーバコントロール)は、非同期部のページング更新を自動的に完了し、そのWebサービス通信機能は、非同期Webサービス呼び出しを自動的に完了することができる.
ASPについてNETでクライアントコールバックを自動的に処理できるAJAX機能の概要については、以下を参照してください.

  • UpdatePanel Control Overview
  • ASP.NET AJAXの概要
  • 一部のページの概要
  • ASP.NET AJAX 中的 Web 服务

  • また、クライアントコールバックを直接実現するために、独自のクライアントスクリプトを作成することもできます.このトピックでは、クライアントとサーバとの間で非同期通信を行うために、独自のクライアントコールバックを実現する方法について説明します.

    クライアントコールバックコンポーネント


    クライアントコールバックをプログラミングで実現するASPを作成する.NETページと任意のASPを作成する.NETページのプロセスは似ていますが、以下の違いもあります.このページのサーバー・コードでは、次のタスクを実行する必要があります.
  • 実装
    ICallbackEventHandler
    インターフェース.任意のASP.NET Webページにこのインタフェース宣言を追加します.
  • 提供
    RaiseCallbackEvent
    メソッドの実装.このメソッドは、サーバにコールバックを実行するために呼び出されます.
  • 提供
    GetCallbackResult
    メソッドの実装.このメソッドは、コールバック結果をクライアントに返します.

  • また、このページには、次の3つのクライアント・スクリプト関数が含まれている必要があります.
  • サーバに対する実際の要求を実行する関数呼び出しヘルプメソッド.この関数では、カスタムロジックを実行して、イベントの実パラメータを最初に準備できます.文字列は、サーバ側のコールバックイベントハンドラにパラメータとして送信できます.
  • の別の関数は、コールバックイベントを処理するサーバコードの結果によって呼び出され、その結果を表す文字列を受信する.この関数をクライアントコールバック関数と呼びます.
  • の3番目の関数は、実際のサーバ要求を実行するHelper関数である.サーバコードで使用する場合
    GetCallbackEventReference
    メソッドがこの関数の参照を生成する場合、ASP.NETはこの関数を自動的に生成します.

  • クライアントコールバックとコールバックは、元のページに対するリクエストです.これにより、Webサーバログにページリクエストとして記録されます.

    サーバコードで必要なインタフェースを実装


    再送を実行せずにクライアント・スクリプトからサーバ・コードを実行するには、サーバ・コードにインタフェースを実装する必要があります.

    ICallbackEventHandlerインタフェースの宣言


    可以将
    ICallbackEventHandler
    インタフェースは、ページのクラス宣言の一部として宣言されます.コード非表示ページを作成する場合は、次の構文を使用してインタフェースを宣言できます.
    Visual Basic 
    Partial Class CallBack_DB_aspx
    
                Inherits System.Web.UI.Page
    
                Implements System.Web.UI.ICallbackEventHandler

    C# 
    public partial class CallBack_DB_aspx :
    
                System.Web.UI.Page, System.Web.UI.ICallbackEventHandler

    単一ファイル・ページまたはユーザー・コントロールを処理している場合は、ページで使用できます.
    @ Implements
    次の例に示すように、宣言を追加します.
    Visual Basic 
    <%@ Page Language="VB" %>
    
                
               
                 
                  
                <%@ Implements Interface="System.Web.UI.ICallbackEventHandler" %>
               
                 

    C# 
    <%@ Page Language="C#" %>
    
                
               
                 
                  
                <%@ Implements Interface="System.Web.UI.ICallbackEventHandler" %>
               
                 

    注意:
    インタフェース名は大文字と小文字を区別します.

    サーバコールバックメソッドの作成


    サーバコードでは、インプリメンテーションを作成する必要があります.
    RaiseCallbackEvent
    方法の方法と1つの実現
    GetCallbackResult
    方法の方法.
    RaiseCallbackEvent
    メソッドは、通常イベントハンドラで使用される一般的な2つのパラメータではなく、単一の文字列パラメータを受け入れます.この方法の一部は、次の例と同様である可能性があります.
    Visual Basic 
    Public Sub RaiseCallbackEvent(ByVal eventArgument As String) _
    
                Implements System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent
    
                End Sub

    C# 
    public String RaiseCallbackEvent(String eventArgument)
    
                {
    
                }

    GetCallbackResult
    パラメータを受け入れずに文字列を返します.この方法の一部は、次の例と同様である可能性があります.
    Visual Basic 
    Public Function GetCallbackResult() As String Implements _
    
                System.Web.UI.ICallbackEventHandler.GetCallbackResult
    
                Return aStringValue
    
                End Function

    C# 
    public string GetCallbackResult()
    
                {
    
                return aStringValue;
    
                }

    クライアントスクリプト関数の作成


    コールバックと受信結果をサーバ・ページに送信するには、クライアント・スクリプト関数をページに追加する必要があります.両方のクライアントスクリプト関数はECMAScript(JavaScript)で記述されています.

    コールバックの送信


    コールバックを送信する関数は、サーバコードで生成されます.実際のコールバックは、どのページでも使用可能な、実装されています.
    ICallbackEventHandler
    インタフェースのライブラリ関数が実行されます.ページを呼び出す
    GetCallbackEventReference
    メソッドは、ページを使用してライブラリ関数の参照を取得できます.
    ClientScript
    プロパティにアクセスします.次に、クライアント関数を動的に生成します.この関数には、
    GetCallbackEventReference
    メソッドの戻り値の呼び出し.このメソッドには、ページへの参照(C#でthis、Visual BasicでMe)、データの転送に使用するパラメータ名、コールバックデータを受信するクライアント・スクリプト関数の名前、および必要なコンテキストのパラメータを転送する方法を伝えます.
    関数を生成した後、呼び出し
    RegisterClientScriptBlock
    メソッドを使用して、ページに挿入します.
    次の例では、CallServerという名前のコールバック関数を動的に作成する方法を示します.
    Visual Basic 
    Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
    
                Handles Me.Load
    
                Dim cm As ClientScriptManager = Page.ClientScript
    
                Dim cbReference As String
    
                cbReference = cm.GetCallbackEventReference(Me, "arg", _
    
                "ReceiveServerData", "")
    
                Dim callbackScript As String = ""
    
                callbackScript &= "function CallServer(arg, context)" & _
    
                "{" & cbReference & "; }"
    
                cm.RegisterClientScriptBlock(Me.GetType(), _
    
                "CallServer", callbackScript, True)End Sub

    C# 
    void Page_Load(object sender, EventArgs e)
    
                {
    
                ClientScriptManager cm = Page.ClientScript;
    
                String cbReference = cm.GetCallbackEventReference(this, "arg",
    
                "ReceiveServerData", "");
    
                String callbackScript = "function CallServer(arg, context) {" +
    
                cbReference + "; }";
    
                cm.RegisterClientScriptBlock(this.GetType(),
    
                "CallServer", callbackScript, true);
    
                }

    生成中の関数によって受け入れられるパラメータ名は、
    GetCallbackEventReference
    メソッドの値の名前が一致します.
    次の例では、コールバックを呼び出し、その戻り値を処理するために使用できるタグを示します.
    Visual Basic 
    <input type="button" value="Callback"
    
                onclick="CallServer(1, alert('Callback'))"/>
    
                <br />
    
                <span id="Message"></span>

    C# 
    <input type="button" value="Callback"
    
                onclick="CallServer(1, alert('Callback'))"/>
    
                <br />
    
                <span id="Message"></span>

    コールバックの受信


    ページ内でコールバックを静的に受信するクライアント関数を記述できます.この関数の名前は
    GetCallbackEventReference
    メソッド呼び出しで渡された名前が一致します.受信関数は、2つの文字列値を受け入れます.1つは値を返すために使用され、もう1つは(オプション)サーバから返すコンテキスト値に使用されます.
    この関数は、次の例と似ています.
     
    <script type="text/javascript">
    
                function ReceiveServerData(arg, context)
    
                {
    
                Message.innerText = 'Processed callback.';
    
                }
    
                </script>

    「」を参照してください。


    コンセプト


    クライアントコールバックインプリメンテーション(Visual Basic)の例
    クライアントコールバック実装(C#)例

    リファレンス


    ClientScriptManager
    意見をフィードバックする.を送信し、このトピックについてMicrosoftにフィードバックを送信します.