ASP.NET 2.0当中的Call Back机制




连续几篇介绍ASP.NET当中的AJAX实现方式,主要的目的也是让读者可以有所比较,理解这几种作法之间的差异。

最后一个要介绍的,当然就是ASP.NET当中的Call Back机制。Call Back是ASP.NET 2.0当中内建的功能,不需要安装ASP.NET AJAX依旧可以相当有效率的呈现出AJAX效果。

我们看下面的页面,我们在页面上放置另一个TextBox2和HtmlButton(ID为CallBackButton,并设为在服务器端运行:


接着我们键入下面的代码:


我们先看运行的结果,您会发现,单击下方的HtmlButton,则网页不需要postback,TextBox2里面的Server端时间已经更新了:

怎么完成的呢?
这段代码必须好好解释一下,首先代码第三行有一个很不一样的地方:

0001:Partial Class _Default
0002: Inherits System.Web.UI.Page
0003: Implements System.Web.UI.ICallbackEventHandler

这表示这张.aspx网页支援Call Back机制(我们待会再来解释Call Back机制)。而因为网页支援Call Back机制,因此必须实现下面两个项目:


我们看先前的Form_Load代码:


请特别注意21-25行代码,23行的“GetCallbackEventReference”指令,建立了CallBack机制(ASP.NET 2.0会自动产生一段JavaScipt的CallBack代码),在第25行我们将此机制(JavaScript)挂到HtmlButon上。

Call Back的整个原理是:
1.在ASP.NET代码中,利用“GetCallbackEventReference”产生一段JavaScript的Call Back指令。
2.将这段Call Back指令挂到某个Html控件上,利用这段JavaScript指令在不postback的情况下,将数据(参数)回传到Server(参数包含下表中定义的argument, clientCallbackProc…) 。
3.Server端(.aspx.vb程式)接收到数据(参数)后进行处理,处理完后回呼(Call Back)Client端的JavaScript。
4.Client端的JavaScript函数,收到回呼的结果,动态更新网页内容。
就这样,不换页的情况下,我们就可以完成网页更新的效果。

我们回顾整个Call Back机制的流程,从开发人员的角度,看整个Call Back机制的运作方式:


您会发现分为下面几个步骤:
※步骤A:Client端启动Call Back机制。启动的方式是利用GetCallbackEventReference所建立的WebForm_DoCallback函数(JavaScript)。
※ 步骤B:Server端的RaiseCallbackEvent接收到Client端传入的参数,开始运作,这时多半处理一些数据库IO,更新Server端的状态。
※步骤C:GetCallbackResult被调用,这时候多半用来建立要回传给Client端的HTML码,例如一张表格,或是一段文字。
※ 步骤D:Client端接收到从GetCallbackResult传来的值(多半是刚才Build出来的HTML码),Client端的 ReceivedData函数是我们自己在Page_Load里面以RegisterStartupScript建立的,可以通过这个函数将接到的 HTML以JavaScript塞入页面中。

整个进程就完成了一个Call Back动作,可以达到不用换页(Postback)就更新页面的效果。