Atlas 实现机制浅析(三)
【导读】与 .NET 和 Java 平台下其它 AJAX 框架相比,Altas 最大的亮点就在于与 ASP.NET 现有机制的无缝融合。通过 VS.NET 集成开发环境,使用者可以在对 js 和 AJAX 不甚了解的情况下,以非常自然的方式使用到最先进的技术。本文是Atlas 实现机制浅析(三),为此系列之末篇。
局部重绘模式的服务器端响应
在第一小节中,我们曾提到 ScriptManager 在重载的 Web.UI.Control.OnInit 事件中,会根据页面请求中 delta = true 是否存在,判断当前页面是否处于局部重绘模式中,并接管 LoadComplete 时间来处理此模式。相应的 OnInit 事件还会在局部重绘模式中,主动接管 Page.Render 方法的逻辑来替换完整页面刷新。
protectedoverridevoidOnInit(EventArgse) |
在 OnPageLoadComplete 中,将遍历通过 RegisterUpdatePanel 注册到 ScriptManager 的所有 UpdatePanel,评估哪些区域是真正需要进行更新的 (UpdatePanel,评估哪些.RequiresUpdate = true),伪代码如下:
privatevoidOnPageLoadComplete(objectsender,EventArgse) { for(UpdatePanelpanelin_allUpdatePanels) { if(panel是Page.Form的子控件&&panel.RequiresUpdate) { panel.SetPartialRenderingMode(true); _updatePanels.Add(panel1); } } } |
而 RenderPageCallback 中,则将取代 Page.Render 的原本逻辑,根据整理出的 _updatePanels 列表中的区域进行重绘。返回的内容将是一个 XML 格式的文档,包括重绘的内容(<rendering>、重绘的区域(<deltaPanels>以及相关 XML 脚本(<xmlScript>等。实现的伪代码如下:
privatevoidRenderPageCallback(HtmlTextWriterwriter,ControlpageControl) { Pagepage=(Page)pageControl; HttpResponseresponse=page1.Response; //关闭HTML缓存,设置返回文档类型为text/xml response.Cache.SetCacheability(HttpCacheability.NoCache); response.ContentType="text/xml"; //输出HTML头内容 writer.Write("<delta><rendering>"[img]/images/wink.gif[/img]; page.Header.RenderControl(writer); //输出Form成员的内容 HtmlFormform=page.Form; form.SetRenderMethodDelegate(newRenderMethod(this.RenderFormCallback)); form.RenderControl(writer); writer.Write("</rendering>"[img]/images/wink.gif[/img]; //输出重绘UpdatePanel的ID列表 writer.Write("<deltaPanels>"[img]/images/wink.gif[/img]; for(UpdatePanelpanelin_updatePanels) { //添加逗号分隔符 writer.Write(updatePanels.ClientID); } writer.Write("</deltaPanels>"[img]/ 相关新闻>>最新推荐更多>>>
|