今天我们来了解一下在ASP.NET中ViewState的作用。
ViewState=视图状态;
ViewState的通用解释就是:是 ASP.NET 页中的存储库,可以存储必须在回发过程中保留的值。页框架使用视图状态在各个回发之间保存控件设置。在各个回发之间保存值,而不将这些值存储在会话状态或用户配置文件中,将信息存储在视图状态中,这样在下次将该页发送到服务器时,代码便可以在页加载事件过程中访问这些信息。
所谓回发:就是由服务器控件导致的页面刷新。
ASP.NET 页框架使用视图状态在往返过程之间保存页和控件值。在呈现页的 HTML 时,必须在回发过程中保留的页和值的当前状态将被序列化为 Base64 编码字符串。然后,它们将被放入页中的一个或多个隐藏字段。
大家在开发程序的时候,查看网页源代码。是不是都发现都多了一个ID名为__VIEWSTATE的hidden控件呢。这就是在回发过程中保留的值。
为什么要微软要开发这样一个功能呢?
因为Web 应用程序是无状态的。每次从服务器请求页时,都会创建网页类的一个新实例。这通常意味着在每次往返过程中会丢失该页及其控件中的所有信息。
比如:我有一个DropDownList控件,然后我点击了某个Button控件,在Button对应的click事件下修改了DropDownList的默认选项,这时候,ViewState中就会记录DropDownList的值,然后在下一次的回发事件中,DropDownList的值就会是通过Button事件修改过的值,而不是初始值。
说了怎么多,我们上代码吧,这样更方便理解。
1.html代码
EnableViewState为false就是禁用ViewState。
2.Button1_Click事件
3.点击刷新按钮,触动回发
相信大家看到这里可以理解了,第一个Label的值是通过Button1_Click事件改变过后的值,而第二个Label的值则是初始值,因为第二个Label禁用了ViewState。
ViewState不仅如此,也可用来存在我们自己的变量。
总结:ViewState由于数据存放在客户端,肯定会减少服务器的压力,但是,如果ViewState的数据量过大,肯定是会影响页面的加载速度和性能的。
提示:文本框输入类的值都不会存放在ViewState中,