当前位置: 首页 > article >正文

浅谈ViewState

一、ViewState概述

ViewState是基于webform的


② 在web窗体控件属性处设置runat = "server",这个控件会被附加一个隐藏的属性_ViewState,_ViewState存放了所有控件在ViewState中的状态值。


③ 页面会在输出时,自动添加下面的隐藏域:


value处的值只是base64编码并不是加密。

④ ViewState是一个名称/值的对象集合。


⑤ 当请求某个页面时,ASP.NET会把所有控件的状态序列化成一个字符串,然后作为窗体的隐藏属性送到客户端,当客户端将页面回传时,ASP.NET分析回传的窗体属性,并赋给控件对应的值。(恢复现场)


⑥ ViewState不能存储所有的数据类型,仅支持:String、Integer、Boolean、Array、ArrayList、Hashtable

二、ViewState原理


① 浏览器请求Default.aspx页面。

② 在服务器端 发现创建的ViewState 这个时候 会自动创建一个名字叫做__VIEWSTATE(双下滑线 全部是大写)的隐藏域 其隐藏域的值经过base64加密以后返回到浏览器端这一加密过程在页面生命周期的SaveState事件中的SaveAllState方法中完成。

③ 当浏览器提交表单的时候 将__VIEWSTATE的隐藏域也一起提交到服务端 这个时候 页面生命周期的ReadState事件的ReadAllState方法会将加密后的值反base64解密 最后将值赋值给名字叫做xx的ViewState。

④ 最后来操作ViewState中的值。


三、使用

1.使用原因

由于http是无记忆无状态的协议。页面传值给服务器,都是通过form表单,且控件自己必须有name属性与value才可以得到值。但是像显示动态信息很多情况下并不都是使用满足上述条件的控件,所以需要将http伪装为有记忆的。而viewstate就是可以事先这个伪装术的策略。

2.使用方法

① 条件与设置


② 实例
aspx.cs文件:




aspx界面(就一个自增按钮):




运行效果:


③ 禁用方法

在默认情况下,所有服务器控件的viewstate开启状态,通过以及几种途径来禁止。
1.页面级别
2.控件级别
3.应用程序级别
4.机器级别


页面级别禁止的方法是在页面的开始写入
<span style="font-family:Microsoft YaHei;"> <% @ Page EnableViewState  = " False "   %>  
or <% @ Page EnableViewState  = " True "   %></span>




控件级别是
<span style="font-family:Microsoft YaHei;"> < asp:TextBox id = " txtCode "  runat = " server” EnableViewState= " false "  /> or< asp:TextBox id = " txtCode "  runat = " server "  EnableViewState = " true "   /></span>

也可以直接在控件处修改



程序级别是在web.config中
<span style="font-family:Microsoft YaHei;">< pages enableViewState = " false "   /> 
or< pages enableViewState = " true "   />
</span>

机器级别是在machine.config中
<span style="font-family:Microsoft YaHei;"> < pages enableViewState = " true "  enableViewStateMac = " true "  ...  /> 
or< pages enableViewState = " false "  ...  /> </span>


四、补充

1.回忆与直接写值不同

如果将ViewState禁用后,还是可以在服务器端给控件text赋值的。但是不可回忆(不可还原现场)。通过下面这个实例来感受下。

aspx.cs文件:



界面:

一个label和一个按钮


运行效果:



2.读取viewstate中的值都是开始键值对捆绑设定好的。如果改键未设定值时,读出来的是空。

对上面使用中介绍的ViewState进行一点改进。

aspx.cs文件:


界面:

同上

运行效果:




http://www.lryc.cn/news/2416295.html

相关文章:

  • 【C语言】 基础知识入门
  • 用百度搜索SB,为什么是google排第一?
  • 计算机硬件主板各部分内部结构,电脑主板各个模块介绍与原理解读
  • [韩国][喜剧][请别非礼我][RMVB/384M][中字][经典爆笑性喜剧]
  • 搜狐IM
  • REBOL简明笔记
  • MODBUS三种通讯模式RTU,ASCII,TCP,功能码,RCR校验
  • 查询某个邮箱账户的邮件传输日志
  • html 出现脚本错误,脚本错误
  • 仿支付宝登录页面
  • 推广ID
  • php 右下脚弹窗,百度右下角视频弹窗代码!!!!!!!!!!!
  • 子数整数.
  • nginx中confx.xml配置
  • 电影职员表中英文正确翻译及介绍
  • ASP.NET 淘宝网站形式的设计与实现(论文+源码)_Nueve
  • 理性主义与西方思想传统
  • 中脉乱象之四问中脉人
  • 北师大19秋计算机在线1,北师19秋《专科英语(二)》在线作业1【满分答案】
  • Netsuite设置中文多语言
  • QQ桌球瞄准器开发(1)桌球瞄准器介绍与使用方法
  • 代码审计入门学习笔记
  • 大学毕业生,关于转正定级和干部身份你懂吗?
  • 女人一生要读的30本书
  • 域名备案与空间备案有什么关系吗,域名备案又是怎么回事?
  • Redis常用命令大集合(快速入门)
  • 更改GROOVE的文件夹位置
  • SUN 的Java编码规范
  • Android 开发论坛
  • Orchestrator源码解读4-计划内切换