|
|
2#

楼主 |
发表于 2008-10-31 15:17:08
|
只看该作者

浅析ASP.NET 2.0 Client 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 }
其中WebForm_DoCallback和WebForm_CallbackComplete是微软JavaScript库中的方法。
ASP.NET 2.0 Callback提供了一种简单的方法来使得ASP.NET Server段控件可以支持AJAX,其本身可以看作是一种轻量级的Postback。 |
|