zoukankan      html  css  js  c++  java
  • 稍作停留的思绪 Web窗体处理阶段

    下图展示了一个ASP.NET 页面处理流程的主要阶段:

    这些阶段都是在每一次Web请求时独立发生的。还有许多阶段没有在列表中出现,但是它们通常只是在编写自己的ASP.NET控件时才被使用且不会由页面直接来处理。

    1. 页面框架初始化
    2. ASP.NET在这个阶段开始创建页面。它产生.aspx网页里用标签定义的所有控件。此外,如果页面不是第一次被请求(而是一次回送),ASP.NET将反序列化视图状态信息并把它们应用到所有的控件上。

      Page.Init 事件在这个阶段被触发。网页很少处理这个事件,因为此时执行页面初始化还为时过早。因为此时控件对象还可能没有被创建,视图状态信息也还没有加载。

    3. 用户代码初始化
    4. Page.Load事件在这个处理阶段被触发。大多数网页处理这个事件来执行必需的初始化(如填充控件的属性)

      不管页面是第一次请求还是回送,Page.Load事件都会触发。可以通过检查页面的IsPostBack属性来确定页面的当前状态。

      需要记住的是,视图状态保存了每个变化了的属性。在Page.Load事件里初始化控件被记为一次变化,所以任何控件值的变化将被序列化到视图状态中,无谓的加大了页面尺寸和延长传送时间。为了简化视图状态并尽量保持小的页面,要避免在代码中初始化控件。而应该在控件标签里设置属性。如果一定要在代码中进行设置,可以将控件的EnableViewState属性设置为false,并且在每次Page.Load事件中初始化控件,而不管是回送页面还是初次请求页面。

    5. 验证
    6. ASP.NET引入了自动验证其他用户输入控件并显示错误信息的新验证控件。这些控件会在页面加载之后,其他事件发生之前触发。大部分情况下,只需要在其他事件处理程序中检查页面的属性Page.IsValid。

    7. 事件处理

      此时,页面已经被完全装载并且经过了验证。ASP.NET将触发在上次回发后发生的所有事件。大部分情况下,ASP.NET事件有以下两种类型:

      • 立即反映事件:包括单击“提交”按钮或者单击其他按钮,图片区域或富Web控件中的链接,它们调用JavaScript方法__doPostBack()来触发一次回发。
      • 变化事件:包括改变控件的选择或者文本框的文本。如果Web控件的AutoPostBack属性设置为true,这些事件立即发生。否则,它们会在页面下次返回时发生。

      例如,假设一个页面有一个“提交”按钮和一个并不自动回送的文本框。修改文本框中的文本,然后点击“提交”按钮。这时,ASP.NET会触发下列所有的事件:

      • Page.Init
      • Page.Load
      • TextBox.TextChanged
      • Button.Click
      • Page.PreRender
      • Page.Unload
    8. 自动数据绑定
    9. 本质上有两种类型的数据源操作。所以任何改变(增删改)都是在所有的控件事件处理之后,Page.PreRender事件发生之前执行的。在Page.PreRender事件被触发后,数据源控件执行查询并把获得的数据插入到关联的控件中。

      这是页面生命周期的最后一站。Page.PreRender事件曾被认为是页面呈现为HTML之前的最后一个动作(其实一些数据绑定工作还可能在预呈现阶段之后发生)。在预呈现阶段,页面和控件对象仍然可用,所以你可以执行最终的步骤,如在视图状态中保持额外的信息。

    10. 清除
    11. 在页面的生命周期的最后阶段,页面呈现为HTML。页面呈现之后,真正的清除开始并触发Page.Unload事件。这时,页面对象仍然可用,但是最终的HTML已经被呈现并不能修改。

    Pop Jungle是我的新作,希望大家喜欢
  • 相关阅读:
    iOS应用崩溃日志分析
    使用Crashlytics来保存应用崩溃信息
    Mac和iOS开发资源汇总
    简单配置PonyDebugger
    程序员的工作不能用“生产效率”这个词来衡量
    使用Reveal 调试iOS应用程序
    MySQL 笔记
    flex弹性布局
    回调函数
    微信小程序开发
  • 原文地址:https://www.cnblogs.com/CoolJie/p/2082435.html
Copyright © 2011-2022 走看看