上篇写道怎样用ASP.NET来实现页面的局部刷新,现在来说说它的实现机制。看下面的代码:
1 protected void Page_Load(object sender, EventArgs e)
2 {
3 txtTime.Value = DateTime.Now.ToString();
4
5 string callBackRef
6 = ClientScript.GetCallbackEventReference(this, string.Empty, "getTime", string.Empty);
7 btnGetTime.Attributes["onclick"] = callBackRef;
8 }
2 {
3 txtTime.Value = DateTime.Now.ToString();
4
5 string callBackRef
6 = ClientScript.GetCallbackEventReference(this, string.Empty, "getTime", string.Empty);
7 btnGetTime.Attributes["onclick"] = callBackRef;
8 }
在page_load事件中,我们给按钮btnGetTime的onclick属性(事件)赋值。这个值是通过ClientScript获得的客户端CallBack函数引用。再看客户端生成的情况:
1 <div>
2 <input name="txtTime" type="text" id="txtTime" readonly="readonly" value="2006-12-20 21:25:53" />
3 <input name="btnGetTime" type="button" id="btnGetTime" value="Get"
4 onclick="WebForm_DoCallback('__Page',"",getTime,"",null,false)" />
5 </div>
2 <input name="txtTime" type="text" id="txtTime" readonly="readonly" value="2006-12-20 21:25:53" />
3 <input name="btnGetTime" type="button" id="btnGetTime" value="Get"
4 onclick="WebForm_DoCallback('__Page',"",getTime,"",null,false)" />
5 </div>
我们可以看到按钮btnGetTime的onclick事件将会调用WebForm_DoCallback函数。之所以把这篇文章放到AJAX分类中来就是因为这个函数了,现在看看这个函数是如何实现的:
1
var __pendingCallbacks = new Array();
2
var __synchronousCallBackIndex = -1;
3
}
2
3
这个代码着实有些长了,但是仔细观察4--44行,有些AJAX基础的人马上就能识别出这是使用XmlHttpRequest进行发送请求的,callback函数也设置为我们在page_load函数中设置为getTime。当服务器完成响应后,会回调getTime函数,将服务器返回的时间字符串设置到文本框中。
本文提供了一个非常简单的ASP.NET无刷新页面的实现,利用了ASP.NET原本就有的函数,这也进一步说明AJAX不是一个新的东西。本文提供的方法当然可以扩展到更广泛的应用中,利用服务器返回的字符串(可以是普通的字符串,当然也可以为作用更大的xml和html片断)动态的改变页面的局部区域。