程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 六步使用ICallbackEventHandler實現無刷新回調

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

編輯:.NET實例教程

  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() --> (後台)ICallbackEve
ntHandler.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)


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved