クライアント・コールバックとは
ページをリロードせずにサーバーとやり取りする方法。 ポストバックによるパフォーマンスの低下を避ける方法として、クライアントコールバックを使ってサーバーのコードを実行できる。
ライアント・コールバックを利用するため
【1】ICallbackEventHandlerインターフェイスを実装する
RaiseCallbackEvent()
コールバックによる実処理を規定するためのメソッド
【2】GetCallbackEventReferenceメソッドでクライアント関数への参照を取得する
GetCallbackResult()
クライアントサイド・スクリプトによる関数への参照を取得する
構文
GetCallbackEventReference( ICallbackEventHandlerインターフェイスを実装したコントロール, RaiseCallBackメソッドに渡す値を表すクライアントサイド・スクリプト, コールバック関数の名前(クライアントサイド・スクリプトで定義), コールバック関数に引き渡すコンテキスト値 )
サンプル
' 【2】ボタンのクリック時にコールバック発生させる ' (sampleCallbackを呼び出す)スクリプトを埋め込み Dim ceRef As String = _ Me.Page.ClientScript.GetCallbackEventReference( _ Me, _ ' ICallbackEventHandlerインターフェイスを実装したコントロール "document.getElementById('TextBox1').value", _ ' RaiseCallBackメソッドに渡す値を表すクライアントサイド・スクリプト "sampleCallback", _ ' コールバック関数の名前 "null") ' コールバック関数に引き渡すコンテキスト値 Button1.OnClientClick = ceRef & ";return false;"
使用上の注意
* GetCallbackEventReference()によって生成されたJavaScriptコードの末尾には、必ず「return false;」という1文を追加すること(明示的にクリック・イベントの発生を抑制するため)
【3】クライアント側の処理関数を定義する
GetCallbackEventReferenceメソッドの第2パラメータに、クライアント側の処理関数を定義する。 コールバック関数は、 第1パラメータとしてGetCallbackResultメソッドからの処理結果 第2パラメータとしてGetCallbackEventReferenceメソッドで指定されたコンテキスト値を受け取る。
サンプル
Public Class WebForm1 Inherits System.Web.UI.Page ' 【1】コールバックするためのインターフェイスを宣言 Implements System.Web.UI.ICallbackEventHandler ' コールバックのやり取りに使用する変数の定義 Private result As String Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim cs As ClientScriptManager ' 【3】クライアントにコールバックの値を受け取るスクリプトを埋め込み(sampleCallbackを定義) cs = Me.ClientScript Dim script As StringBuilder = New StringBuilder() script.Append("<script language='javascript' type='text/javascript'>") script.Append("function sampleCallback(result, context) {") script.Append(" document.getElementById('TextBox1').value = result;") script.Append("}") script.Append("</script>") cs.RegisterClientScriptBlock( _ Me.GetType, "sampleCallback", script.ToString()) ' 【2】ボタンのクリック時にコールバック発生させる ' (sampleCallbackを呼び出す)スクリプトを埋め込み Dim ceRef As String = _ Me.Page.ClientScript.GetCallbackEventReference( _ Me, _ "document.getElementById('TextBox1').value", _ "sampleCallback", _ "null") Button1.OnClientClick = ceRef & ";return false;" End Sub ' コールバックで使用するイベント(値を返す) Public Function GetCallbackResult() As String Implements System.Web.UI.ICallbackEventHandler.GetCallbackResult Return Me.result End Function ' 【1】コールバックで使用するイベント(呼び出されるイベント) Public Sub RaiseCallbackEvent(ByVal eventArgument As String) Implements System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent Select Case eventArgument Case "1" Me.result = eventArgument & "が押されました。ワン。" Case "2" Me.result = eventArgument & "が押されました。ツー。" Case "3" Me.result = eventArgument & "が押されました。さーん。" Case Else Me.result = eventArgument & "が押されました。その他~。" End Select End Sub End Class
参考文献
http://d.hatena.ne.jp/haradago/20100423/p1参考文献
http://www.atmarkit.co.jp/fdotnet/asp2review/asp2review08/asp2review08_03.html今後参考になるかも
http://mafactory.com/usersvoice/blogs/master/archive/2006/09/14/178.aspxhttp://surferonwww.info/BlogEngine/post/2011/04/02/Client-Callback.aspx
http://csharper.blog57.fc2.com/?tag=%A5%AF%A5%E9%A5%A4%A5%A2%A5%F3%A5%C8%A5%B3%A1%BC%A5%EB%A5%D0%A5%C3%A5%AF
http://msdn.microsoft.com/ja-jp/library/system.web.ui.clientscriptmanager.getcallbackeventreference%28v=vs.80%29.aspx