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

转载于:https://www.cnblogs.com/luoyangcn/p/4426098.html

.NET 原理之 ViewState相关推荐

  1. ViewState原理

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

  2. .net 中viewstate的原理和使用

    ASP.NET中的ViewState ViewState是ASP.NET中用来保存WEB控件回传时状态值一种机制.在WEB窗体(FORM)的设置为runat="server",这个 ...

  3. ViewState的原理,应用场合,注意事项

  4. ASP.NET ViewState 初探

    Susan Warren Microsoft Corporation 与刚接触 ASP.NET 页面的开发人员交谈时,他们通常向我提出的第一个问题就是:"那个 ViewState 到底是什么 ...

  5. 【分析总结】ASP.NET中的状态管理原理

    HTTP协议是介于请求.响应的断开时网络协议,与连接式的网络协议不同,例如,与我们熟悉的TCP协议相比,客户端与服务器并没有持续的连接存在,在每一次会话之后,连接都会被断开,在下一次请求的时候客户端会 ...

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

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

  7. ASP.NET中PostBack和ViewState

    ASP.NET中PostBack和ViewState 关于PostBack,我曾经也写过一篇博客<深入理解doPostBack>.在这篇文章里有对PostBack进行了一些研究,现在看来研 ...

  8. 2011年9月19日 面试重点:asp.net运行原理和生命周期

    面试重点:asp.net运行原理和生命周期 1.ispostback回调机制 isPostBack=false !IsPostBack==ture 当前页面是第一次加载 IsPostBack 由于用户 ...

  9. asp.net ViewState详解

    ViewState是一个被误解很深的动物了.我希望通过此文章来澄清人们对ViewState的一些错误认识.为了达到这个目的,我决定从头到尾详细的描述一下整个ViewState的工作机制,其中我会同时用 ...

最新文章

  1. mysql 字段存放小图标_让MySQL支持emoji图标存储
  2. 龙格库塔法解微分方程组的matlab程序,MATLAB实例源码教程:龙格库塔法求解微分方程组源代码实例.doc...
  3. golang中的byte与rune
  4. 【Python Flask】使用Ajax从后台请求数据
  5. mysql事务中怎么更改空值_MySQL事务
  6. qemu-kvm磁盘读写的缓冲(cache)的五种模式
  7. 宝塔LNMP使用步骤nginx+php 7.2
  8. python的map函数求取每个元素的平方根_python的map函数的使用方法详解以及使用案例(处理每个元素的自增、自减、平方等)......
  9. 经验之谈:程序员应该如何学好大数据技术
  10. 详述支付路由的设计方案
  11. python 第一行 报错_解决python的空格和tab混淆而报错的问题
  12. 史上最后一位数学全才——庞加莱
  13. 2016十月新番简介
  14. 苹果系统无法更新无法连接网络连接服务器,iTunes无法联系iphone软件更新服务器 不可连接解决方法...
  15. python读parquet文件 pandas读parquet文件
  16. 【CSDN编程竞赛第六期】python详解
  17. 奇迹Mu分析 - NPC相关操作
  18. MySQL 不等于的三种表示及区别
  19. iOS开发基础:最新的APP打包上架流程
  20. 【XR806开发板试用】TCP通信测试 Ping 命令测试

热门文章

  1. 【原】使用Bmob作为iOS后台开发心得——查询关联关系(BmobRelation)
  2. jQuery中live函数的替代-【jQuery】
  3. Emacs+hideif.el 隐藏预编译代码(或彩色显示预编译代码)
  4. 《C++ Primer》关于自增自减操作符的描述错误
  5. artdialog子弹窗关闭父弹窗
  6. oracle重新生成控制文件,Oracle重建控制文件的语法
  7. (03)FPGA与CPLD区别
  8. (1)触发器systemverilog与VHDL编码
  9. 7003.node.js环境搭建及三方软件包
  10. gcc生成的汇编和keil生成的汇编_Linux编译工具:gcc入门