.NET 之ViewState的本质

摘要:
ViewState如何实现这些函数。例如,使用GridView绑定DataSource控件以显示类表数据。在ViewSateEnable的情况下,在首次加载页面时执行数据绑定。在后续的回发访问中,如果当前数据视图仍然被访问,即没有执行分页或排序操作,DataSource将不会再次绑定数据,因为所有信息都可以从ViewSate获得。无需再次访问数据库并再次绑定数据控件。这个场景最能说明ViewSate的原始设计意图。
    ViewState是如何实现这些功能。
  1. 以名值对的方式来存控件的值,和Hashtable的结构类似;
  2. 跟踪那些ViewState中出现改变的值,以便对这些脏数据(dirty)进行进一步的处理;
  3. 通过序列化将ViewState中的值保存在页面的隐藏域(Hidden Field)中(这是默认的持久化方式),并通过反序列化得到对应的ViewState对象以便进行相应的操作;
  4. 在页面回传的过程中自动的存储ViewState中的跟踪的值。
    什么是ViewState不能做的?
  1. 自动保存一个类中变量的状态,无论是private, protected还是public的变量;
  2. 可以在页面回传的过程中记住所有状态值;
  3. 只要有了ViewState那么每次页面请求时重新构造的数据的操作是不必要的了;
  4. ViewState is not responsible for the population of values that are posted such as by TextBox controls (although it does play an important role) ViewState并不存储那些通过Post名值对回传的数据值(如TextBox的TextBox.Text);
  5. 想让ViewState替你泡一杯咖啡,做梦吧:P。

例如用GridView绑定DataSource控件展现一个类表数据,在ViewSate Enable的情况下,页面第一次加载时进行数据绑定,在随后的回发访问中,如果仍是访问当前数据视图,即没有进行分页、排序操作等,DataSource不会再进行数据绑定,因为所有的信息都可以从ViewSate中获取,不需要再次访问数据库再次绑定数据控件了。而如果你将ViewState Disable掉,那么每次访问则都需要进行数据绑定了(可以通过SqlProfiler来捕捉SqlDataSource在两种情况下对数据库的访问情况)。这个场景可能最能说明ViewSate的设计初衷了。

免责声明:文章转载自《.NET 之ViewState的本质》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Innodb 表空间卸载、迁移、装载超柔磨绒印花空调被(200*230cm) 凡客诚品工商银行团购专区 VANCL凡客诚品下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

微信小程序 View:flex 布局

微信小程序View支持两种布局方式:Block和Flex所有View默认都是block要使用flex布局的话需要显式的声明:display:flex;下面就来介绍下微信小程序的Flex布局先做一个简单的demo123加上背景色能看的更清楚些.main{width:100%;background-color:antiquewhite;}.item{height...

索引节点(inode)爆满问题处理

后来,我用df-I检查/data分区的索引节点,发现它已满,这导致系统无法创建新的目录和文件。inode是用于存储这些数据的信息,包括文件大小、所有者、用户组、读写权限等。inode索引每个文件的信息,因此它具有inode的值。根据指令,操作系统可以通过inode值最快找到对应的文件。故障排除的原因是/data/cache目录中有大量小字节缓存文件,这些文件...

VirtualBox虚拟机下Windows登录密码破解方法(阿里云推荐码:1WFZ0V,立享9折!)

过去两年虚拟机的发展给开发者带来了极大的便利。要安装新环境,只需从其他人复制虚拟机文件即可。我以前在Ubuntu下工作,Windows偶尔也会使用它。所以我在Ubuntu VirtualBox下安装了Windows7。两天前,我在MacAir下打开了VirtualBox并启动了Win7虚拟机。在Win7登录界面输入密码后,系统提示我密码不正确。我只能在最初的...

极验验证码破解之selenium

大家好。我是星星在线,我又来了。今天,我给大家带来极性验证码的硒裂解方法。你有点兴奋吗?你们等不及了。让我们直奔主题。首先,随机找到一个特征点,检查元素,看它是否位于div元素,然后查看它后面的位置。距离已确定。以下是移动硒的大量模拟操作。我们只需要确认需要哪些接口。...

css设置文字多余部分显示省略号

如果只显示一行,则可以使用以下方法:  overflow:hidden;  text-overflow:ellipsis;  white-space:nowrap;如果需要显示多行,在需要设置的元素style中添加以下代码:  word-break:break-all;  text-overflow:ellipsis;  display:-webkit-bo...

mysql修改字段防止锁表

步骤1:修改大表、addcolumn或dropcolumn的字段,操作完成后将锁定该表。此时,查询ok、insert和update将等待锁定。...