浅谈ViewState[通俗易懂]

浅谈ViewState[通俗易懂]一、什么是ViewState二、使用

大家好,又见面了,我是你们的朋友全栈君。

一、ViewState概述

ViewState是基于webform的


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


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

浅谈ViewState[通俗易懂]

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

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


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


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

二、ViewState原理

浅谈ViewState[通俗易懂]

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

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

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

④ 最后来操作ViewState中的值。


三、使用

1.使用原因

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

2.使用方法

① 条件与设置
浅谈ViewState[通俗易懂]

② 实例
aspx.cs文件:
浅谈ViewState[通俗易懂]



aspx界面(就一个自增按钮):
浅谈ViewState[通俗易懂]



运行效果:
浅谈ViewState[通俗易懂]

③ 禁用方法

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

页面级别禁止的方法是在页面的开始写入

<span style="font-family:Microsoft YaHei;"> <% @ Page EnableViewState  = " False "   %>  
or 
 <% @ Page EnableViewState  = " True "   %></span>

浅谈ViewState[通俗易懂]

控件级别是

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


也可以直接在控件处修改
浅谈ViewState[通俗易懂]


程序级别是在web.config中
浅谈ViewState[通俗易懂]

<span style="font-family:Microsoft YaHei;">< pages enableViewState = " false "   /> 
or
 < pages enableViewState = " true "   />
</span>


机器级别是在machine.config中
浅谈ViewState[通俗易懂]

<span style="font-family:Microsoft YaHei;"> < pages enableViewState = " true "  enableViewStateMac = " true "  ...  /> 
or
 < pages enableViewState = " false "  ...  /> </span>



四、补充

1.回忆与直接写值不同

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

aspx.cs文件:

浅谈ViewState[通俗易懂]


界面:

一个label和一个按钮


运行效果:

浅谈ViewState[通俗易懂]


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

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

aspx.cs文件:

浅谈ViewState[通俗易懂]

界面:

同上

运行效果:

浅谈ViewState[通俗易懂]



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/162432.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 什么是云服务器ECS?云服务器ECS详解

    什么是云服务器ECS?云服务器ECS详解什么是云服务器ECS?云服务器ECS详解一、前言二、云服务器ECS详解为什么选择云服务器ECS?产品架构产品定价管理工具部署建议相关服务三、写在后面的话叮嘟!这里是小啊呜的学习课程资料整理。好记性不如烂笔头,今天也是努力进步的一天。一起加油进阶吧!一、前言云服务器ecs有什么作用?现在越来越多的企业都开始将服务器迁移至云端,云技术的应用十分广泛,其中之一就体现在云服务器的使用上,凭借更加简单的操作与便利等优势,云服务器可谓深受众多企业青睐二、云服务器ECS详解云服务器(ElasticComp

    2022年5月23日
    31
  • potplayer 64位 官网下载地址

    potplayer 64位 官网下载地址potplayer64位最新官网下载地址链接:https://gsf-fl.softonic.com/f94/2ec/be06ec8a283bee92cda70eb3ede9c661d0/PotPlayerSetup64.exe?Expires=1585679112&Signature=cff21a190f0fcb9c61356f8eca9b8155ed6afc48&ur…

    2022年7月12日
    52
  • 字符串常量池详解「建议收藏」

    字符串常量池详解「建议收藏」字符串常量池详解文章所涉及的资料来自互联网整理和个人总结,仅作为个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢!概述在JVM中,为了减少字符串对象的重复创建,维护了一块特殊的内存空间,这块内存空间就被称为字符串常量池。在JDK1.6及之前,字符串常量池存放在方法区中。到JDK1.7之后,就从方法区中移除了,而存放在堆中。一下是《深入理解虚Java虚拟机》第二版原文:对于HotSpot虚拟机,根据官方发布的路线图信息,现在也有放弃永久代并逐步改为采用NativeMemory来实

    2022年7月28日
    5
  • PyCharm的配置(背景颜色+字体大小+行号+解释器选择等)

    PyCharm的配置(背景颜色+字体大小+行号+解释器选择等)我的第二篇博客,上一篇是PyCharm安装过程,下面讲解PyCharm的配置。第一:配置PyCharm的背景。打开PyCharm开发环境,使用快捷键Ctrl+"`"(该键位于键盘的左上角,和”~“同一个键位),即可出现下图配置选项。colorScheme:配置背景颜色(有白色,黑色等)codestylescheme:默认为defaultKeymap:快捷键配置,依个人习惯而定Vie…

    2022年6月20日
    25
  • JDBC连接ORACLE的三种URL格式

    JDBC连接ORACLE的三种URL格式使用jdbc连接oracle时url有三种格式格式一:OracleJDBCThinusinganSID:jdbc:oracle:thin:@host:port:SIDExample:jdbc:oracle:thin:@localhost:1521:orcl这种格式是最简单也是用得最多的你的oracle的sid可以通过一下指令获得:sqlplus/assys

    2022年6月23日
    30
  • C++ 字符串分割

    C++ 字符串分割C++中经常需要对字符串按照指定字符或字符串进行分割操作以获得子串。下面给出具体实现。版本一://qsort函数需要的比较函数,按照升序排序intcomp(constvoid*a,constvoid*b){ return*(int*)a-*(int*)b;}//按指定分隔符分割字符串//src:源字符串delimiter:分隔符集合vector<string&…

    2022年6月12日
    33

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号