在 ASP.NET 中若要使用 CallBack 機制必需實作 System.Web.UI.ICallbackEventHandler
介面,若很多頁面都需要使用 CallBack 機制時,可以在 BasePage 實作
System.Web.UI.ICallbackEventHandler 介面就好,讓 BasePage 引發 CallBack
回呼的事件,這樣在使用 CallBack 時就可以更簡單。
以下的範例就是撰寫一個支援 CallBack 回呼的 BasePage,當頁面執行 CallBack 回呼時,會引發 CallBack 事件,開發人員只需在 CallBack 事件中判斷傳入值,並處理回傳值。
先撰寫一個實作 實作 System.Web.UI.ICallbackEventHandler 介面的 TBBasePage,其中 CallBack 回呼時會引發「CallBack 事件」,CallBackEventArgs 事件引數包含 Argument 屬性(CallBack 傳入參數) 及 Result 屬性 (CallBack 回傳結果)。
當頁面需要 CallBack 時,只需要繼承 TBBasePage,在「CallBack 事件」中以 e.Argument 判斷傳入參數,並將回傳結果寫入 e.Result。以下範例就是繼承 TBBasePage,利用 CallBack 方式「取得伺服端時間」。
*.aspx.vb
*.aspx 程式碼如下,其中 ReceiveServerData 為接收 CallBack 回傳的 JavaScript 函式。
以下的範例就是撰寫一個支援 CallBack 回呼的 BasePage,當頁面執行 CallBack 回呼時,會引發 CallBack 事件,開發人員只需在 CallBack 事件中判斷傳入值,並處理回傳值。
先撰寫一個實作 實作 System.Web.UI.ICallbackEventHandler 介面的 TBBasePage,其中 CallBack 回呼時會引發「CallBack 事件」,CallBackEventArgs 事件引數包含 Argument 屬性(CallBack 傳入參數) 及 Result 屬性 (CallBack 回傳結果)。
1 Imports Microsoft.VisualBasic
2
3 Public Class TBBasePage
4 Inherits System.Web.UI.Page
5 Implements System.Web.UI.ICallbackEventHandler
6
7 Private FEventArgument As String = String.Empty
8
9 #Region " CallBack 事件 "
10
11 ''' <summary>
12 ''' CallBack 事件引數。
13 ''' </summary>
14 Public Class CallBackEventArgs
15 Inherits System.EventArgs
16
17 Private FArgument As String = String.Empty
18 Private FResult As String = String.Empty
19
20 ''' <summary>
21 ''' CallBack 傳入參數。
22 ''' </summary>
23 Public Property Argument() As String
24 Get
25 Return FArgument
26 End Get
27 Set(ByVal value As String)
28 FArgument = value
29 End Set
30 End Property
31
32 ''' <summary>
33 ''' CallBack 回傳結果。
34 ''' </summary>
35 Public Property Result() As String
36 Get
37 Return FResult
38 End Get
39 Set(ByVal value As String)
40 FResult = value
41 End Set
42 End Property
43 End Class
44
45 ''' <summary>
46 ''' 執行 CallBack 回傳的事件。
47 ''' </summary>
48 Public Event CallBack(ByVal sender As Object, ByVal e As CallBackEventArgs)
49
50 #End Region
51
52 Public Function GetCallbackResult() As String Implements System.Web.UI.ICallbackEventHandler.GetCallbackResult
53 Dim e As New CallBackEventArgs()
54
55 e.Argument = FEventArgument
56 RaiseEvent CallBack(Me, e) '引發 CallBack 事件
57 Return e.Result
58 End Function
59
60 Public Sub RaiseCallbackEvent(ByVal eventArgument As String) Implements System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent
61 FEventArgument = eventArgument
62 End Sub
63 End Class
64
2
3 Public Class TBBasePage
4 Inherits System.Web.UI.Page
5 Implements System.Web.UI.ICallbackEventHandler
6
7 Private FEventArgument As String = String.Empty
8
9 #Region " CallBack 事件 "
10
11 ''' <summary>
12 ''' CallBack 事件引數。
13 ''' </summary>
14 Public Class CallBackEventArgs
15 Inherits System.EventArgs
16
17 Private FArgument As String = String.Empty
18 Private FResult As String = String.Empty
19
20 ''' <summary>
21 ''' CallBack 傳入參數。
22 ''' </summary>
23 Public Property Argument() As String
24 Get
25 Return FArgument
26 End Get
27 Set(ByVal value As String)
28 FArgument = value
29 End Set
30 End Property
31
32 ''' <summary>
33 ''' CallBack 回傳結果。
34 ''' </summary>
35 Public Property Result() As String
36 Get
37 Return FResult
38 End Get
39 Set(ByVal value As String)
40 FResult = value
41 End Set
42 End Property
43 End Class
44
45 ''' <summary>
46 ''' 執行 CallBack 回傳的事件。
47 ''' </summary>
48 Public Event CallBack(ByVal sender As Object, ByVal e As CallBackEventArgs)
49
50 #End Region
51
52 Public Function GetCallbackResult() As String Implements System.Web.UI.ICallbackEventHandler.GetCallbackResult
53 Dim e As New CallBackEventArgs()
54
55 e.Argument = FEventArgument
56 RaiseEvent CallBack(Me, e) '引發 CallBack 事件
57 Return e.Result
58 End Function
59
60 Public Sub RaiseCallbackEvent(ByVal eventArgument As String) Implements System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent
61 FEventArgument = eventArgument
62 End Sub
63 End Class
64
當頁面需要 CallBack 時,只需要繼承 TBBasePage,在「CallBack 事件」中以 e.Argument 判斷傳入參數,並將回傳結果寫入 e.Result。以下範例就是繼承 TBBasePage,利用 CallBack 方式「取得伺服端時間」。
*.aspx.vb
1 Partial Class _Default
2 Inherits TBBasePage
3
4 Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
5 'Button1 的 onclick 執行 CallBack 回伺服端
6 btnCallBackButton.Attributes("onclick") = Me.ClientScript.GetCallbackEventReference(Me, "", "ReceiveServerData", "")
7 End Sub
8
9 ''' <summary>
10 ''' CallBack 的回呼事件。
11 ''' </summary>
12 Protected Sub Page_CallBack(ByVal sender As Object, ByVal e As TBBasePage.CallBackEventArgs) Handles Me.CallBack
13 e.Result = Now.ToString() '傳回伺服端時間
14 End Sub
15 End Class
16
2 Inherits TBBasePage
3
4 Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
5 'Button1 的 onclick 執行 CallBack 回伺服端
6 btnCallBackButton.Attributes("onclick") = Me.ClientScript.GetCallbackEventReference(Me, "", "ReceiveServerData", "")
7 End Sub
8
9 ''' <summary>
10 ''' CallBack 的回呼事件。
11 ''' </summary>
12 Protected Sub Page_CallBack(ByVal sender As Object, ByVal e As TBBasePage.CallBackEventArgs) Handles Me.CallBack
13 e.Result = Now.ToString() '傳回伺服端時間
14 End Sub
15 End Class
16
*.aspx 程式碼如下,其中 ReceiveServerData 為接收 CallBack 回傳的 JavaScript 函式。
1 <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>
2
3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
4 <html xmlns="http://www.w3.org/1999/xhtml">
5 <head runat="server">
6 <title>未命名頁面</title>
7
8 <script type="text/javascript">
9 function ReceiveServerData(rValue)
10 {
11 var o = document.getElementById("Label1");
12 o.innerText = rValue;
13 }
14 </script>
15
16 </head>
17 <body>
18 <form id="form1" runat="server">
19 <div>
20 <input id="btnCallBackButton" runat="server" type="button" value="CallBack Click" /><br />
21 Server Time:
22 <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label></div>
23 </form>
24 </body>
25 </html>
26
27 </script>
2
3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
4 <html xmlns="http://www.w3.org/1999/xhtml">
5 <head runat="server">
6 <title>未命名頁面</title>
7
8 <script type="text/javascript">
9 function ReceiveServerData(rValue)
10 {
11 var o = document.getElementById("Label1");
12 o.innerText = rValue;
13 }
14 </script>
15
16 </head>
17 <body>
18 <form id="form1" runat="server">
19 <div>
20 <input id="btnCallBackButton" runat="server" type="button" value="CallBack Click" /><br />
21 Server Time:
22 <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label></div>
23 </form>
24 </body>
25 </html>
26
27 </script>