Asp.Net 2.0 独自のクライアント コールバック
Asp.Net 2.0 がリリースされました。 2.0 には多くの新機能があり、クライアント コールバックもその 1 つです。クライアント コールバックを使用すると、ポストバックなしでサーバー側のメソッドを呼び出すことができます。ただし、AJAX では呼び出しメソッドをカスタマイズできますが、2.0 に付属のコールバック関数ではカスタマイズできないほど柔軟ではありません。クライアント コールバック関数を使用するには、system.Web.UI.IcallbackEventHandler インターフェイスを実装する必要があります。
このインターフェースには 2 つのメソッドが含まれています
// このメソッドは、クライアントがコールバックするときに常に呼び出されます
public void RaiseCallbackEvent(String eventArgument)
//このメソッドは RaiseCallbackEvent の実行後に呼び出されます。このメソッドの戻り値はクライアントに返されます。
パブリック文字列 GetCallbackResult()
例:
.cs:
String cbReference = Page.ClientScript.GetCallbackEventReference(
this,"arg", "ReceiveServerData", "context");
文字列コールバックスクリプト;
callbackScript = "関数 CallServer(arg, context)" + "{ " + cbReference + "} ;";
Page.ClientScript.RegisterClientScriptBlock(
this.GetType(),"CallServer", callbackScript, true);
JavaScript:
AJAX の概要
AJAX は新しいテクノロジではなく、XmlHttp、Reflect などの既存のテクノロジを有機的に組み合わせたものです。 AJAX フレームワークには基本的に、カスタム HttpHandler と JavaScript コードが含まれています。
AJAXの動作仕組み
以前はXmlHttpを使って非リフレッシュページを実装する場合は を使用していましたが、違うのはこのページのHttpHandlerを独自に実装していることです。
独自の AJAX を構築します。
1. まず、クライアント要求に応答するために Http ハンドラー (HttpHandler) を実装する必要があります。
カスタム HttpHandler を実装するには、IHttpHandler インターフェイスを実装する必要があります。
インターフェイスには 1 つのプロパティと 1 つのメソッドが含まれます:
bool IHttpHandler.IsReusable
void IHttpHandler.ProcessRequest(HttpContext コンテキスト)
例:
bool IHttpHandler.IsReusable
{
取得 { true を返します }
}
void IHttpHandler.ProcessRequest(HttpContext コンテキスト)
{
context.Response.Clear(); // 呼び出されるメソッドを取得します。
文字列メソッド名 = context.Request.QueryString["me"];
//アセンブリ情報を取得します。
//Czhenq.AJAX.Class1.Dencode はカスタム文字列エンコード方式です
string AssemblyName = Czhenq.AJAX.Class1.Dencode(context.Request.QueryString["as"]);
//メソッドのパラメータを取得する
string Arguments = context.Request.QueryString["ar"]; //メソッドの呼び出しを開始します。
タイプ type = Type.GetType(AssemblyName);
MethodInfo メソッド = type.GetMethod(メソッド名,
BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance
if (メソッド != null)
{
//パラメータは「,」で区切る
string[] args = Arguments.Split(",".ToCharArray());
ParameterInfo[] paras = メソッド.GetParameters();
object[] 引数 = 新しいオブジェクト[paras.Length];
for (int i = 0; i < argument.Length; i++)
{
if (i < args.Length) {
//XmlHttp で渡されるパラメータはすべて String 型であるため、変換する必要があります
//ここではパラメータを Int32 に変換するだけであり、他の考慮事項はありません。
引数[i] = Convert.ToInt32(args[i]);
}
}
オブジェクト値 = method.Invoke(Activator.CreateInstance(type, true), argument);
if (値 != null) context.Response.Write(value.ToString());
else context.Response.Write("エラー");
}
//処理終了
context.Response.End();
.NET コミュニティ フォーラムへようこそ。200 万人の技術スタッフと交流しましょう >>
2. クライアント Javascript コード:
function CallMethod(AssemblyName,MethodName,Argus)
を入力します。
{
var args = "";
for(var i=0;i
args += Argus[i] + ",";
if(args.length>0) args = args.substr(0,args.length-1);
var xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
url = "AJAX/AJAX.czhenq?as=" + AssemblyName + "&me=" + MethodName +"&ar="+ args;
xmlhttp.open("POST",url,false);
xmlhttp.send();
アラート(xmlhttp.responseText);
}
3. シンプルな AJAX フレームワークが実装されています。次に、テストするコードを作成します。
独自の AJAX を使用します。
1. 新しい Web サイトを作成し、作成した HttpHandler を使用します。そして、Web サイトの Web.config に HttpHandler を登録し、作成したハンドラーを使用してこれらの要求が処理されることを示します。次の内容で説明します。「czq」で終わるすべてのリクエストは「Czhenq.HttpHandlerFactory」を使用して処理されます。
type="Czhenq.HttpHandlerFactory, Czhenq.AJAX"/>
2. Web ページを追加し、先ほどのスクリプトをページにコピーして、呼び出すメソッドを追加します。
プライベート文字列 Add(int i, int j)
{
TextBox1.Text を返します。
}
3. HiddenField コントロールをページに配置し、AssemblyName という名前を付けます。 そして、次のコードを Page_Load に追加します。
string AssemblyName = Czhenq.AJAX.Class1.Encode(
typeof(_Default).AssemblyQualifiedName);
AssemblyName.Value = アセンブリ名;
var AssemblyName = document.getElementById("AssemblyName"); var argus = new Array();argus.push("100");argus.push("200");CallMethod(assemblyName,"Add",argus)
要約すると、AJAX は新しいテクノロジではありません。AJAX は、XmlHttp を呼び出す JavaScript のカプセル化であると単純に理解できます。
Encode と Dencode の実装を添付します:
public static string Encode(string value)
{
byte[] bytes = ASCIIEncoding.ASCII.GetBytes(値);
Convert.ToBase64String(バイト)を返します。
}
public static string Dencode(文字列値)
{
byte[] bytes = Convert.FromBase64String(value);
return ASCIIEncoding.ASCII.GetString(バイト);
}