ASP.NET:掌握Web窗体的生命周期与状态管理

asp.net|web

  如果你具有使用 Active Server Pages (ASP) 的经验,你将认识到 ASP 是线性处理模型。ASP 页是按从上到下的顺序处理的。ASP 代码和静态 HTML 的每一行都按其在文件中的显示顺序进行处理。在往返行程中用户操作导致页被发送到服务器。因为此操作导致往返行程,所以服务器必须重新创建该页。在重新创建该页后,将通过与以前相同的从上到下的顺序对该页进行处理,因此,该页未表现出真正的事件驱动行为。若要创建事件驱动体验,你需要显式设计它。此外,你必须在最基本的级别上显式维护页和控件状态。此模型限制了可以组合的用户界面的丰富程度,并且此模型增加了需要支持它的代码的复杂性。
  与此相比,传统 Visual Basic 应用程序中的事件驱动模型包含可编程的元素,这些元素可被初始化并在窗体上显示。用户与这些元素进行交互,而这又导致引发调用事件处理程序的事件。此模型支持真正的事件驱动行为,这在设计上极大拓宽了可以组合的用户界面的丰富程度,并且降低了需要支持它的代码的复杂性。

  ASP.NET 通过模拟事件驱动模型的行为代替了 ASP 的线性处理模型。提供 ASP.NET 页框架以隐式地为你建立事件和事件处理程序的关联。利用该页框架,你可以很容易地创建响应用户操作的用户界面。

  首先,我们必须先了解一下Web窗体的生命周期,才能更好的了解Web窗体的状态管理。

  一个Web窗体的生命周期类似于在服务器中运行的Web进程的生命周期。一个Web窗体从实例化分配内存空间到处理结束释放内存,一般经历下面4个步骤:初始化、页面装载、事件处理和资源清理。

  (1)页面初始化

  当页面被初始化时,发生第一个事件Page_Init。系统会执行创建和设置一个例示所需要的所有初始化步骤。

  (2)页面装载

  页面装载在初始化之后,所发生的事件叫做 Page_Load,它的用途如下:

  根据 Page.IsPostBack 属性检查页面是不是第一次被处理;

  第一次处理页面时执行数据捆绑,或者在以后的循环过程中重新判断数据捆绑表达式;

  读取和更新控件属性;

  恢复在保存步骤中所保存的前一个客户请求的状态;

  (3)事件处理

  Web窗体上的每个动作都激活一个到达服务器的事件。一个Web窗体有两个视图:一个客户视图和一个服务器视图。所有的数据处理都在服务器上进行。当通过点击鼠标或其它方法引起一个事件时,事件就到达服务器并返回相应的数据。

  (4)资源清理

  最后一步发生于一个窗体完成了它的任务并且准备卸载的时候,这时激活Page_Unload事件,完成最后的资源清理工作,比如:关闭文件,关闭数据库连接,丢弃对象。

  我们知道基于Web的访问方式是断开式的,Web页面是无状态性的。而于ASP中的线性驱动方式不同的是ASP.NET采用的是事件驱动模式,那么 ,Web窗体是怎么样做到ASP.NET页面状态的维护的呢?在ASP.NET中引入了一个概念:View State,从而用View State来保存页面的状态信息。

  除了第一次的访问请求是有基类生成以外,以后每次客户端的回传都是根据客户端传来的页面状态来重新创建页面。而页面的各个状态信息就保存在客户端页面源文件的隐藏字段<input type="hidden" name="__VIEWSTATE" value=""/>中,我们可以通过浏览器查看到它,value的值就是经过加密的页面状态信息。服务器根据value值进行窗体的再现,然后在窗体的事件处理阶段进行执行响应的事件过程,然后把执行结果返回到客户端,并且改变Web窗体的状态值,并回写到value值中。最后到达资源清理阶段。整个过程就是一个Web窗体的生命周期,同时也完成了页面状态的管理。

  下面这个实例演示了ASP.NET页面框架是如何维护页面状态的。所有代码如下:

  <%@ Page Language="VB" %>
  <script runat="server">
     Sub Button1_Click(sender As Object, e As EventArgs)
    '使viewstate(“value”)的值增1
    viewstate("value") += 1
          Label1.Text = "这是第" & Str(viewstate("value")) & "点击按钮"
  End Sub
  sub page_Load(sender As Object, e As EventArgs)
  '判断是否为第一次处理该页面
  '如果是则使viewstate类保存键value的值为0
     If Not Page.IsPostBack Then
              viewstate("value") = 0
              Label1.Text = "这是第" & Str(viewstate("value")) & "点击按钮"
          End If
  end sub
  </script>
  <html>
  <head>
      <title>页面状态管理</title>
  </head>
  <body ms_positioning="GridLayout">
      <form id="Form1" method="post" runat="server">
          <asp:Label id="Label1" runat="server" width="176px"></asp:Label>
          <br />
          <asp:Button id="Button1" runat="server" Text="点击累加"></asp:Button>
      </form>
  </body>
  </html>

  保存为viewstate.aspx,运行结果如图4.9所示。

  

图4.9 点击3次按钮之后

  在客户端的浏览器中,我们查看源文件,可以查看到的隐藏字段的值为:
  <input type="hidden" name="__VIEWSTATE" value="dDwtOTk1MjE0NDA4O3Q8cDxsPHZhbHVlOz47bDxpPDM+Oz4+O2w8aTwxP
js+O2w8dDw7bDxpPDE+Oz47bDx0PHA8cDxsPFRleHQ7PjtsPOi/meaYr+esrCAz54K5
5Ye75oyJ6ZKuOz4+Oz47Oz47Pj47Pj47PmLc5pTevWJok9DSup0E5RUygUMi" />
  而整个页面的状态信息就其中

时间: 2024-09-20 13:55:49

ASP.NET:掌握Web窗体的生命周期与状态管理的相关文章

掌握Web窗体的生命周期与状态管理

web     如果你具有使用 Active Server Pages (ASP) 的经验,你将认识到 ASP 是线性处理模型.ASP 页是按从上到下的顺序处理的.ASP 代码和静态 HTML 的每一行都按其在文件中的显示顺序进行处理.在往返行程中用户操作导致页被发送到服务器.因为此操作导致往返行程,所以服务器必须重新创建该页.在重新创建该页后,将通过与以前相同的从上到下的顺序对该页进行处理,因此,该页未表现出真正的事件驱动行为.若要创建事件驱动体验,你需要显式设计它.此外,你必须在最基本的级别

ASP.NET中的Global.asax以及Web应用的生命周期

asp.net|web   ASP.NET中的Global.asax以及Web应用的生命周期     Global.asax 文件,有时候叫做 ASP.NET 应用程序文件,提供了一种在一个中心位置响应应用程序级或模块级事件的方法.你可以使用这个文件实现应用程序安全性以及其它一些任务.    Global.asax 文件被配置为任何(通过 URL 的)直接 HTTP 请求都被自动拒绝,所以用户不能下载或查看其内容.ASP.NET 页面框架能够自动识别出对Global.asax 文件所做的任何更改

ASP.NET 2.0 页(Page)生命周期概述

原文:ASP.NET 2.0 页(Page)生命周期概述 引用MSDNASP.NET 页生命周期概述 ASP.NET 页运行时,此页将经历一个生命周期,在生命周期中将执行一系列处理步骤.这些步骤包括初始化.实例化控件.还原和维护状态.运行事件处理程序代码以及进行 呈现.了解页生命周期非常重要,因为这样做您就能在生命周期的合适阶段编写代码,以达到预期效果.此外,如果您要开发自定义控件,就必须熟悉页生命周期, 以便正确进行控件初始化,使用视图状态数据填充控件属性以及运行任何控件行为代码.(控件的生命

asp.net MVC 应用程序的生命周期

下面这篇文章总结了 asp.net MVC 框架程序的生命周期.觉得写得不错,故转载一下. 转载自:http://www.cnblogs.com/yplong/p/5582576.html       首先我们知道http是一种无状态的请求,他的生命周期就是从客户端浏览器发出请求开始,到得到响应结束.那么MVC应用程序从发出请求到获得响应,都做了些什么呢?       本文我们会详细讨论MVC应用程序一个请求的生命周期,从一个控件到另一个控件是怎样被处理的.我们还会详细介绍一下整个请求的生命周期

ASP.NET 移动 Web 窗体和 ASP.NET 兼容性

asp.net|web 当编写 ASP.NET 移动 Web 应用程序时,您几乎可以使用 ASP.NET 的所有功能.但是,首先要考虑兼容性问题. 错误处理和报告如果 ASP.NET 应用程序在处理请求时遇到未处理的异常或其他错误,就会生成错误页.异常可能会在请求处理过程中的任何时候发生.例如,它们可能会在读取配置文件 (Web.config),编译页或运行页时发生. 您可以配置应用程序,使其生成默认或自定义的错误页.如果将应用程序配置为生成默认错误页,ASP.NET 将设置响应中的错误代码,并

Java Web应用的生命周期

Java Web应用的生命周期.三个阶段:启动,运行,终止. 无论是web还是servlet他们的生命周期都是有容器来控制的. 启动: 1. 把web.xm 加载到内存中 2. 为web应用创建一个ServletContext对象 3. 对所有的Filter进行初始化. 4. 对那些需要在启动时初始化的servlet初始化. 运行: 在这个阶段所有的servlet处于待命状态,等待客户端的请求.如果客户端的请求servlet不存在,则初始化对应的servlet. 销毁: 1.销毁所有处于运行状态

分析ASP.NET服务器控件开发-控件生命周期

服务器控件生命周期简介 服务器控件的生命周期是创建服务器控件最重要的概念.作为开发人员,必须对服务器控件生命周期深刻理解.当然,这不是一朝一夕就可以做到的.对于学习控件开发技术的初学者,可以不必掌握得非常详细深入,只需对服务器控件的生命周期中的不同阶段有一个大致的了解即可. 在掌握服务器控件生命周期的过程中,读者要特别注意有关服务器控件状态的相关内容.在重点了解生命周期各个阶段的同时,对服务器控件的状态变化要注意以下问题:控件的生命周期何时保存控件和恢复其状态:何时与页面及其他控件之间进行交互:

ASP.NET控件的执行生命周期

阶段 控件需要执行的操作 要重写的方法或事件 初始化 初始化在传入 Web 请求生命周期内所需的设置. Init 事件(OnInit 方法) 加载视图状态 在此阶段结束时,就会自动填充控件的 ViewState 属性,控件可以重写LoadViewState 方法的默认实现,以自定义状态还原. LoadViewState 方法 处理回发数据 处理传入窗体数据,并相应地更新属性. 注意:只有处理回发数据的控件参与此阶段. LoadPostData 方法(如果已实现IPostBackDataHandl

ASP.NET深入浅出系列2-页面生命周期详解

上个系列中介绍了页面生命周期的整体流程,可能有些读者还想更进一步了解整个生命周期的细节,限于篇幅我不可能讲到所有细节,也没必要,这里仅举几个例子,大家可以通过这几个例子学习一下页面生命周期的研究方式. Control类中有如下事件 // 当服务器控件绑定到数据源时发生. public event EventHandler DataBinding; // 当从内存释放服务器控件时发生,这是请求 ASP.NET 页时服务器控件生存期的最后阶段. public event EventHandler D