




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、ASP.NET生命周期和状态保持一什么是一什么是Asp.Net页面生命周期页面生命周期当我们在浏览器地址栏中输入网址,查看页面时,这时会向服务器端(IIS)发送一个request请求,服务器就会判断发送过来的请求页面, 完全识别 HTTP 页面处理程序类后,ASP.NET 运行时将调用处理程序的 ProcessRequest 方法来处理请求,来创建页面对象。通常情况下,无需更改此方法的实现,因为它是由 Page 类提供的。接下来被创建页面对象的ProcessRequest方法使页面经历了各个阶段:初始化、加载视图状态信息和回发数据、加载页面的用户代码以及执行回发服务器端事件。之后,页面进入显示
2、模式:收集更新的视图状态,生成 HTML 代码并随后将代码发送到输出控制台。最后,卸载页面,并认为请求处理完毕。其中页面对象ProcessRequest方法 完成的这一系列事件的处理过程就是Asp.Net页面生命周期。主要步骤页面初始化 Page_Init加载View State LoadViewState回发数据处理 LoadPostData页面加载 Page_Load回发通知 RaisePostDataChangedEvent回发事件处理 RaisePostBackEvent页面预渲染 Page_PreRender保存 viewstate SaveViewStatePage渲染 Page_
3、RenderPage 卸载 Page_UnLoad 主要步骤1.创建页面控制树,把它封装成了一个方法,这个方法的名字就叫做FrameworkInitliaze()在方法内部给aspx上所有的控件都New一个实例,然后构造一个树的结构,执行创建页面之后,页面上才会有控件。例: 比如一个TextBox1,我们填入了”Hello World!”,在提交了页面后,在Page_Init()里面,我们访问到的TextBox1.Text不是我们的” Hello World!”,而是开始的”空字符串,如果TextBox1在我们设计的时候提供了默认值,这里访问到的也就是提供的默认值,为什么呢,这就要看下一个过程
4、了.主要步骤2.判断IspostBack,确定是否回发。 IspostBack是Page类有一个bool类型的属性,用来判断针对当前FORM的请求是第一次还是非第一次请求。在框架内部有很多的场景需要判断IsPostBack,比如:LoadAllState等操作就需要在PostBack的时候进行。对于我们自己使用WebForm进行开发时,经常会在Page_Load中对IsPostBack进行判断,因为第一次请求的时候会执行Page_Load,在非第一次请求的时候也会执行Page_Load。为什么对同一个Form有多次请求呢?中引入了服务器端事件,支持服务器端事件的控件,会发出对当前Form的请求
5、,这样在很多情形下我们就需要区别是否是对这个Form的第一次请求。 主要步骤3.初始化 初始化包括三个阶段:主要步骤1)PreInit()预初始化 A.调用OnPreInit方法引发PreInit事件 B.利用App_Themes目录中的内容进行初始化主题。以动态现一个PageTheme属性值,并创建一个编译类的实例。 C.应用模板页主要步骤2)开始初始化,将所创建的控件树上的控件都new一个实例并赋默认值。 A.递归初始化Controls集合中的控件,初始化包括设置这些控件的属性。 B.递归应用控件皮肤。 C.调用OnInit方法以引发自身的Init事件,接着递归调用子控件的OnInit方法
6、来引发他们的Init事件。 D.调用自身的TrackViewState方法重启自身的视图状态跟踪,接着递归调用子控件的TrackViewState方法重启自身的视图状态跟踪。3)InitComplete()初始化完成主要步骤4.加载ViewState处理回发数据: 加载页面状态,解析隐藏域中的ViewState,ViewState保持的值赋值到对应控件中。把需要触发事件的控件放到一个集合当中去。5.预加载(PreLoad) 页面调用OnPreLoad方法以引发PreLoad事件,该事件表示页面生命周期进入加载阶段。对应sapx.cs中的Page_Load事件。6.加载(Load) 页面首先调用
7、自身的OnLoad方法以引发自身的Load事件,接着递归调用 Contorls集合中控件的OnLoad方法以引发它们的Load事件。主要步骤7.ProcessPostData第二次处理回发数据8.触发改变的事件和点击事件。9.页面加载完成10.预渲染,对空间树进行最后一次处理11.保存当前页面的状态。12.页面渲染页面生命周期结束 页面生命周期结束后,形成了页面,继续执行管道之后的事件,执行完毕后按照原路返回到客户端。ASP.NET状态保持无状态HTTP 无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方
8、面,在服务器不需要先前信息时它的应答就较快。客户端与服务器进行动态交互的Web应用程序出现之后,HTTP无状态的特性严重阻碍了这些应用程序的实现,毕竟交互是需要承前启后的,简单的购物车程序也要知道用户到底在之前选择了什么商品。ASP.NET状态保持ASP.NET状态保持客户端的状态信息保持本质上来说有3种:隐藏域/Cookies /Querystring(URL传参)服务器端: Session(会话)/ Application/ Caching(缓存)/DataBase(数据库)常用的四大状态(信息)保持方式为:ViewState 、 Cookie 服务器端;Session、Applicati
9、on 服务器端ASP.NET状态保持ViewState(页面级): 使用ViewState的前提:页面上必须有一个服务器端窗体标记() 保存的数据只有在当前页面不关闭的情况下才能够使用。ASP.NET 的 .aspx页面特有,页面级的;就是在页面上的一个隐藏域中保存客户端单独使用的数据的一种方式服务器端控件(除那些在查看看源文件以表单标签存在的如:文本框,按钮等)的值大多都会自动保存在ViewState中,非单值服务器控件的状态也自动保存在ViewState中。存储的值得类型为object类型 (必须可以进行序列化)应用: 大多是一些小页面。比较大的页面一般不会使用。ASP.NET状态保持禁用
10、ViewState的方法:禁用单个控件的ViewState设定enableviewstate=false,禁用ViewState以后TextBox版本不受影响,Div版本受影响,因为input的value不依靠ViewState。禁用整个页面的,在aspx的Page指令区加上EnableViewState=false 。内网系统、互联网的后台可以尽情的用ViewState。ASP.NET状态保持Cookie:Cookie是一种能够让网站服务器把少量数据(4kb左右)储存到客户端的硬盘(设置了过期时间)或内存(不设置过期时间),并且读取出来的一种技术。浏览器访问一个站点时,只将属于当前站点的Co
11、okie发过到服务器。(根据域名)Cookie不兼容浏览器(不同浏览器不共享Cookie文件数据)服务器端语言和客户端语言都可以操作cookie的读和写都是浏览器做的存储的数据类型为字符串cookie的删除 : 服务器是不能直接的去删除浏览器上的cookie的,但是可以过设置cookie的过期时间来删除cookie(将过期时间设为-1)ASP.NET状态保持例:写: HttpCookie hc = new HttpCookie(test, “Hello World!); / 设cookie的过期时间。 hc.Expires = DateTime.Now.AddDays(7); Response
12、.Cookies.Add(hc);读: HttpCookie hc = Request.Cookiestest; if (hc!= null) Response.Write(hc.Value); ASP.NET状态保持Session:常用于保存登录用户ID、验证码不同的浏览器不能共用session 因为不同的浏览器保存的sessionid不同存储的数据只为某个客户端服务 ,并且能被网站的所有页面访问 跟cookie类似Session只可由该会话的用户访问当会话过期或终止时,服务器就会清除 Session 对象Session可以存储任何数据类型包括自定义对象销毁: Session.Abandon();/销毁服务器端的Session对象Session.Clear();/清空服务端的Session对象里的键值对,Session对象并没有从Session池里销毁ASP.NET状态保持Session常用属性、方法属性属性描述描述SessionID唯一用户会话标识符TimeOut用户超时(单位:分钟),默认20分钟Count会话状态集合中的项目数方法方法描述描述Abandon方法用于显式结
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 水泥沙子采购合同
- 授权经销合同协议
- 农业科技园区综合开发合同
- 短期租赁服务意外免责协议
- 网络信息技术支持协议
- 商场装修合同与商场装修合同
- 打井承包合同
- 手房转让买卖协议
- 新版不定期劳动合同书(33篇)
- 瓦工贴砖施工合同
- 城市绿化与生态环境改善
- 2024-2025学年中小学校第二学期师德师风工作计划:必看!新学期师德师风建设秘籍大公开(附2月-7月工作安排表)
- 《急性心力衰竭的急救处理》课件
- 小学六年级数学上册《简便计算》练习题(310题-附答案)
- 青海省西宁市海湖中学2025届中考生物仿真试卷含解析
- 2024年河南省《辅警招聘考试必刷500题》考试题库及答案【全优】
- -情景交际-中考英语复习考点
- 安全隐患报告和举报奖励制度
- 地理标志培训课件
- 2024年中国养老产业商学研究报告-银发经济专题
- 高教版2023年中职教科书《语文》(基础模块)下册教案全册
评论
0/150
提交评论