在 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 回傳結果)。

 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 ObjectByVal 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 StringImplements 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 ObjectByVal 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 ObjectByVal 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>


posted on 2007-12-10 13:00  jeff377  阅读(1542)  评论(2编辑  收藏  举报