クライアントコールバック


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