使用ICallbackEventHandler接口可以方便地高效地實現Ajax功能 1、處理頁面需實現ICallbackEventHandler接口,此接口有兩個方法 a、GetCallbackResult 此方法返回處理結果給客戶端,請求完成後自動調用 b、RaiseCallbackEvent此方法是從客戶端獲取數據 由參數eventArgument 接收,並進行相關處理得出結果 2、注冊回調和主調腳本 a、注冊回調函數 string reference = Page.ClientScript.GetCallbackEventReference(this, "arg", "SendData", "context"); 注冊一個對於回調函數的引用,用於獲取返回結果,並進行業務邏輯處理,注冊的函數名和客戶端書寫的函數名需相同才能引用 b、注冊主調函數,主調函數,像服務器發送請求 string regCallbakeScript = "function CallServer(arg,context){" + reference + "}"; Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "CallServer", regCallbakeScript, true); c、客戶端腳本:一個回調函數fucntion SendData(arg,context){alert(arg);} 直接調用CallServer函數發送請求 [csharp] 服務端代碼 [csharp] /// <summary> /// 實現ICallbackEventHandler接口,完成Ajax更快的功能 /// </summary> public partial class _Default : System.Web.UI.Page,ICallbackEventHandler { private string returnValue = string.Empty; protected void Page_Load(object sender, EventArgs e) { //注冊回調腳本、具體實現自己寫,此腳本中接收返回結果 string reference = Page.ClientScript.GetCallbackEventReference(this, "arg", "SendData", "context"); //注冊處理腳本 string regCallbakeScript = "function CallServer(arg,context){" + reference + "}"; Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "CallServer", regCallbakeScript, true); } #region ICallbackEventHandler 成員 /// <summary> /// 返回結果 /// </summary> /// <returns></returns> public string GetCallbackResult() { if (string.IsNullOrEmpty(returnValue)) return (returnValue = "-1"); return returnValue; } /// <summary> /// 觸發RaiseCallbackEvent事件獲取客戶端數據,然後進行處理 /// </summary> /// <param name="eventArgument"></param> public void RaiseCallbackEvent(string eventArgument) { returnValue = eventArgument; } #endregion } [javascript] 客戶端腳本代碼: [javascript] <script type="text/javascript"> //接收回調結果,此函數在處理服務器完成後自動回調,即為回調函數,相當Ajax中的回調函數 function SendData(arg) { alert(arg); } //客戶端邏輯函數 function GetReturnValue() { var arg = "Hello CallbackEventHandler!"; //調用頁面加載完成後注冊的腳本,傳遞參數'arg'由服務器進行處理,第二個參數'context'不用傳遞 CallServer(arg,""); } </script> <input type="button" value="CallbackMe" id="btn" onclick="GetReturnValue()" />