http://www.dotblogs.com.tw/mis2000lab/archive/2008/09/23/postback_callback.aspx
以下章节,是已出版的新书中的第20章 Client CallBack
ASP.NET案例精编(清华大学出版社 / 作者MIS2000Lab)
http://www.china-pub.com/46063
2009/5/15上市
市场价 :¥59.80 RMB(人民幣)
===================================================================
以前介绍的AJAX功能(本书第十九章),几乎不用写程序就可以靠着 ScriptManager + UpdatePanel来完成。但是ASP.NET也有提供手写版本的AJAX功能,那就是本章介绍的 CallBack(回呼)。
使 用工具来开发AJAX固然快速,但因为初学者不知其所以然,常常误用而导致奇怪的执行结果(程序会跑,但结果怪怪的,会出现意料之外的状况)。本章的 CallBack虽然动手写程序比较累,但流程确定反而不容易出错。非常适合想要进一步提升自己功力的读者,进行自我锻炼。
20-1 PostBack(回传)与CallBack(回呼)的差别
ClientCallBack是从ASP.NET 2.0版才开始出现的新产物,透过CallBack我们可以完成AJAX的异步功能。有了前一章使用 UpdatePanel的经验,现在我们将探讨「理论」的部份。
CallBack 在VS 2008里面,GridView控件的属性就有一个「EnableSortingAndPagingCallBacks」,让排序与分页功能,可以使用 CallBack。简单的说,Client CallBack就是由Client端启动(触发)AJAX异步更新的功能。那么,以前介绍过的PostBack(回传)与目前介绍的 CallBack(回呼)差异在哪里呢?我们从执行面来分析之:
PostBack运作流程:
网页的Page事件,触发PostBack提出POST要求(Request)
1. Init2. Load State3. Process PostBackData4.Load5. PostBack Events6.Save State7. PreRender8. Render9. Unload
最后跟一般网页的要求(Request)一样,Server会回传一个响应(Response)给对方的浏览器。
图CallBack_01 传统PostBack的作法。
CallBack运作流程:
网页的事件触发CallBack给「Script EventHandler」来处理,然后Script EventHandler提出异步的要求(Async Request)
1. Init2. Load State3. Process PostBackData4.Load5. CallBack Event6. Unload
最后把CallBack的结果(即CallBack Result)传回去,对方(使用者的浏览器)就会收到Script CallBack了。
20-2 Client CallBack改进了什么?
在 ASP.NET Web网页的预设模型中,使用者会与网页互动并且按下按钮,或执行其它动作以产生回传(PostBack)。然后就会重新建立网页和控件、在服务器上执行网页程序代码,然后将新的内容(全部的新网页)送回浏览器呈现。这是传统的PostBack流程,如下:
1. ClientServer(第一次)。,使用者执行某个ASP.NET程序(想浏览某个网页)。
2. ServerClient。ASP.NET程序经过IIS翻译之后,变成HTML网页,传给使用者的浏览器。(这阶段,使用者要等待,因为大量数据传输中….)
3. ClientServer(互动阶段)。使用者看到网页之后,不管是输入数据、或是按下按钮(例如:GridView的编辑模式),数据将会再传回Web Server,作其它互动。
4. ServerClient。处理完成后,「全部的」网页画面,又传到使用者的浏览器上,「整个网页」都作更新。(这阶段,使用者要等待,因为大量数据传输中….)。
……如此周而复始,这些流程就是网页与用户的互动模式(不管ASP/JSP/PHP或ASP.NET,都是一样的)。
图CallBack_02 传统PostBack的流程。任何要求都会导致Server重新传回「整个画面」的资料。
但这种PostBack的传统方法,有两大缺点:
第一、如果网页中的Client端指令码(如JavaScript)是维护某些状态信息 (例如:区域变量值),则Client端回传网页的动作,并且取得新的网页内容,一定会摧毁原本的状态信息。
第二、网页的回传(PostBack)需要被Server处理,因此会产生降低Server的效能,使用者也必须等待一段时间,直到Server处理完成并把”全部”的数据传回给Client端的浏览器(如同上述流程的第三与第四状态)。
若 要避免遗失Client端状态、或是减轻Client端(即客户端,使用者的浏览器)与Web Server之间来回往返的处理负载,您可以撰写Client CallBack(客户端回呼)的 ASP.NET网页程序代码。在Client端 CallBack中,客户端JavaScript的function函式会将网页要求(Request)传送至 ASP.NET Web网页。此网页会执行其一般生命周期的修改版本。网页会进行初始化并且建立其控件与其它成员,然后呼叫特殊标记的方法。这种方法会开始处理编码,然 后将其它客户端JavaScript的Function函式能够读取的值,传回浏览器。(资料来源:微软MSDN网站)
在Client CallBack的整个程序中,网页会存在使用者的”浏览器”内,所以使用者完全不需要等待,反应速度快而且Web Server负担也轻。相同的作业流程,Client CallBack在上图的第三与第四阶段省了很多时间,加速后的CallBack流程如下:
3. ClientServer(互动阶段)。使用者看到网页之后,不管是输入数据、或是按下按钮等等。只有使用者触发的那一小部份,才会传回Web Server作处理。
4. ServerClient。Server处理完成后,只把「需要更新」的那一小部份网页,传到Client端(使用者的浏览器)。这阶段,Server只要处理并传递一小部份数据即可,所以Web Server负担减轻,使用者的浏览速度也变快很多…。
.......................后续章节,将会开始写程序。许多AJAX可以做到的功能,CallBack也可以作得到.........
===================================================================
另外,在本书的第十五章 Page类别一文里面,也提到相关的内容:
===================================================================
相关的程序,请看本网站的另外一篇文章---- AJAX与ListView的怪现象?--样版内,控件ID重复的问题
....................................................................................................寄信给我 mis2000lab (at)雅虎.com.台湾 ........
ASP.NET案例精编(清华大学出版社 / 作者MIS2000Lab)
http://www.china-pub.com/46063
2009/5/15上市
市场价 :¥59.80 RMB(人民幣)