.NET 原理之 ViewState

1、从MSDN中我们可以知道一个页面生命周期大约可分为为:页请求、开始、初始化、加载、验证、回发事件处理、呈现、卸载这几个阶段。

HttpHandler是无状态的,aspx是高级的HttpHandler所以同样是无状态的,在aspx.cs中一般也不要用类字段。那么如果确实需要存储一些页面相关的变量怎么办呢?比如点击按钮“点击次数”加一。什么原理?

查看页面的__VIEWSTATE,它是一个隐藏的input,使用ViewStateDecoder2.0.exe查看内容发现其中有“点击次数”对应的值。每次页面渲染生成html的时候,asp.net把ViewState中的值进行编码处理( Base64)序列化为__VIEWSTATE这样一个隐藏字段放到html中,下次再次提交的时候把__VIEWSTATE提交,服务器把__VIEWSTATE反序列化填充到ViewState属性中。其实就是把浏览器端当成“数据暂存”场所。反编译看看Label的Text实现。l 除了ViewState属性,还有哪些数据会放到__VIEWSTATE中?所有在cs代码中修改的值,比如给DataSource赋值的,比如Label的Text是没有放到__VIEWSTATE的,但是代码中给Text属性赋值就会被放到__VIEWSTATE中了。所以__VIEWSTATE是用来盛放“本次修改的内容”供“下次请求”还原现场使用,把Http模拟成了有状态。

2、从Label反编译来看,Label的文本赋值是从上一次请求的ViewState中取得的值赋给它,所以浏览器记住了上一次的值,看起来是"有状态的"。

时间: 2024-10-13 09:56:16

.NET 原理之 ViewState的相关文章

HTTP中Get与Post、ViewState 原理

Http是请求,响应的模型,服务器不会来读取浏览器的网页,只能够得到客户端提交过来的数据当用户点击提交,服务器就知道"提交回来了"(PostBack) Get与Post 设置form的method属性指定表单提交方式,get(默认值)是通过URL传递值,传递的数据量是有限的post传递的表单值是隐藏到http报文中,URL中看不到,会有浏览器提示重新提交表单的问题,get没有Get方式URL数据格式,服务端文件名跟着"?",由于客户端可能向服务器端提交多个键值对,键

.NET中ViewState的原理

今天在公司竟然有人在问我ViewState原理.其实这个事最基础的东西.可能在网上说的有点笼统.我现在将我个人理解分享一下: 首先浏览器经过发送请求至服务器端后,服务器端会接受这个请求,查看客户端发送过来的ViewState(不管是自定义还是服务控件所创建). 他会自动创建一个__VIEWSTATE的东东(这个你不用管__VIEWSTATE)到底是什么.可以当他是一个临时存储的变量(在.NET中可能叫隐藏域). 这个东东当然是经过Base64加密以后返回到浏览器端(这一加密过程在页面生命周期的S

server,viewstate原理,请求过程原理,cookie

1:Request,Response其它成员  Response.Write(Request.Url.ToString());//获取当前请求的URL            Response.Write("<hr/>");            Response.Write(Request.UrlReferrer.ToString());//获取上传请求的URL信息                        盗链                        SEO:搜

Atitit 视图状态ViewState)的原理与管理

Atitit  视图状态ViewState)的原理与管理   1.1. 视图状态ViewState的实现隐藏字段和url参数1 1.2. Asp.net的视图状态管理1 2. 1 2.1. H5的视图状态管理1 2.2. Java Jsp和php的视图状态管理1 2.3. Cs桌面程序的视图状态管理1 3. 参考1   1.1. 视图状态ViewState的实现隐藏字段和url参数   1.2. Asp.net的视图状态管理 1.3. H5的视图状态管理 读取url参数,客户端req对象获取.

viewstate

学习标签: ViewState 本文导读:在web窗体控件设置为runat = "server",这个控件会被附加一个隐藏的属性_ViewState,_ViewState存放了所有控件在ViewState中的状态值.ViewState是一个名称/值的对象集合.当请求某个页面时,ASP.NET会把所有控件的状态序列化成一个字符串,然后作为窗体的隐藏属性送到客户端,当客户端吧页面回传时,ASP.NET分析回传的窗体属性,并赋给控件对应的值. 当我们在写一个asp.net表单时, 一旦标明了

ASP.NET ViewState详解

ASP.NET ViewState详解[转载] asp.net存储textboxserializationstring服务器 作者:Infinities Loop 概述 ViewState是一个被误解很深的动物了.我希望通过此文章来澄清人们对ViewState的一些错误认识.为了达到这个目的,我决定从头到尾详细的描述一下整个ViewState的工作机制,其中我会同时用一些例子说明我文章中的观点,结论.比如我会用静态控件(declared controls)和动态控件(dynamic contro

[Asp.Net]状态管理(Session、Application、Cache、Cookie 、Viewstate、隐藏域 、查询字符串)

Session:  1. 客户在服务器上第一次打开Asp.Net页面时,会话就开始了.当客户在20分钟之内没有访问服务器,会话结束,销毁session.(当然也可以在Web.config中设置缓存时间)可以在Global.aspx的Session_Start()事件处理程序中,可以初始化会话变量.在下面的实例中,名为mydata的会话状态被初始化为0: 运行结果: 2.Session是保存在服务器端的用户变量.我可以在一个页面中对Session进行值,然后在另一个页面里访问它. Session的

ViewState的用法

学习标签: ViewState 本文导读:在web窗体控件设置为runat = "server",这个控件会被附加一个隐藏的属性_ViewState,_ViewState存放了所有控件在ViewState中的状态值.ViewState是一个名称/值的对象集合.当请求某个页面时,ASP.NET会把所有控件的状态序列化成一个字符串,然后作为窗体的隐藏属性送到客户端,当客户端吧页面回传时,ASP.NET分析回传的窗体属性,并赋给控件对应的值. 当我们在写一个asp.net表单时, 一旦标明了

viewState详解

作者:Infinities Loop 概述 ViewState是一个被误解很深的动物了.我希望通过此文章来澄清人们对 ViewState的一些错误认识.为了达到这个目的,我决定从头到尾详细的描述一下整个ViewState的工作机制,其中我会同时用一些例子说明我文 章中的观点,结论.比如我会用静态控件(declared controls)和动态控件(dynamic controls)两个方面来说明同一个问题. 现在有关ViewState的文章可谓多如牛毛,你可能会说再写有关 ViewState的文