惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

B
Blog
量子位
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Last Week in AI
Last Week in AI
酷 壳 – CoolShell
酷 壳 – CoolShell
人人都是产品经理
人人都是产品经理
Jina AI
Jina AI
雷峰网
雷峰网
博客园_首页
WordPress大学
WordPress大学
博客园 - 司徒正美
爱范儿
爱范儿
博客园 - 聂微东
IT之家
IT之家
美团技术团队
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
有赞技术团队
有赞技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
Tailwind CSS Blog
博客园 - Franky
V
V2EX
GbyAI
GbyAI
阮一峰的网络日志
阮一峰的网络日志

博客园 - 随风而逝

现况调查的方法及种类 GDP VS2005调试问题解决方案集锦 QQ技术攻略-原来隐藏着这么多秘密 WebService中使用自定义类的解决方法(5种) 英语谚语500句 房产证的作用 五证 10 signs that you’re not cut out to be an IT manager 重新飞翔 你还想熬夜吗? 使用ADOMD.NET建立与Analysis Services的连接 关于MS数据仓库备份 微软的Analysis Services无法连接 如何使用ADOMD执行OLAP操作 表中某列被修改后触发器SQL例子 如何调试触发器 sql server 2005中的DDL触发器 SQL语句备忘录
母版页运行机制
随风而逝 · 2008-06-12 · via 博客园 - 随风而逝

当客户端浏览器向服务器发出请求,要求浏览页面时,ASP.NET执行引擎将执行内容页和母版页的代码,并将最终结果发送给客户端浏览器。整个过程如图5-3所示。

5-3  运行过程图

母版页和内容页的运行过程可以概括为以下5个步骤。

1)用户通过键入内容页的URL来请求某页。

2)获取内容页后,读取@ Page指令。如果该指令引用一个母版页,则也读取该母版页。如果是第一次请求这两个页,则两个页都要进行编译。

3)母版页合并到内容页的控件树中。

4)各个Content控件的内容合并到母版页中相应的ContentPlaceHolder控件中。

5)呈现得到结果页。

整个过程具有很强的逻辑性,并且母版页和内容页配合的非常巧妙。从用户角度来看,合并后的母版页和内容页是一个完整的页面,并且其URL访问路径与内容页的路径相同。从开发人员角度来看,控件的巧妙应用和配合,是实现的关键。注意,在运行时,母版页成为了内容页的一部分。实际上,母版页与用户控件的作用方式大致相同,即作为内容页的一个子级,并作为该页中的一个容器。然而,当前母版页是所有呈现到浏览器中的服务器控件的容器。此时,回想过去使用的#include、用户控件等实现方法,则可以更加深入理解母版页功能。

母版页和内容页的事件过程:
具体过程如图5-4所示。

5-4  母版页和内容页加载过程图

加载母版页和内容页共需要经过8个过程。这8个过程显示初始化和加载母版页及内容页是一个相互交叠的过程。基本过程是,初始化母版页和内容页控件树,然后,初始化母版页和内容页页面,接着,加载母版页和内容页,最后,加载母版页和内容页控件树。以上8个过程对应着11个具体事件。这些事件如下所示。

1)母版页中控件Init事件;
  
2)内容页中Content控件Init事件;
  
3)母版页Init事件;
  
4)内容页Init事件;
  
5)内容页Load事件;
  
6)母版页Load事件;
  
7)内容页中Content控件Load事件;
  
8)内容页PreRender事件;
  
9)母版页PreRender事件;
  
10)母版页控件PreRender事件。
  
11)内容页中Content控件PreRender事件。

实际上,8个过程或者是11个事件都用于说明母版页和内容页中的具体事件顺序。内容页和母版页中会引发相同的事件。例如,两者都引发InitLoadPreRender事件。引发事件的一般规律是,初始化Init事件从最里面的控件(母版页)向最外面的控件(Conetent控件及内容页)引发,所有其他事件则从最外面的控件向最里面的控件引发。需要牢记,母版页会合并到内容页中,并被视为内容页中的一个控件,这一点十分有用。

在创建应用程序中,必须注意以上事件顺序。例如,当在内容页中访问母版页的属性或者服务器控件时,如果按照过去的处理思路,可能会在内容页的Page_Load事件处理程序中加以实现。