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

***实例教程:深入C#控件与Web开发 本文还有配套的精品资源,点击获取 简介: 是一个构建Web应用程序的框架,与C#编程语言和SQL Server 2005数据库管理系统紧密集成。本实例教程将深入探讨 的服务器控件、C#编程、Visual Studio 2005开发环境、SQL Server 2005数据库操作、页面生命周期、Web Forms模式、状态管理、数据绑定、错误处理以及... 阅读详情
 如果你具有使用 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来保存页面的状态信息。

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

例子:

<form id="form1" runat="server">
    <div>
        <asp:Label ID="lblNum" runat="server" Text="1"></asp:Label><br />
        <asp:Button ID="btnAddNum" runat="server" OnClick="btnAddNum_Click" Text="Button" /></div>
    </form>

 protected void btnAddNum_Click(object sender, EventArgs e)
    {
        lblNum.Text = Convert.ToString(Convert.ToInt32(lblNum.Text)+1);
    }

运行查看源代码,会发现有两个隐藏的INPUT控件

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTE2MjY5MTY1NWRk0VWpOi11vg33ukf5P6Rz3CR1PAk=" />

<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAgKNwa2+CgL1oMKPBMyHVXQQAr94j4NGky9Z8oh48zY3" />

页面生命周期 一个经典的例子,让你了解整个页面的生命周期是怎样走的 立即下载

相关推荐

CentOS 7环境下GLPI与OCS Inventory资产管理系统集成部署指南

本文详细介绍了在CentOS 7环境下,如何将GLPI与OCS Inventory两大开源工具进行集成部署,构建自动化资产管理系统。指南涵盖环境准备、核心服务安装、Web界面初始化、OCS插件配置及资产同步实战,帮助运维人员实现IT资产的自动发现、统一管理与可视化,大幅提升资产管理效率。

weixin_29274337的博客 326

Web应用的生命周期

一、归纳起来, JavaWeb的生命周期分为3个阶段: 启动阶段:当Web服务器启动的时,JavaWeb应用就启动了——加载一些数据。 运行时阶段:当服务器在运行时,也是它的运行阶段——提供服务 终止阶段:关闭服务器,或者我们手动终止时——释放资源。   二、Web应用启动阶段完成下面的操作: 把web.xml文件中的数据加载到内存 为JavaWeb应用创建一个ServletC...

梦想_起航 630

调用D3D11硬解码和渲染VideoProcessor版本

在https://blog.csdn.net/robothn/article/details/78781321一文中使用shader来显示FFMPEG硬解码后的YUV420P,本文调用D3D11的videoprocessor来进行图像空间变换和尺寸变换,取得了较好的效果。 1.初始化D3D11设备、videodevice等数据结构 FFMPEG调用D3D11硬解码,获取其对应的device,videodevice。。。 FFMPEG使用av_hwdevice_find_type_by_name调用D3d11

zlyadvocate的博客 9285

Web窗体页生命周期

Web窗体页的生命周期经历如下几个过程: 转载于:https://www.cnblogs.com/keely/archive/2010/04/29/1723584.html

weixin_30652271的博客 280

程序化广告行业(23/89):深度剖析广告效果评估指标

大家好,我一直希望能和大家一起在技术领域不断探索、共同进步。在之前的文章中,我们了解了程序化广告中腾讯的业务布局和广告效果评估的基础概念,今天让我们进一步深入剖析广告效果评估的各项指标,这对理解程序化广告的运作机制至关重要

yyy173611的博客 4864

初识colmap

COLMAP是一款开源的计算机视觉软件,主要用于从一系列二维图像中进行三维重建。它全称为“COLLISION-MAPping”,是一个高度集成的Structure-from-Motion (SfM) 和 Multi-View Stereo (MVS) 管道工具,由斯坦福大学开发和维护。COLMAP的主要功能包括特征检测与匹配、增量式SfM、多视图立体匹配以及优化。它能够从无序或有序的二维照片集合中恢复出三维场景的几何结构(点云)以及每张图像对应的相机姿态。

Hhsjehejj的博客 5551

WEB页面生命周期

一、WEB页面生命周期理解   我们使用网页访问浏览器时会有以下交互:     1.输入网址(回车):浏览器 --(发送Request请求)--服务器端(IIS)     2.服务器接收请求,并调用ProcessRequest方法来处理请求、创建页面       页面经历的过程:初始化-加载视图状态信息--回发数据--加载页面的用户代码--执行回发服务器端事件--生成 HT...

aowoge8928的博客 1291

Neo4j:入门基础(二)之导入CSV文件

导入CSV文件的方式  主要的两种方式如下:   1、使用 Cypher 命令LOAD CSV,这种方式可以处理中小型数据(可达10 million条记录)   2、使用批量导入工具neo4j-admin ,用来直接导入大数据集 三、上述方式具体导入过程   1、Cypher 命令LOAD CSV 参数 1、USING PERIODIC COMMIT 300 使用批量提交,每满300条提交一次,防止内存溢出 2、WITH HEADERS 从文件中读取第一行作为参数名,...

Puzzle的博客 3万+

深入研究Asp.net页面的生命周期

介绍 Asp.net是微软.Net战略的一个组成部分。它相对以前的Asp有了很大的发展,引入了许多的新机制。本文就Asp.net页面的生命周期向大家做一个初步的介绍,以期能起到指导大家更好、更灵活地操纵Asp.net的作用。 当一个获取网页的请求(可能是通过用户提交完成的,也可能是通过超链接完成的)被发送到Web服务器后,这个页面就会接着运行从创建到处理完成的一系列事件。在我们试图建立Asp.ne

学无止境 1876

特征工程自动化(FeatureTools实战)

本项目模拟生成的医疗、金融和电商等领域的原始数据,适用于自动化特征工程的场景。主数据表(Entity Table):例如用户数据、交易数据、患者数据等。字段可能包括用户ID、年龄、性别、注册日期、消费金额、行为记录等。关联数据表(Related Tables):例如订单数据、点击记录、诊疗记录等。多个表之间通过外键建立关联。patient_id:患者IDage:年龄gender:性别:入院日期:出院日期diagnosis:诊断结果。

闲人编程的博客 1359

Horn-Schunck光流算法的Python实现

光流是计算机视觉领域中的一个重要概念,它描述了图像中物体在时间上的运动。Horn-Schunck光流算法是一种经典的光流估计方法,通过对图像的亮度变化进行建模,来估计像素的运动速度。在本文中,我们将使用Python实现Horn-Schunck光流算法,并提供相应的源代码。请注意,该算法假设图像上的亮度变化主要由物体的运动引起,并且假设光流在整个图像上是稠密的。在上面的示例中,我们首先读取了两个输入图像,然后使用我们实现的Horn-Schunck光流算法估计了它们之间的光流。首先,我们需要导入一些必要的库。

持续更新 495

ASP.NET:掌握Web窗体的生命周期与状态管理(摘自网络)

【IT168 编程开发】如果你具有使用 Active Server Pages (ASP) 的经验,你将认识到 ASP 是线性处理模型。ASP 页是按从上到下的顺序处理的。ASP 代码和静态 HTML 的每一行都按其在文件中的显示顺序进行处理。在往返行程中用户操作导致页被发送到服务器。因为此操作导致往返行程,所以服务器必须重新创建该页。在重新创建该页后,将通过与以前相同的从上到下的顺序对该页进行处...

weixin_30636089的博客 156

Winform从入门到精通(38)——StatusStrip(史上最全)

本文介绍StatusStrip控件的详细用法,包含所有属性和事件,绝对史上最全!

qq_34059233的博客 2758

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

事件顺序 1.Init(初始化阶段) 2.LoadViewState(载入视图状态) 3.LoadPostData(处理回发数据) public virtual bool LoadPostData(string postDataKey, NameValueCollection postCollection) 判断视图状态和更改后的状态是否不同,...

weixin_30508309的博客 160

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ASP.NET 笔记(一)、概述

一、概述 ASP.NET 提供了完整的服务器端对象模型,可以在运行期间使用。ASP.NET 可以在其环境中把页面上的所有控件作为对象来访问。在页面上使用控件功能,生成 HTML 内容的 ASP.NET 通常称为 Web 窗体。 基本上,Web 窗体上控件的状态信息(包括在文本框中输入的信息、下拉列表中的选项等)存储在隐藏的 viewstate 字段中,这个字段是...

weixin_34015566的博客 100

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

ASP.NET Web程序设计习题与练习答案-祁长兴主编版

asp.net

爵主 的博客 1907

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

核心ASP.NET

ASP.NET是.NET FrameWork的一部分,在通过 HTTP请求建立文档时,该技术可以 在Web服务器上动态创建文档,该文档主要是HTML和XHTML,尽管也可以创建XML文档、CSS(级连样式表)文件、图像、PDF文档,或者支持MIME类型的任何其它文档。  它与.NET Framework完全集成,其中一部分包含了对C#的支持。   您可能使用过允许创建动态内容的ASP(activ

softuse的博客 709

一套.net窗体身份验证方案(解决了防止用户重复登陆,session超时等问题)

一. 设置web.config相关选项先启用窗体身份验证和默认登陆页,如下。设置网站可以匿名访问,如下然后设置跟目录下的admin目录拒绝匿名登陆,如下。注意这个小节在System.Web小节下面。把http请求和发送的编码设置成GB2312,否则在取查询字符串的时候会有问题,如下。设置session超时时间为1分钟,并启

243

ASP.NET状态管理之十一(总结)

状态管理是您对同一页或不同页的多个请求维护状态和页信息的过程。与所有基于 HTTP 的技术一样,Web 窗体页是无状态的,这意味着它们不自动指示序列中的请求是否全部来自相同的客户端,或者单个浏览器实例是否一直在查看页或站点。此外,到服务器的每一往返过程都将销毁并重新创建页;因此,如果超出了单个页的生命周期,页信息将不存在。 ASP.NET 提供多种方式来在服务器往返过程之间维护状态。对这些状态管...

weixin_33810006的博客 91

在 Web 窗体页之间传递值

在很多时候,您将需要从一页定位到另一页,将值从一页传递到另一页。例如,可能有一页会提示用户提供名称和密码。当用户提交窗体时,您需要调用另一页对用户进行身份验证。 在页之间共享信息的方法有多种: 使用查询字符串,它将信息追加到 URL 并将该 URL 传递到下一页。这种方法存在使信息可见的缺点。有关详细信息,请参阅 WebClient.QueryString 属性和 HttpRequest.Que

missing u!` 1509

asp.net实现“九连环”小游戏

呵呵,培训时老师讲的简单例子,俺自己作了一下,还可以运行。QQ:5478740 wildcatsky(原作)public Class ChinaRing1 Inherits System.Web.UI.Page#Region " Web 窗体设计器生成的代码 " 该调用是 Web 窗体设计器所必需的。 Private Sub InitializeComponent()

zgqtxwd的专栏 267

初了解IsPostBack

IsPostBack:获取一个bool值,该值指示页是第一次呈现还是为了响应回发而加载。        只有在浏览器中第一次打开一个URL时IsPostBack的值为False,其他的时候IsPostBack的值都是True。 在web窗体的Page_Load事件中经常会使用到IsPostBack,例如 有程序的界面如下(两个TextBox的Text属性都为非空的): 在Pag

淡泊明志,宁静致远 1320

asp.net 状态管理方案总结

每次将网页发送到服务器时,都会创建网页类的一个新实例。在传统的Web编程中,这通常意味着在每一次往返行程中,与该页及该页上的控件相关联的所有信息都会丢失。例如,如果用户将信息输入到文本框,该信息将在从浏览器或客户端设备到服务器的往返行程中丢失。 状态管理是您对同一页或不同页的多个请求维护状态和页信息的过程。与所有基于 HTTP 的技术一样,Web 窗体页是无状态的,这意味着它们不自动指示序列

ydm东方旭日的专栏 3312

Asp.net状态管理(一)

状态管理概述 1.1  状态管理与数据库状态管理是你对同一页或不同页的多个请求维护状态和页信息的过程。与所有基于 HTTP 的技术一样,Web 窗体页是无状态的,这意味着它们不自动指示序列中的请求是否全部来自相同的客户端,或者单个浏览器实例是否一直在查看页或站点。此外,到服务器的每一往返过程都将销毁并重新创建页;因此,如果超出了单个页的生命周期,页信息将不存在。比如,我们在代码中声明一个D

galbanum 1097

asp.net状态管理

<br />同样,听了微软讲师邵志东的讲座“ASP.NET状态管理”的视频讲座,总结如下,希望得到大家的指点:<br />第一部分:页面状态介绍<br />Http协议————“无状态协议”<br />Web服务器每分钟对上千个用户进行管理的一种方式就是执行所谓的“无状态”链接。只要有一个希望浏览器返回一个页面、图像或其他资源的请求,就发生以下事情:<br />1、连接到服务器<br />2、告诉服务器想要的页面、图像或者其他项<br />3、服务器发送请求的资源<br />4、服务器切断连接,把用户忘的干

C#,SQL,Castle,Hibernate,MVC,Spring.net 707

第6章 状态管理

  (译自 Pro ASP.NET 2.0 IN C# 2005 ,译得不到之处,欢迎批评指正)第6章 状态管理HTTP是无状态的协议,无论采用多先进的应用框架,都无法改变这个事实。每次网页请求后,客户端与服务器断开连接,ASP.NET引擎丢弃页面对象。这个结构保证了Web应用能够扩展,在为成千上万的并发请求提供服务的同时不致耗尽服务器内存。缺点是程序中需要使用其它技术来存储不同请求共

从今天起 3689
上一篇: cisvc.exe进程占用大量内存空间
下一篇: ASP.NET应用中十大常见的潜在问题
DillonHunter
博客等级 码龄21年 2粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值