Web Form lifecycle[翻译]

    发现最近总有网友写自定义控件,但是对页面的生命周期不是很熟悉,在这我翻译Jesse Liberty书中关于生命周期的部分给大家,希望有所帮助

   当用户在浏览器中输入网址. 一个伴随着文字,图片,按钮的网页就出现了,她在text box中输入文字后点击按钮提交,那么在后台会发生些什么呢?

   每次请求web服务器都会进行有步骤的响应. 这些步骤,从开始到结束,就构成了也面的生命周期

   当一个也面被请求,它被载入, 处理, 发送给用户, 被卸载. 从一次生命周期的结束到另一次结束, 主要是向浏览器呈现一些HTML. 每一步, 都有很多可用的方法和事件让你来重载默认的页面载入设置.

   为了充分理解页面和控件的生命周期,搞懂Page页类如何在页面上创建一个分层的控件树是必要的,除了页面上的一些注释和页面指令外,页面上的所有组件 ,都是控件树的一部分. 你可以在任何页面指令上加入adding trace="true"来查看页面的控件树

   Page类是控件树的根,所有的控件在控件树中,通过控件标识control ID被引用.静态文本,包括空格,换行, HTML标记在树中通过LiteralControls表示.树中控件的次序是严格分层次级别的,在一个给定的层次级别中,控件树中的所有控件同时显示在page中

下面将详细描述WEB页上的组件在生命周期的每一状态. 其中events在生命周期中的第一次加载页面和后来的页面回传有些细微的差别.下面图就是表示的就是页面的周期


 

如果页面是第一次载入,那么生命周期是由下面几个步骤组成的:

1. 初始化

初始化阶段是任何页面或控件生命周期的第一阶段.在第一阶段构建了控件树. 初始化阶段通过控制Init事件和OnInit方法进行修改

2.加载

加载用户端输入,并且页面控件显示客户端输入数据,加载阶段可以通过控制Load事件和OnLoad方法进行修改

3.预呈现

这个阶段就在输出被呈现之前,子控件被访问了, 在预呈现

中, CreateChildControls方法被访问,如果有必要,可以在控件树中创建和初始化服务器控件. 可以通过PreRender事件和 OnPreRender进行修改

4.保存视图状态

视图状态被保存到页面一个不可见的隐藏字段中.保存视图状态阶段中可以通过使用SaveViewState方法进行重载

5呈现

页面和控件被以HTML的形式呈现,你可以重载Render方法, 在Render方法中, CreateChildControls方法被访问, 如果有必要, 可以在控件树中创建和初始化服务器控件.

6.销毁

这是生命周期的最后阶段. 它给你一个机会来清理和释放一些”昂贵”资源的引用,例如数据库连接.可以使用 Dispose方法进行修改

在用户提交页面后, 生命周期是:

1.    初始化

和第一次加载相同.

2.    加载视图

控件的属性通过提交的页面的隐藏字段来加载, 你可以通过重载 LoadViewState 方法来修改他.

3.    加载回传数据

在这个阶段, 数据通过POST方法被发送到服务器上.经过LoadPostData方法所有的视图状态的更新成为必要

页面加载

和第一次加载相同.

4.    唤醒改变事件

如果当前状态和提交前的状态有所不同,那么改变事件就通过RaisePostDataChangedEvent被唤醒,如:TextBox的Text值改变,有了输入,等等

5.    处理回传事件

确切的说当一个用户行为触发了回传(例如点击提交按钮), 在所有的改变事件被处理后,回传事件才在RaisePostBackEvent方法中被处理
6.预呈现

和第一次加载相同.

7保存视图状态

和第一次加载相同.

8呈现

和第一次加载相同.

9销毁

和第一次加载相同.

 

posted on 2005-12-03 04:03  kasafuma  阅读(441)  评论(0编辑  收藏  举报