• 页面生命周期与加载顺序


    页面加载顺序

    page-> child master->parent master->child control-> parent control

    PreInit事件

    它是页面生命周期的入口点。该事件被引发时,页面尚未与母版页和主题相关联。但页面滚动条位置已被恢复,被投递的数据变为可用,且所有的页面控件已被实例化,其属性也已基于在ASPX源中的默认值进行了设置(注意,如果没有在.aspx源中显式指定,这时的控件是没有ID的)。在这个阶段中,可以对母版页进行调换,或对主题进行编程。该事件仅对页面有效。IsCallback、IsCrossPagePostback和IsPostBack会在这时被设置。 【132】

    Init事件

    1在这个阶段,母版页和主题(如果分别存在)会被设定,不能再被更改。页面处理程序(即Page类的ProcessRequest方法)开始执行,对所有子控件进行迭代,使其有机会在上下文环境下初始化它们的状态。所有子控件都有自己的OnInit方法,后者以递归方式被调用。对于控件集合中的每个控件,都设置有命名容器和特定ID(如果没有在源中分配)。 Init事件首先会处理子控件,然后是页面。在这个阶段,页面和控件通常开始加载其部分状态。

    2此时,视图状态尚未被恢复。

    InitComplete事件

    该事件是ASP.NET 2.0引入的,页面专有,用于指示初始化子阶段的结束。对于页面来说,在Init和InitComplete事件之间只有一个操作会执行——

    1启用视图状态的变更跟踪功能。视图状态的跟踪是这样的一种操作,它最终使控件能够真正地将所有以编程方式添加到ViewSatae集合中的值,存储在持久性介质中。简而言之,对于没有实施视图跟踪的控件,添加到其ViewState中的值将在回发间丢失。
    在控件引发各自的Init事件后,视图状态跟踪会立即启动,页面也不例外(归根结底,页面也是一种控件)。 要点:对于上述说明,有一点需要注意:在InitComplete前,任何写入ViewState集合的 值,在下一次回发时都不再可用。(在刷新页面后,在这个事件前,你取不到viewstate里面的值)

    对于ASP.NET 1.x,必须等待Load事件被引发,才能安全地更改页面和控件的视图状态。 视图状态的恢复 如果页面因回发而被处理(即,IsPostBack属性为true),隐含字段__VIEWSTATE的值会被恢复。隐含字段__VIEWSTATE用于在请求结束时,保存所有控件的视图状态。页面的整体视图状态是一种调用上下文,包含页面每个组成控件上一次发往浏览器的状态信息。 在这个阶段,每个控件会获得更新其当前状态的机会,恢复其上一次请求时的状态。视图状态的恢复过程不会引发任何事件。如果需要对此进行定制,则必须借助于LoadViewState方法的重写(该方法在Control类中为受保护的虚拟成员)。 【133】 处理被投递的数据 HTTP请求中打包的所有客户端数据(即所有定义在<form>标签中输入字段的内容),会在这时被处理。被投递的数据通常采用下面这种形式: TextBox1=text&DropDownList1=selectedItem&Button1=Submit 该字符串用的键/值(name/value)对被“&”分隔。这些值会被加载到一个内部使用的集合当中。页面处理程序会试图寻找被投递集合中的名称与页面中控件ID的匹配项。如果找到匹配项,处理程序会检查该服务器控件是否已实现IPostBackDataHandler接口。如果已实现,该接口的方法会被调用,为使用被投递数据更新该控件状态提供机会。具体来讲,页面处理程序会调用该接口的LoadPostData方法。如果它返回true(即,状态已被更新),该控件将被添加到一个独立的集合中,等待进一步指示。 如果没有找到与被投递的名称对应的服务器控件,它将被搁置于一临时的独立集合中,稍后再试。

    PreLoad事件

    PreLoad事件是ASP.NET引入的,仅用于指示页面已完成系统级的初始化,即将进入另一个阶段。接下来的阶段会为页面中用户代码的执行提供机会,为执行和呈现对该页面做进一步配置。只有页面会引发该事件。

    Load事件
    Load事件首先由页面引发,之后以递归方式分别由所有的子控件引发。这时,页面中的控件树会被创建,各控件的状态完全反映之前的状态,并获得了从客户端投递过来的所有数据。对于执行处理逻辑和页面行为的初始化代码,页面已做好准备。这时访问控件属性和视图状态是绝对安全的。

  • 相关阅读:
    一只iPhone的全球之旅
    iOS开发之在地图上绘制出你运行的轨迹
    iOS开发之一些字符串常用的代码
    json格式化和查看工具
    iOS开发之结合asp.net webservice实现文件上传下载
    更改GROOVE的文件夹位置
    调试Windows Service
    从数据库中获取Insert语句
    iOS开发学习笔记(一)
    《影响力》的影响
  • 原文地址:https://www.cnblogs.com/hudasm/p/2710774.html
Copyright © 2020-2023  润新知