CTOCIO IT专家网

天极传媒 比特网 | 天极网 | IT专家网 | IT商网 | 52PK游戏网 | 手机天极 | IT分众 |
IT专家网搜索

您现在的位置: IT专家网 > Web服务子站 > 技巧

Atlas 实现机制浅析(三)

作者: ,  出处:IT专家网社区, 责任编辑: 叶江, 
2006-10-24 13:00
  

  局部重绘模式的服务器端响应

  在第一小节中,我们曾提到 ScriptManager 在重载的 Web.UI.Control.OnInit 事件中,会根据页面请求中 delta = true 是否存在,判断当前页面是否处于局部重绘模式中,并接管 LoadComplete 时间来处理此模式。相应的 OnInit 事件还会在局部重绘模式中,主动接管 Page.Render 方法的逻辑来替换完整页面刷新。

protected override void OnInit(EventArgs e)
{
// 当不处于设计模式,且控件属于某个页面时
if (!DesignMode && (_page != null))
{
// 判断页面中是否只有一个 ScriptManager 实例,否则抛出异常
// 如果页面请求中 delta 属性为 true 则处于重绘模式
if (_page.Request.Headers["delta"] == "true"[img]/images/wink.gif[/img]
{
_inPartialRenderingMode = true; // 处于重绘模式
      _page.TraceEnabled = false; // 关闭 trace 支持
      
      // 根据每个 UpdatePanel 的重绘状态,返回实际的重绘结果
      _page.LoadComplete += new EventHandler(this.OnPageLoadComplete); 
}
// 完成前面提到的 Altas.js 和 XML 脚本的输出
_page.PreRenderComplete += new EventHandler(this.OnPagePreRenderComplete);
}
}
private void OnPagePreRenderComplete(object sender, EventArgs e)
{
// 是否在局部重绘模式中
if (_inPartialRenderingMode)
{  
// 接管 Page 的 Render 方法
    Page.SetRenderMethodDelegate(new RenderMethod(RenderPageCallback));
    return;
  }
  
  // ...
}

  
 
  在 OnPageLoadComplete 中,将遍历通过 RegisterUpdatePanel 注册到 ScriptManager 的所有 UpdatePanel,评估哪些区域是真正需要进行更新的 (UpdatePanel,评估哪些.RequiresUpdate = true),伪代码如下:

private void OnPageLoadComplete(object sender, EventArgs e)
{
for(UpdatePanel panel in _allUpdatePanels)
{
if(panel 是 Page.Form 的子控件 && panel.RequiresUpdate)
{
panel.SetPartialRenderingMode(true);
_updatePanels.Add(panel1);

  }
}
  
共5页。 1 2 3 4 5 :
  • 本文关键词:

网友评论

笔名 
请您注意:遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。    IT专家网友拥有管理笔名和留言的一切权利。
  • 周排行榜
  • 月排行榜

邮件订阅

       
天极服务 | 关于我们 | 网站律师 | 加入我们 | 联系我们 | 广告业务 | 友情链接 | 我要挑错