ASP.NET 2.0 Client Callback 淺析 – Ted??s Blog – 部落格園

來源:互聯網
上載者:User

ASP.NET 2.0 Callback 使得ASP.NET Server端控制項能夠調用服務端的方法而不需要執行一個完整的Postback過程,也就是說使得Server端控制項可以很好的支援Ajax。

Callback不同於Postback之處在於向伺服器發送請求時只有ViewState和使用者自訂資訊被發送到伺服器端,請求完畢後,只返回使用者自訂結果,而不會從Render頁面。

GridView控制項正是使用了這個技術來實現無重新整理的分頁及排序功能,那麼它是如何?的哪,我們又如何在自訂控制項中添加該功能哪?本文將會簡單地闡述如何使用ASP.NET 2.0 Callback來實現Ajax.
1. ICallbackEventHandler 介面
ASP.NET Server端控制項可以通過實現ICallbackEventHandler 介面來接受用戶端Callback事件。
ICallbackEventHandler 介面聲明:
1public interface ICallbackEventHandler
2{
3 string GetCallbackResult();
4 void RaiseCallbackEvent(string eventArgument);
5}

RaiseCallbackEvent負責處理用戶端回調事件,其中方法參數eventArgument是用戶端指令碼在觸發Callback時提供的,該方法將會依賴於eventArgument參數來進行處理。
GetCallbackResult則負責將處理結果作為String返回給用戶端指令碼。當Callback完成後用戶端指令碼將會根據得到的處理結果,進行頁面局部更新。
2. CallbackEventReference
那麼怎麼樣才能註冊一段用戶端指令碼來觸發Callback,還需要做些什麼哪?
ClientScriptManager類用於管理Web頁面中的用戶端指令碼,提供了一系列的方法來註冊指令碼,並且還可以獲得指定用戶端指令碼函數的引用。通過ClientScriptManager類的GetCallbackEventReference方法我們可以擷取一個對用戶端函數的引用。當該函數在用戶端被調用時,將啟動一次用戶端回調。

GetCallbackEventReference方法聲明:
public string GetCallbackEventReference (
Control control,
string argument,
string clientCallback,
string context,
string clientErrorCallback,
bool useAsync
)
第一個參數指的是實現ICallbackEventHandler介面的伺服器端控制項;
第二個參數將被傳遞給在伺服器端執行的RaiseCallbackEvent方法,它可以是一個JavaScript函數調用運算式;
第三個參數是一個JavaScript函數名,在Callback完成後,該函數將被調用,同時伺服器端函數GetCallbackResult的執行結果也將作為這一個函數的參數;
第四個參數是當前執行的Callback的上下文,這個參數也可以是一個JavaScript函數調用運算式;
第五個參數是一個JavaScript函數名,在Callback執行的過程中如果有錯誤產生,該函數將被調用。
第六個參數是一個Bool值來確定當前Callback應該被同步執行還是非同步執行。
擷取這個Callback用戶端函數的引用之後,我們可以註冊一個新的用戶端函數來調用它。然後再用戶端就可以通過新註冊的函數來進行Callback了。
3.樣本
我們通過一個簡單的例子來剖析ASP.NET 2.0 Callback的整個執行過程:
1public class MyControl : WebControl, ICallbackEventHandler
2 {
3 private const string Script1 = "function onCallbackComplete(result){ /n" +
4 " var element = document.getElementById(??%ID%??); /n" +
5 " if(element != null) /n" +
6 " element.innerHTML = result;} /n";
7
8 private const string Script2 = "function onCallbackError(){ /n" +
9 " var element = document.getElementById(??%ID%??); /n" +
10 " if(element != null) /n" +
11 " element.innerHTML = ??error??;} /n";
12
13 public string GetCallbackResult()
14 {
15 return "Callback result";
16 }
17
18 public void RaiseCallbackEvent(string eventArgument)
19 {
20 }
21
22 public override void RenderBeginTag(HtmlTextWriter writer)
23 {
24 writer.AddAttribute(HtmlTextWriterAttribute.Onclick, "DoClientCallBack()");
25 base.RenderBeginTag(writer);
26 writer.Write("My Callback control");
27 }
28
29 protected override void OnPreRender(EventArgs e)
30 {
31 //Define callback references.
32 string callbackRef = this.Page.ClientScript.GetCallbackEventReference(
33 this, "", "onCallbackComplete", null, "onCallbackError", true);
34
35 // Register script blocks will perform call to the server.
36 this.Page.ClientScript.RegisterClientScriptBlock(
37 this.GetType(), "DoClientCallBack",
38 "function DoClientCallBack() { " + callbackRef + "} /n", true
39 );
40
41 // Register other scripts
42 this.Page.ClientScript.RegisterClientScriptBlock(
43 this.GetType(), "onCallbackComplete",
44 Script1.Replace("%ID%", this.ClientID), true);
45 this.Page.ClientScript.RegisterClientScriptBlock(
46 this.GetType(), "onCallbackError",
47 Script2.Replace("%ID%", this.ClientID), true);
48
49 base.OnPreRender(e);
50 }
將上面的寫好的控制項放到一個Page上,在Runtime 當點擊該控制項的時候便會執行一次Callback,並且更新控制項內容。

執行順序:

其中WebForm_DoCallback和WebForm_CallbackComplete是微軟JavaScript庫中的方法。

ASP.NET 2.0 Callback提供了一種簡單的方法來使得ASP.NET Server段控制項可以支援AJAX,其本身可以看作是一種輕量級的Postback。

全文完。

本文轉自
http://www.cnblogs.com/tedzhao/archive/2008/05/26/1206514.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.