ASP.NET2.0リフレッシュされていないクライアントコールバックを実現


概要
Asp.Net Webページのデフォルトモデルでは、ユーザーがページとインタラクティブになり、ボタンをクリックするか、再送の原因となるいくつかの操作を実行します.ページとそのコントロールを再作成し、サーバ側でページコードを実行し、新しく生成されたページをブラウザに表示します.しかし、多くの場合、クライアント・スクリプトがステータス情報を維持し、サーバの往復の処理コストを節約するなど、クライアントからサーバ・コードを実行する必要があり、再送を実行しない必要があります.Asp.net2.0のクライアントコールバックメカニズムは、このようなニーズを満たすのに適しています.クライアントコールバックでは、クライアントスクリプトがAspに向かう.Net Webページは、「特別タグ」メソッドを呼び出してリクエスト処理を実行し、別のクライアントスクリプト関数で読み取ることができる値をブラウザに返すリクエストを送信します.クライアントコールバックコンポーネントは、クライアントコールバックを実現するAspを作成する.Netページには、ICallbackEventHandlerインタフェースが実装されている必要があります.任意のAsp.Net Webページこのインタフェース宣言を追加します.=>RaiseCallbackEventメソッドの実装を提供します.このメソッドは、サーバにコールバックを実行するために呼び出されます.=>GetCallbackResultメソッドの実装を提供します.このメソッドは、コールバック結果をクライアントに返します.さらに、Webページには、サーバに対する実際の要求を実行する関数呼び出しヘルプメソッドの3つのクライアントスクリプト関数が含まれます.=>1つ目は、サーバに対する実際の要求を実行する関数呼び出しヘルプメソッドです.この関数では、まずカスタムロジックを実行して、サーバ側コールバックイベントハンドラに文字列形式で送信されるイベントパラメータを準備できます.=>2つ目は、サーバ側のコールバックイベントハンドラが返す結果を受信するクライアントコールバック関数です.=>3番目の関数は、サーバ側の実際のリクエストを実行するヘルプ関数です.サーバコードにおいてGetCallbackEventReference法を用いるこの関数への参照を生成する場合、Asp.Netはこの関数を自動的に生成します.サンプル分析と組み合わせてClient_を作成Callback3.aspxページ、UIセクション:
<%@ Page Language="C#"AutoEventWireup="true"CodeFile="client_callback3.aspx.cs"Inherits="client_callback3"%> Client Callback Sample

function getAgeByName() { var context = ""; var name = document.getElementById('txtName').value; <%= Page.ClientScript.GetCallbackEventReference(this, "name", "ReceiveDataFromServer", "context") %>; } function ReceiveDataFromServer(retVal) { document.getElementById('result').innerText = retVal; }
code-behindセクション:
using System; public partial class client_callback3 : System.Web.UI.Page, System.Web.UI.ICallbackEventHandler { private System.Collections.Generic.Dictionary _Person = new System.Collections.Generic.Dictionary(); public System.Collections.Generic.Dictionary Person { get { if (!Equals(ViewState["Person"], null)) { return ViewState["Person"] as System.Collections.Generic.Dictionary; } else return null; } set { ViewState["Person"] = value; } } string callbackVal = string.Empty; protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { _Person.Add("Allan", 24); _Person.Add("Kaori", 23); _Person.Add("Vincent", 22); _Person.Add("George", 21); Person = _Person; } } void System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent(string eventArgument) { this.callbackVal = eventArgument; } string System.Web.UI.ICallbackEventHandler.GetCallbackResult() { return this.callbackVal + "'age is "+ Person[this.callbackVal].ToString(); } }
UIのgetAgeByNameは前述の最初のスクリプト関数に対応し、ReceiveDataFromServerはクライアントコールバック関数に対応し、code-behindページクラスはインタフェースICallbackEventHandlerを継承し、RaiseCallbackEventとGetCallbackResultメソッドを実現します.RaiseCallbackEventメソッドには、クライアントから送信されるstringタイプのパラメータがあります.GetCallbackResultメソッドは、クライアントコールバック関数によって受信されるstringタイプの値を返します.もう一つのクライアント関数がどこにあるか気づいたかもしれません.サーバ側がGetCallbackEventReferenceメソッドを呼び出してこの関数の参照を生成するときにAspがある.Net2.0自動生成htmlのソースファイルを表示することで、この関数を知ることができます(WebForm_DoCallback('_Page',name,ReceiveDataFromServer,context,null,false);).いくつかの問題1、GetCallbackEventReferenceメソッド:クライアント関数への参照を取得し、この関数を呼び出すと、サーバ側イベントへのクライアントコールバックが開始されます.私の理解では、この方法は、クライアントがパラメータをサーバ側に伝達する能力を実現することです.この方法は4つのパラメータ、GetCallbackEventReference(this、「name」、「ReceiveDataFromServer」、「context」)を含み、そのパラメータはそれぞれ、最初のパラメータがICallbackEventHandlerインタフェースを継承するコントロールであることを意味する.2番目のパラメータは、クライアントからサーバ側に渡されるパラメータ値です.3番目のパラメータはクライアントコールバック関数です.4つ目はコンテキストです.