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中取得的值赋给它,所以浏览器记住了上一次的值,看起来是"有状态的"。
 
 

.NET 原理之 ViewState的更多相关文章

  1. [译]面向初学者的Asp.Net状态管理技术

    介绍 本文主要讲解Asp.Net应用程序中的状态管理技术(Asp.Net中有多种状态管理技术),并批判性地分析所有状态管理技术的优缺点. 背景 HTTP是无状态的协议.客户端发起一个请求,服务器响应完 ...

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

    Atitit  视图状态ViewState)的原理与管理   1.1. 视图状态ViewState的实现隐藏字段和url参数1 1.2. Asp.net的视图状态管理1 2. 1 2.1. H5的视图 ...

  3. ViewState原理

    1.IsPostBack原理 1.1 所有的服务端控件,都必须放在runat="server"的表单里面,runat="server"的表单会生成__VIEWS ...

  4. HTTP中Get与Post、ViewState 原理

    Http是请求,响应的模型,服务器不会来读取浏览器的网页,只能够得到客户端提交过来的数据当用户点击提交,服务器就知道"提交回来了"(PostBack) Get与Post 设置for ...

  5. viewstate cookie和session原理回顾

    --个人理解会存在些错误仅供参考!!! ----浏览器保持会话状态原理 用户发送一次请求,服务器端会检索报文中是否存在sessionid不存在,就分配一个写到cookie当中,存在浏览器的缓存中,当再 ...

  6. FineUI(开源版)v6.0中FState服务器端验证的实现原理

    前言 1. FineUI(开源版)是完整开源,最早发起于 2008-04,下载全部源代码:http://fineui.codeplex.com/ 2. 你可以通过捐赠作者来支持FineUI(开源版)的 ...

  7. ASP.Net WebForm温故知新学习笔记:二、ViewState与UpdatePanel探秘

    开篇:经历了上一篇<aspx与服务器控件探秘>后,我们了解了aspx和服务器控件背后的故事.这篇我们开始走进WebForm状态保持的一大法宝—ViewState,对其刨根究底一下.然后,再 ...

  8. Webform Application、ViewState

    Application(全局对象) Application对象生存期和Web应用程序生存期一样长,生存期从Web应用程序网页被访问开始,HttpApplication类对象Application被自动 ...

  9. ASP.NET保存信息总结(Application、Session、Cookie、ViewState和Cache等) ZT

    http://www.cnblogs.com/ranran/p/4065619.html http://www.cnblogs.com/jxlsomnus/p/4450911.html 以下是关于AS ...

随机推荐

  1. 多媒体开发之wis-stream

    在live555的mediaServer中,已经实现RTSP-over-HTTP,但默认没有开启.如果要实现这个功能,需要调用RTSPServer::setUpTunnelingOverHTTP(), ...

  2. 暴走吧!Snapdragon SDK开发速成指南

    (文/Aurora J) Qualcomm的Snapdragon处理器.它快如闪电.效率极高.擅长挑战多任务极限,而且拥有攻城狮们梦寐以求的无限潜能.它能确保您的手机集4G LTE.极速体验.长久续航 ...

  3. GridView认识(一)

    GridView认识(一)导读:一.显示数据 a.通过代码绑定显示数据 b.通过数据源控件绑定显示数据 二.外观控制 a.整体外观控制 b.列表行的控制 c.列表列的控制 内容:一.显示数据(一)代码 ...

  4. 连通图(Tarjan算法) 专题总结

    一.题目类型: 1.有向图的强连通分量: POJ1236 Network of Schools HDU1269 迷宫城堡 2.割点 & 割边: UESTC - 900 方老师炸弹 UVA315 ...

  5. Linux 打包classes

    进入项目后 tar -zcvf ~/${HOSTNAME}-${PWD##*/}-$(date +%Y-%m-%d)-classes.tar.gz webapps/ROOT/WEB-INF/class ...

  6. 【JSOI 2008】 最大数

    [题目链接] 点击打开链接 [算法] 很明显,我们可以用线段树解决此题 只需维护区间最值就可以了 [代码] #include<bits/stdc++.h> using namespace ...

  7. hdu 1480

    钥匙计数之二 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  8. bzoj 1415: [Noi2005]聪聪和可可【期望dp+bfs】

    因为边权为1所以a直接bfs瞎搞就行--我一开始竟然写了个spfa #include<iostream> #include<cstdio> #include<queue& ...

  9. bzoj 1922: [Sdoi2010]大陆争霸【dijskstra】

    d[u]为u被几个节点保护,d1[u]为最早到u的时间,d2[u]为u的最早可进入时间(保护点都被打下来了的时候),然后最终最早进入时间就是max(d1[u],d2[u]),把这个作为权值放进小根堆, ...

  10. 标准块CP功能实现

    #include<stdio.h> int main(int argc,char *argv[]) { FILE *src_fp,*des_fp; int src_ret; ]={}; ) ...