(轉)六步使用ICallbackEventHandler實現無刷新回調

原文出自:http://www.cnblogs.com/soso/archive/2006/06/08/420687.html

 

六步使用ICallbackEventHandler實現無刷新回調

    AJAX技術所提倡的無刷新回調,在原來的技術中需要寫大量的JavaScript代碼或使用一些AJAX框架,使得開發效率和可維護性大大降低。其實ASP.NET2.0中,已經提供了這樣的接口,這就是ICallbackEventHandler。
    關於ICallbackEventHandler網上已經有很多文章介紹了,這篇實爲畫蛇添足。

ICallbackEventHandler存在於System.Web.UI中,我們先做一個非常簡單的例子來試用一下。

   第一步,在VS2005中建立一個新的WEB窗件。
   第二步,在ASPX中,放上一段HTML代碼(如下):

1<body>
2    <form id="form1" runat="server">
3    <div>
4        <button onclick="CallServer()">CallServer</button>
5    </div>
6    </form>
7</body>


   第三步,然後在<HEAD></HEAD>中放入一段JavaScript腳本:

 1 <script type="text/javascript">
 2     function CallServer()
 3     {
 4         var product = "測試";
 5         <%= ClientScript.GetCallbackEventReference(this"product""ReceiveServerData",null)%>;
 6     }

 7     
 8     function ReceiveServerData(rValue)
 9     {
10         alert(rValue);
11     }

12 </script>

 

   第四步,在此ASPX的後臺CS代碼中,繼承ICallbackEventHandler接口,並實現接口中的兩個方法:
 ICallbackEventHandler.GetCallbackResult()
    和
 ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)

   第五步,增加一個變量CallBackValue,並修改接口的兩個方法爲:

 1 private string CallBackValue = string.Empty;
 2    
 3 string ICallbackEventHandler.GetCallbackResult()
 4 {
 5  return CallBackValue + ",ok";
 6 }

 7
 8 void ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)
 9 {
10  this.CallBackValue = eventArgument;
11 }

12

 

    第六步,運行,界面上會出現一個按鈕,點擊後,會將“測試”這個字符串傳至後臺,後臺C#代碼將字符串加上“,OK”後返回給客戶端的JavaScript代碼,並顯示。

    以上六步,就可以實現無刷新回調了。現在,我們來分析一下幾段代碼。
    先看第三步中的JavaScript代碼,其中的CallServer()方法中進行了回調,回調的語句爲:
<%= ClientScript.GetCallbackEventReference(this, "product", "ReceiveServerData",null)%>;
   
    裏面四個參數中第二個參數指定將product這個JavaScript中的字符串變量傳回後臺,第三個參數指定了從後臺返回時接收返回信息的JavaScript方法ReceiveServerData(string Value)。

    第五步中後臺的兩個方法,一個ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)用來接收前臺JavaScript中傳來的字符串變量,並賦值給內部變量this.CallBackValue,另一個方法ICallbackEventHandler.GetCallbackResult()將變更後的內部變量this.CallBackValue返回給前臺JavaScript方法ReceiveServerData(string Value)。

    調用的順序是: (前臺)CallServer() --> (後臺)ICallbackEventHandler.RaiseCallbackEvent(string eventArgument) --> (後臺)ICallbackEventHandler.GetCallbackResult() --> (前臺)ReceiveServerData(string Value)。

    整個調用過程非常簡單,而其中非常關鍵的一步是第三步的
<%= ClientScript.GetCallbackEventReference(this, "product", "ReceiveServerData",null)%>;
這個方法,以下是從網上找來的一段資料,大家可以看看。

GetCallbackEventReference使得客戶端方法在客戶端請求結束時得到回收。 它也讓CallBackManager 確定產生哪種回叫方法。 在這個例子內使用的被重載的方法是:

   public string GetCallbackEventReference(
      string target, string argument,
      string clientCallback, string  context,
string clientErrorCallback)
Table 1. GetCallBackEventReference 方法的參數描述。
Parameters Description target ID of the page where the callback invocation is handled. For more see the other overloaded options available in the next immediate section.In our sample "this" is the argument value, since the callback is handled in the same page.  argument This is the parameter defintion used to send value to the server. This value is received by parameter "eventArgument" at the server end using the RaiseCallbackEvent event."arg" becomes the first parameter name in our sample. The value is passed through this argument from the client. clientCallback Method name of the callback that is invoked after successful server call."CallBackHandler" is the method name that handles the callback.   context A parameter that is associated with the "argument" from the client. It usually should be used to identify the context of the call. You will understand this better from the sample implementation.In the sample "ctx" is just another parameter definition used. The value for this is passed from the client. clientErrorCallback Name of the method that is called from the CallBackManager in case of any errors.
從這個方法返回的string是:

  
   __doCallback('__Page',arg,CallBackHandler,ctx, ErrorCallBack)
 
另一個重載方法是:

   public string GetCallbackEventReference(
      Control control, string argument,
      string clientCallback, string  context)
  
   public string GetCallbackEventReference(
      Control control, string argument,
      string clientCallback,  string  context,
string clientErrorCallback)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章