.NET 控件生命周期
控件生命周期是按照时间,即控件生成过程的先后顺序,控件在每个阶段完成控件生成特定功能。一般控件的生命周期可以分为十一个阶段。其中Systen.Web.Page划分的更加详细。Page控件是所有控件的容器,Page控件的生成也意味着它里面所有的子控件也已经生成,它的生成过程也是它的子控件生成过程,而且Page还负责管理主题、管理母版页等好多方面。一般说来在Page的PreiInit事件完成设置母版页和主题属性。Page的Init阶段要依次激发子控件的Init事件,初始化子控件,并为子控件命名容器。Page的InitComplete阶段是要使控件具有试图能力。
1.初始化(对应OnInit方法)
完成控件初始化,通过ProcessRequest方法遍历它的子控件,使子控件调用它们的OnInit方法,可以重写此方法增强控件功能。在这个阶段还要做的就是打开控件的视图跟踪功能,具体调用TrackViewState方法,这样存储在ViewState对象里面的值在页面回发时刻才能恢复到控件属性中。
2.加载视图状态(对应LondViewState方法)
本阶段仅在页面回发时执行(页面未禁用视图状态),主要完成加载视图状态到控件任务,
3.加载回传数据(对应LoadPostDate方法)
本阶段仅在页面回发时执行。它是实现接口IPostBackDateHandler的一个方法,要实现数据回传功能必须实现此接口,其中本方法的参数NameValueCollection类型对象装载了客户端提交的数据。另外,在本方法中根据控件旧值和新值的比较返回一个bool类型值,还可以决定是否执行下面的RaisePostDateChangedEvent方法。
4.装载(对应OnLoad方法)
页面装载时先执行页面的Page_Load事件,然后执行子控件的此方法。
5.数据回传事件通知(对应RaisePostDataChangedEvent方法)
此阶段仅在页面回发时执行,此方法也是实现IPostBackDataHandler接口的一个方法,此方法与上面LoadPostData匹配使用,当LoadPostDate方法返回true时此方法才被调用。
6.触发回发事件(对应PaisePostBackEvent方法)
此方法仅在页面回发时执行,主要处理引起客户端事件,成功捕获回发的客户端事件进行服务端的相应的处理。此方法的前提是实现IPostBackEventHandler接口。还可以通过此方法的参数来判断是那个控件触发的回发事件,执行不同的事件处理逻辑。
7.预呈现(OnPreRender方法)
此阶段完成控件呈现之前的所需要工作,自定义控件开发一般重写此方法,对控件进行资源注册。
8.保存视图状态(对应SaveViewState方法)
与LoadViewState过程相反,此方法是把页面控件视图信息进行存储。此方法在第一次执行的时候执行。一般使用ViewState字典存储状态,在使用时还要用到IStateManager接口。
9.呈现(对应Render方法)
此阶段主要将控件标记和字符文本输出到服务器控件输出流中。可以直接写html标记,也可以调用每个控件的RenderControl方法到输出流。
10.卸载(对应OnUnload方法)
此阶段执行对控件资源清理工作。
11释放(对应Dispose方法)
此阶段释放我们使用的资源。