Atlas 实现机制浅析(二)

来源:网络收集 责任编辑:栏目编辑 发表时间:2013-07-01 13:46 点击:

【导读】与 .NET 和 Java 平台下其它 AJAX 框架相比,Altas 最大的亮点就在于与 ASP.NET 现有机制的无缝融合。通过 VS.NET 集成开发环境,使用者可以在对 js 和 AJAX 不甚了解的情况下,以非常自然的方式使用到最先进的技术。本文续第一篇,是Atlas 实现机制浅析(二)。

UpdatePanel 与局部重绘模式 (Partial Rendering Mode)

在上一节介绍 Altas 整体结构时曾经提到,可以在启用局部重绘模式的情况下,通过通过 <altas:UpdatePanel .../> 标签定义需要异步更新的范围。

我们知道,传统的 HTTP 协议应用场景中,客户端在用户点击 submit 提交 form 的时候,一个 GET/POST 请求被发送到后台服务器;服务器则根据 form 的 action 指定页面,调用相应的处理者返回 HTML 格式的文本;返回结果并最终由客户端在浏览器中绘制,通常导致浏览器一次明显的刷新。

这种模式从 Web 早期的 CGI 一直沿用到现在的 ASP.NET 中。其优点是简单易用且较为成熟,缺点则是刷新明显且速度慢。因为一个页面中可能大多数内容在此次请求中是无需改变的,而这部分冗余的内容在每次请求都会被反复传输。尤其是对一些交互性较强的页面,每个操作都沿用这个冗长的流程,响应速度和负载都是难以容忍的。期间大家也想过很多缓解方法,例如使用 iframe 等嵌入帧封装独立部件,或者在服务器端针对不同区域进行缓存等等,但因为都还是基于这个传统思路,无法从本质上解决问题。

而对遵循 AJAX 思想的 Altas 框架,则是大大迈出一步,真正实现按需出发进行重绘。

  • 首先,页面在定义时可以根据逻辑被分成若干个更新区域,通过 <altas:UpdatePanel .../> 标签直接定义。
  • 其次,Altas 将接管 ASP.NET 客户端的顶级 Post Back 用 form,并针对局部重绘模式加入特定的参数。
  • 然后,Altas 将接管 ASP.NET 服务器端的页面重绘方法。如果是在局部重绘模式下,则对客户端请求进行解析,并判断需要对那些区域进行重绘。可以通过在 UpdatePanel 中指定重绘条件,来避免不必要的重绘操作。

最后,重绘的结果会被封装成 XML 脚本,通过异步的 XMLHTTP 方式传递会客户端。客户端 Altas 引擎对返回内容进行解析后,更新到页面的相应控件上。

整个过程完全由 Altas 自动在后台完成,不会对前台页面造成刷新或其它的影响。

接下来我们来详细了解一下,Altas 是如何完成这一奇妙的功能。

首先,在 ScriptManager 启用局部重绘模式后(ScriptManager.EnablePartialRendering = true),可以通过 UpdatePanel 定义任意多个更新区域,例如:

<atlas:UpdatePanelrunat="server"ID="UpdatePanel1">

<ContentTemplate>

<strong><spanstyle="text-decoration:underline">ShippingAddress</span>:</strong>

<br/>

<asp:LabelID="lblFirstLineShipping"runat="server"Font-Bold="False"></asp:Label><br/>

<asp:LabelID="lblSecondLineShipping"runat="server"></asp:Label><br/>

<asp:LabelID="lblThirdLineShipping"runat="server"></asp:Label><br/>

</ContentTemplate>

</atlas:UpdatePanel>

更新区域的实际内容,在 ContentTemplate 属性定义。UpdatePanel.ContentTemplate 是一个 ITemplate 接口类型的属性。ASP.NET 通过此接口来定义服务端控件与其子控件的关系,定义如下:

[ParseChildren(true),PersistChildren(false)]

publicclassUpdatePanel:Control

{

[TemplateInstance(TemplateInstance.Single),PersistenceMode(PersistenceMode.InnerProperty)]

publicITemplateContentTemplate{get;set;}

}

而如果希望显式指定更新的触发条件,则可以通过 Triggers 属性定义,例如下列代码指定,只有在触发了 btnTrigger 按钮的 Click 事件后,才需要对 UpdatePanel2 区域进行重绘。

<asp:Buttonrunat="server"ID="btnTrigger"Text="Trigger"

onClick="btnTrigger_Click"/>
<
    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1