コールバックでは、System.Web.UI.Control派生クラスにICallbackEventHandlerインターフェイスを実装させる必要がある。System.Web.UI.Control派生クラスなのでWebフォームでもWebユーザーコントロールでもいい。Webページに実装させてしまうと他のページで使い回しできない。汎用性を考えるのなら、Webユーザーコントロールに実装させる。Webユーザーコントロールにはロジックのみを実装し、HTML要素は配置しない。(ロジックのみにすることで、使い方が縛られず、色々なコントロールと組み合わせられる。コールバックのロジックを汎用的に提供するWebユーザーコントロールの作成方法を記述する。]まず、以下の5つのフィールドを用意する。処理を開始するクライアント関数の名称フィールド処理結果を実際に受け取るクライアント関数の名称フィールド処理結果を受け取るクライアント関数(利用側が用意する関数)の名称フィールド例外発生時に例外メッセージを受け取るクライアント関数(利用側が用意する関数)の名称フィールド処理結果フィールドフィールド1は、文字列"Begin"とthis.UniqueIDを結合させた文字列となる。フィールド2は文字列”End”とthis.UniqueIDを結合させた文字列となる。フィールド1とフィールド2が示すクライアント関数は、このコントロールのascxファイルに定義する。フィールド3とフィールド4が示すクライアント関数は、初期値がnullで、このコントロールを利用する側が独自に用意することになる。次に、以下の4つのプロパティを用意する。フィールド1の読み取り専用プロパティフィールド2の読み取り専用プロパティ(可視性はプロテクト)フィールド3のプロパティフィールド4のプロパティプロパティ1とプロパティ2は読み取り専用である。プロパティ2は可視性をプロテクトにすること。プロパティ3とプロパティ4は、フィールドの説明にも書いたように、このコントロールを利用する側が値を設定することとなる。次に、以下のイベントハンドラを用意する。InitイベントのハンドラInitイベントのハンドラでは、フィールド1とフィールド2の初期化を行う。Loadイベントではないので注意すること。最後にIClientCallbackEventHandlerインターフェイスの各メソッドを実装する。以下に、コード例を記述する。コールバックでHogeを取得するためのコントロール。このコントロールに用意されている、処理を開始するクライアントスクリプト関数の名称の名称。このコントロールに用意されている、処理結果を受け取るクライアントスクリプト関数の名称。処理結果を受け取るクライアントスクリプト関数の名称。例外発生時に呼び出されるクライアントスクリプト関数の名称。このコントロールに用意されている、処理を開始するクライアントスクリプト関数の名称を取得する。このクライアントスクリプト関数は、一つの文字列型の引数を受け取る。引数には取得したいHogeの名称を指定する。このコントロールに用意されている、処理結果を受け取るクライアントスクリプト関数の名称を取得する。処理結果を受け取るクライアントスクリプト関数の名称を取得または設定する。このクライアントスクリプト関数には、一つのHoge型の引数を用意すること。引数には取得したHogeが渡される。例外発生時に呼び出されるクライアントスクリプト関数の名称を取得または設定する。このクライアントスクリプト関数には、一つの文字列型の引数を用意すること。引数には例外メッセージが渡される。初期化イベントのハンドラ。コールバックイベントの結果を返す。コールバックイベントを処理する。XMLデータに変換後、resultフィールドに格納する。]クライアントサイドには、以下の2つの関数を用意する。this.UniqueID)を関数名とする。この関数は、this.Page.ClientScript.GetCallbackEventReferenceメソッドの戻り値で得られるスクリプト関数を実行する。GetCallbackEventReferenceメソッドのclientErrorCallback引数にはプロパティ4の値を渡す。this.UniqueID)を関数名とする。コールバックの処理結果をサーバーから取得し、プロパティ3に指定されているクライアント関数を呼び出す。この時、必要なら処理結果をわかりやすい形式に変換(XMLデータを、JavaScriptで定義したラッパークラスに変換する等)してからプロパティ3のクライアント関数に渡す。以下に、コード例を記述する。%>}</script>作成したWebユーザーコントロールを利用するには、以下のような使い方をする。コールバックの開始関数は、ClientBeginFunctionで取得する代わりに、コントロールのIDの先頭に"Begin"を結合した文字列を直接記述しても良い。29ブログ内検索カウンターアクセスカウンターおすすめプロフィールAuthor:よこけん性別は男です。生年月日は1984年2月頃です。社会人は2004年4月頃からやってます。C#は2004年10月頃からやってます。このブログは2006年7月頃からやってます。アプリケーションリンクopus-i商用可・加工可で、綺麗な素材を提供していらっしゃいます。紹介していらっしゃいます。中心に扱っていらっしゃいます。コマンドレットをまとめたスナップインです。クラスライブラリを作ってみました。最近の記事ブログ移転しました。返事を返せない場合があります。