.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=

随便看看

模拟浏览器请求(WebRequest)

//参数stringblockType=context。要求从其他公司传递的参数[“BlockType”]///stringblockNo=context.Request.Params[“BlockNo”];//blockList.其中(c=>blockType=SZ&...

Debian忘记密码重置

我使用的系统是Debian8,但这种方法也适用于Debian7以上的系统。具体步骤是重新启动VPS。您可以使用“CTRL+ALT+DEL”按钮直接在面板或VNC上重新启动VPS,然后按图中的“e”按钮;在BIOS界面上,按“e”进入GRUB引导菜单,然后按“e”进入编辑;输入GRUB编辑红色框中的内容,并将“ro”替换为“rwinit=/bin/sh”;修改...

tomcat不打印日志的原因及解决办法

tomcat的日志在刚启动的时候可以正常打印,系统正常运行几天以后就会出现不打印日志或者日志打印的内容缺少的情况,但是系统还是可以正常使用的,重启tomcat以后日志打印就又正常了,请问一下这是什么原因呢?日志框架使用的是log4j,使用了日志按天分割,每天的日志量是5G左右1.下载日志jar包,例如:commons-logging-1.1.1.jar。放在...

以『公众号』为例,手把手教你爬取PC端数据

“appmsgext_url=origin_url+”__biz={}&mid={}&sn={}&idx={}&appmsg_token={}&x5=1“.formatcontent=requests.post.json()打印打印可以看到帖子已成功发送,并提取相应的阅读号、点赞号和观看号。5。同一个公众号被扩展。如果...

网站使用微信扫码登录流程

微信扫码登录是一个标准的oauth2.0的过程。...

ORACLE DELETE数据慢的案例

我去处理这个问题时,首先怀疑可能是SQL的阻塞、触发器、外键约束、高水位线等因素中的某一个导致DELETE操作慢,于是我打算一个一个排除,我先试着删除一条记录,然后去检查SQL的阻塞情况,结果使用下面SQL语句并没有发现SQL被阻塞。于是SQL的阻塞导致DELETE慢的原因被我排除了。也就是说DELETE操作并不会触发任何触发器。我们可以用跟踪当前会话,查看...