CallBack BasePage (簡化 CallBack 回呼程式碼)

在 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   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 

*.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 >


你可能感兴趣的:(callback)