クライアント・コールバックとは
ページをリロードせずにサーバーとやり取りする方法。 ポストバックによるパフォーマンスの低下を避ける方法として、クライアントコールバックを使ってサーバーのコードを実行できる。
ライアント・コールバックを利用するため
【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