zoukankan      html  css  js  c++  java
  • ASP.NET页面生命周期和asp.net应用程序生命周期

    作为一个asp.net程序员,不了解ASP.NET页面生命周期和asp.net应用程序生命周期是绝对不行的,那永远只能是菜鸟级别。我很早就学过,可是没次还是得去翻,一些事件还是记不住,还是记在自己的blog吧,呵呵。

     

    页面生命周期

    页 面生命周期执行一系列步骤:页面的初始化、实例化控件、还原和维护状态、运行事件处理程序代码、呈现。为了在合适的阶段执行所需的代码,所以要对页面生命 周期非常熟悉。在页生命周期的各个阶段,页面会逐个引发定义的事件,通过对代码开发,在页面的生命事件中执行我们所需要的程序
    页生命周期阶段

    1、 页请求:发生在页面生命周期之前,用户请求页时,ASP.NET将确定是否需要分析和编译页,从而确定是否开始页面的生命周期,或者是否可以在不运行页的情况下发送页面缓存以进行响应。

    2、 开始:设置页属性,如:HttpContext以及其他属性;在此阶段,页面需要确定是回发请求还是新请求,并设置IsPostBack属性;设置页面的UICulture属性。

    3、 页面初始化:加载所有主题;控件生成,并设置UniqueID;
    注:ViewState、ControlState中的值还未加载至控件;如果页面是回发,则回发数据也还未加载;故此时控件可以访问,但值可能出错。

    4、 加载:如果当前请求是回发请求,则为控件加载ViewState和ControlState中的值。

    5、 验证:调用所有验证程序控件的Validate方法,此方法将设置验证程序控件和页的IsValid属性。

    6、 回发事件处理:如果请求是回发请求,则调用所有事件处理程序。

    7、 呈现:首先对该页和所有控件进行保存视图状态,然后对每个控件调用Render方法,它会提供一个文本编写器,用于将控件的输入写入页的Response属性的OutputStream中。

    8、 卸载:完成呈现,并已将页发送至客户端、准备丢弃该页后,调用卸载。将卸载属性如:Response和Request等等。

    页生命周期事件:

    1、PreInit
    完成操作:检查IsPostBack属性来确定是不是第一次处理该页;
                         创建或重新创建动态控件
                         动态设置主控页
                         动态设置Theme属性
                         读取或设置配置文件属性
    注:如果请求是回发请求,则控件的值尚未从视图状态恢复,即:不应该在此事件中设置控件属性。

    2、Init
    完成操作:在所有控件都已经初始化并且应用所有外观设置后引发。使用该事件来读取和初始化控件属性。

    3、InitComplete
    完成操作:由Page对象引发,使用该事件来处理要求完成所有初始化工作的任务。

    4、PreLoad
    完成操作:为页和所有控件加载视图状态,然后处理Request 实例包括的任何回发数据。
    注:如果需要在Load之前对页或控件进行处理,需要该事件。

    5、Load
    完成操作:以递归方式加载所有控件。

    6、控件事件
    完成操作:处理控件引发的事件。

    注:在回发请求中,如果页包含验证程序控件,请在执行任何处理之前检查Page和各个验证控件的IsValid属性。

    7、LoadComplete

    8、PreRender
    在控件输出前最后的修改机会。
    注:在该事件发生前的操作:
    Page对所有控件递归进行EnsureChildControl操作
    设置了DataSourceID属性的数据绑定控件会调用DataBind方法。

    9、SaveStateComplete
    在该事件发生前,已经对控件的ViewState进行了保存。将忽略对页和控件所作的所有修改。

    10、Render
    方法,便于开发

    11、UnLoad

     

    应用程序生命周期

    在应用程序的生命周期期间,应用程序会引发可处理的事件并调用可重写的特定方法。若要处理应用程序事件或方法,可以在应用程序根目录中创建一个名为 Global.asax 的文件。如果创建了 Global.asax 文件,ASP.NET 会将其编译为从 HttpApplication 类派生的类,然后使用该派生类表示应用程序。

    HttpApplication 进程的一个实例每次只处理一个请求。由于在访问应用程序类中的非静态成员时不需要将其锁定,这样可以简化应用程序的事件处理过程。这样还可以将特定于请求的数据存储在应用程序类的非静态成员中。例如,可以在 Global.asax 文件中定义一个属性,然后为该属性赋一个特定于请求的值。

    Application_StartApplication_End 方法是不表示 HttpApplication 事件的特殊方法。在应用程序域的生命周期期间,ASP.NET 仅调用这些方法一次,而不是对每个 HttpApplication 实例都调用一次。

  • 相关阅读:
    网站安全编程 黑客入侵 脚本黑客 高级语法入侵 C/C++ C# PHP JSP 编程
    【算法导论】贪心算法,递归算法,动态规划算法总结
    cocoa2dx tiled map添加tile翻转功能
    8月30日上海ORACLE大会演讲PPT下载
    【算法导论】双调欧几里得旅行商问题
    Codeforces Round #501 (Div. 3) B. Obtaining the String (思维,字符串)
    Codeforces Round #498 (Div. 3) D. Two Strings Swaps (思维)
    Educational Codeforces Round 89 (Rated for Div. 2) B. Shuffle (数学,区间)
    洛谷 P1379 八数码难题 (BFS)
    Educational Codeforces Round 89 (Rated for Div. 2) A. Shovels and Swords (贪心)
  • 原文地址:https://www.cnblogs.com/q4486233/p/3349499.html
Copyright © 2011-2022 走看看