asp.NET自定义服务器控件内部细节系列教程二
如大家要转载,请保留本人的版权:
/*
*Description:asp.NET自定义服务器控件内部细节系列教程
*Auther:崇崇-天真的好蓝
*MSN:chongchong2008@msn.com
*Dates:2007-05-20
*Copyright:ChongChong2008 YiChang HuBei China
*/
二 控件的生命周期
控件的生命周期决定何时保存控件和恢复它的状态,何时与页面及其它控件之间进行交互,何时执行主要的处理逻辑,以及何时对输出流显示标记文本。
----------------------------------------
+ 实例化:构造器
----------------------------------------
----------------------------------------
+ 初始化:OnInit方法和Init事件
----------------------------------------
----------------------------------------
+ 开始跟踪视图状态:TraceViewState 方法
----------------------------------------
|只回传时发生
-------------------------------------------------------
++ 开始跟踪视图状态:TraceViewState 方法
-------------------------------------------------------
-------------------------------------------------------
++ 加载回传数据:IPostBackDataHandler.LoadPostdata 方法
-------------------------------------------------------
----------------------------------------
+ 加载:OnLoad方法和Load事件
----------------------------------------
|只回传时发生
-------------------------------------------------------------------
++ 引发修改事件:IPostBackDataHandler.RaisePostDataChangedEvent方法
-------------------------------------------------------------------
-------------------------------------------------------------------
++ 引发回传事件:IPostBackEventHandler.RaisePostBackEvent方法
-------------------------------------------------------------------
----------------------------------------
+ 预生成:OnPreRender方法和PreRender事件
----------------------------------------
----------------------------------------
+ 保存视图状态:SaveViewState方法
----------------------------------------
----------------------------------------
+ 生成:Render方法
----------------------------------------
----------------------------------------
+ 卸载:OnUnload方法和Unload事件
----------------------------------------
----------------------------------------
+ 释放:Dispose方法
----------------------------------------
初始化阶段的末尾,页面自动调用控件的TraceViewState方法,TraceViewState方法保证在此阶段之后,使用ViewState字典属性而产生的变化保存在控件图状态中。
加载视图状态发生在回传时,而不是初始请求过程中,在此阶段中,控件必须把其状态恢复到它在处理先前的请求结束的情况,页面框架自动恢复ViewState字典。如果控件需要自定义状态管理,必须通过重载LoadViewState方法来实现自定义的状态恢复。
加载回传数据和引发修改事件阶段,只在控件通过现实IPostBackDataHandler接口参与了回传数据处理时,这个阶段才发生在回传中。
引发回传事件阶段只在控件通过现实IPostBackEventHandler接口参与了回传事件处理时,此阶段才发生在回传中。可以通过实现IPostBackEventHandler接口的RaisePostBackEvent方法来实现逻辑,以便把客户端事件映射到服务器端事件。
预生成阶段,应该通过重载OnPreRender方法,执行在生成控件之前所需要的任何工作,如注册客户端脚本。
实现自己的服务器事件和回传机制
保存视图状态阶段,如果控件不维持状态或它为保存状态信息而使用ViewState字典,那么不必再此阶段实现任何逻辑,页面框架自动保存ViewState字典。如果控件需要自定义的状态管理,必须通过重载SaveVeiwState方法来实现自定义状态的恢复。在此阶段以后任何控件的改变都不会保存在控件视图状态中。
生成阶段,控件在输出流上通过重载Control的Render方法或WebControl的Rendering方法中的一种,来书写标记文本。