ASP.NET2.0のClient Callback機能を使用することで、非同期にサーバと通信し、不要なポストバックをしないように
することができます。必ずしもXMLでやりとりをする訳ではないので、Ajaxとは呼べないかもしれませんが、広義の
Ajaxと呼んでもよいかもしれません。ASP.NETの次のバージョン「Atlas」ではAjaxをサポートするようです。
Client Callbackを使用するにはサーバ側でSystem.Web.UI.ICallbackEventHandlerインタフェースを実装します。
System.Web.UI.ICallbackEventHandlerには2つのメソッドが定義されており、次のような役割をはたします。
・RaiseCallbackEventメソッド
クライアントからサーバへの非同期呼び出しに対する処理を行います。
・GetCallbackResultメソッド
クライアントへ処理結果を送信します。
一方、クライアント側には次の関数を定義します。(名前は任意)
・サーバと非同期通信する引き金となる関数(以下の例のLookUp関数)
・サーバからデータを受け取る関数(以下の例のReceiveDataFromServer関数)
・実際にサーバへ要求を送信する関数(以下の例のCallServer関数)
クライアントとサーバをつなぐCallServer関数は、ページロード時にサーバサイドで生成、クライアントに送信されます。
そこで使用するのがPage.ClientScript.GetCallbackEventReferenceメソッドです。
このメソッドでサーバからの返却文字列を受け取るReceiveDataFromServerクライアント関数の参照を取得、CallServerクライアント関数を生成します。
まず、サーバサイドのソースコードを以下に示します。
public partial class ClientCallbackSample : System.Web.UI.Page, System.Web.UI.ICallbackEventHandler
{
private string returnValue = string.Empty;
protected void Page_Load(object sender, EventArgs e)
{
ClientScriptManager csMgr = Page.ClientScript;
string cbRef
= csMgr.GetCallbackEventReference(this, "arg", "ReceiveDataFromServer", "context");
string callbackScript = "function CallServer(arg, context){" + cbRef + ";}";
csMgr.RegisterClientScriptBlock(this.GetType(), "CallServerScript", callbackScript, true);
}
public string GetCallbackResult()
{
return returnValue;
}
public void RaiseCallbackEvent(string eventArgument)
{
returnValue = 結果;
}
}
次に、クライアントサイドのソースコードを以下に示します。
<script type="text/javascript">
<!--
function ReceiveDataFromServer(retValue, context)
{
document.getElementById("dispArea").innerHTML = retValue;
}
function LookUp()
{
var sendStr = "これ頼みます";
CallServer(sendStr, null);
}
//-->
</script>
この機能を使って
郵便番号検索を作ってみました。