zoukankan      html  css  js  c++  java
  • 控件生存周期

    控件生存周期
     
    当一个asp.net页面被请求后,一个page实例被生成,开始自己的逻辑,最终返回HTML流给用户端。构成逻辑处理的是page中存在的服务器端控件以及控件间的交互,并且在页面结束前服务器控件们被销毁(视.net的回收策略而定)。那么这些控件在短短的页面处理过程中经历了创建、处理、销毁等到底是如何组织的?这些控件是如何同其他控件交互,如何在多个页面间保持状态的?(这应当是整个控件开发的基本也是重要的知识)
    首先,我们看看特殊的控件,也就是Page类,所有aspx页面的父类(或者祖先)。因为这是我们程序员主要的舞台。Page类继承自TemplateControl, 且实现了IhttpHandler。IhttpHandler接口是保证页面被asp.net框架所调度,并且可以获得HTTP协议的数据输入流以及获得向HTTP输出流输出数据的能力;而TemplateControl类是继承自Control类。Page实现了InamingContainer接口,这保证了他可以充当页面中的控件们的容器(控件们的战斗舞台)
     
    好了,现在看看控件的生命周期(看看MS是如何定义这个框架体系的):
    1、 Instance 实例化
    通过控件的构造器所实例化。还可以通过被父控件实例化而生成。
     
    2、 Initialize 初始化
    控件会通过默认方式调用OnInit方法,从而引发On_init事件。Page根据aspx页面的语法以及标签设定值来初始化控件,对声明语法中的控件及其属性赋值。作为一个特殊控件,一般可以在Page的OnInit事件中允许编程者提供控间的初始化操作(对某些属性赋值)。对于控件包含的子控件,控件可以访问他们,但是子控件是不可以访问父控件的(因为控件此时还没有被加载(Load))。
     
    3、 Begin Tracking View State 开始跟踪视图状态
    发生在初始化阶段末尾,Page会调用控件的TrackViewState方法(这是一个继承自Control的保护方法)
     
    4、 Load View State 加载视图
    此时,页面框架自动恢复了ViewState字典(ViewState数据来自表单form中的隐含字段),控件会根据ViewState值来设定自己的属性或者内部字段变量等
     
    5、 Load PostBack Data加载回传数据
    如果控件实现了IpostBackDataHandle接口,那么页面回调用控件实现的接口,让其参与对回传数据的处理
     
    6、 Load 加载
    此时,控件树(page的控件以及控件的子控件构成的树)所有控件都已经被初始化,并恢复到上一个周期的状态(这是通过ViewState获得的),可以访问其他的任何控件。
     
    7、 Raise Change Events引发修改(控件的)事件
    处理回传的数据,此时可能会引起控件的某些事件作为对某些属性被修改的通知。
     
    8、 Raise Postback Event 引发回传数据
    当发生修改事件时候,引发将客户端发生的一些事件映射到服务器控件的事件,从而调用控件的事件的处理例程。这大多是控件开发者的客户—另外一些程序员重用控件时的舞台。
     
    9、 PreRender 预生成
    通过调用控件的OnPreRender方法,执行在生成控件前的所需任何工作。递归调用子控件的此方法。
     
    10、Save View State 保存视图状态
           控件继承Control的方法来保存当前控件状态到ViewState中去
          
    11、Render 生成
           控件输出HTML数据到HTML流中去。
          
    12、Unload 卸载
           页面通过实现Page_Onload方法执行清除工作,也默认引发控件的Unload事件
     
    13、Dispose释放
           此时,控件执行清除占用资源的方法。
     
    以上讨论适宜于在aspx页面中声明创建的控件,如果是在页面/控件的事件处理程序中创造得控件,则在控件加入到控件树开始执行各个阶段,直到达到页面的当前阶段,之后,该动态创建的控件将随同页面其他控件一样工作
  • 相关阅读:
    UOJ #455 [UER #8]雪灾与外卖 (贪心、模拟费用流)
    Codeforces 482E ELCA (LCT)
    Codeforces 798D Mike and distribution (构造)
    AtCoder AGC017C Snuke and Spells
    HDU 6089 Rikka with Terrorist (线段树)
    HDU 6136 Death Podracing (堆)
    AtCoder AGC032D Rotation Sort (DP)
    jenkins+python+kubectl实现批量更新k8s镜像
    Linux 下载最新kubectl版本的命令:
    jenkins X 和k8s CI/CD
  • 原文地址:https://www.cnblogs.com/jincwfly/p/679779.html
Copyright © 2011-2022 走看看