ASP.NETでは通常、ボタンをクリックするなどのイベントでコールバックが発生しページ全体のリロードが発生する。
クライアントコールバックを使うとページ全体のリロードを発生させず、レスポンスをが向上させることができる。
Ajaxみたいなもの。
以下、使用例
Default.aspx.vb (サーバ側)
Partial Public Class _Default Inherits System.Web.UI.Page '★コールバックするためのインターフェイスを宣言 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 Dim strScript As String '★クライアントにコールバックの値を受け取るスクリプトを埋め込み(func_callbackを定義) cs = Me.ClientScript strScript = "" strScript = strScript & "<script language='javascript' type='text/javascript'>" strScript = strScript & "function func_callback(result,context) {" strScript = strScript & " document.getElementById('TextBox1').value = result;" strScript = strScript & "}" strScript = strScript & "</script>" cs.RegisterClientScriptBlock(Me.GetType, "func_callback", strScript) '★ボタンのクリック時にコールバック発生させる(func_callbackを呼び出す)スクリプトを埋め込み Dim ceRef As String = _ Page.ClientScript.GetCallbackEventReference( _ Me, _ "document.getElementById('TextBox1').value", _ "func_callback", _ "null") Button1.OnClientClick = ceRef & ";return false;" End Sub '★コールバックで使用するイベント(値を返す) Public Function GetCallbackResult() As String Implements System.Web.UI.ICallbackEventHandler.GetCallbackResult Return result End Function '★コールバックで使用するイベント(呼び出されるイベント) Public Sub RaiseCallbackEvent(ByVal eventArgument As String) Implements System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent Select Case eventArgument Case "1" : result = "one" Case "2" : result = "two" Case "3" : result = "three" Case Else : result = "other" End Select End Sub End Class
Default.aspx (画面のデザイン)
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="webapp1._Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>無題のページ</title> </head> <body> <form id="form1" runat="server"> <div> <asp:Button ID="Button1" runat="server" Text="Button" /> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox></div> </form> </body> </html>
クライアントコールバックを使用してもPage_Loadは発生する。
また、クライアントコールバックの場合はIsCallBackプロパティがTrueとなる。
動作確認環境:Visual Stadio 2005