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

随便看看

Jmeter中获取返回结果中的值

在jmeter的测试中,通常需要在下一个请求中使用上一个请求的返回值。如何获得返回值非常重要。插件下载地址为:http://jmeter-plugins.org/wiki/JSONPathExtractor/下载后,将lib文件夹放在jmeter目录中。...

Android开发 Camera2的CaptureRequest属性整理--完善中

当android.control.aeExposureCompensation改变时,即使AE锁定为ON,则相机设备将仍然调整其曝光值。如果android.control.aeMode是ON_ALWAYS_FLASH,现场可能会变得过度曝光。同样,AEprecapture触发取消了当AE已被锁定没有影响。见android.control.aeState为AE...

Qt中使用定时器(可使用QObject::timerEvent定时执行,QTimer::singleShot可只触发一次)

在Qt中使用定时器有两种方法,一种是使用QObiect类的定时器;一种是使用QTimer类。当定时器触发时,应用程序会发送一个QTimerEvent。与定时器相关的成员函数有:startTimer()、timeEvent()、killTimer()。virtualvoidQObject::timerEvent;虚函数timerEvent()被重载来实现用户的...

Systemd简介与使用

Systemd在并行启动中采用了比Upstart更激进的方案。图2显示了systemd的并行启动模式。它允许所有配置的服务同时启动。事实上,大多数使用systemd的现代发行版都与此类似。系统通过配置这些单元来切换和管理服务。...

PbootCMS后台增加轮播图自定义分组名称

我们知道,在PbootCMS后台的旋转木马图形模块中,当添加新的旋转木马图时,您不能自己选择组。相反,您可以自动创建组,例如组1、组2和组3。这显然对客户的体验不友好,而且您无法直观地知道在网页的哪个位置使用了旋转木马图。让我们分享一下如何启用PbootCMS后台来添加、删除和修改旋转木马图形组。...

Fiddler抓包7-post请求(json)(转载)

2.查看上图中的红色框:这里只支持application/x-www-form-urlencoded格式的body参数,即json格式。您需要检查JOSN列中的five和xml。1.如果遇到text/xml格式的正文,如下图所示...