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的设计初衷了。

最新文章

  1. 【夯实PHP基础】php开发时遇到白页的调试方法
  2. JavaScript自学之数组排序
  3. Atitit mtp ptp rndis midi协议的不同区别
  4. ACM n-1位数
  5. JAVA 中SQL字符动态拼接
  6. java 用socket制作一个简易多人聊天室
  7. c++ std::string 用法
  8. Dynamic\Static\IsKinematic
  9. 在某些情况下明明添加了引用,为何VS还报错"XXX"不存在类型或命名空间(是否缺少程序集引用)
  10. Javascript设计模式系列二
  11. nodeJS之crypto模块md5和Hmac加密
  12. c语言实现:扫雷
  13. 排序函数 sort() 和 高阶函数sorted()
  14. 关于Floyd求解最小环的问题
  15. 分享10个原生JavaScript技巧
  16. APP端测试,常见功能测试点汇总
  17. JavaWeb XML
  18. 【hadoop】 running beyond virtual memory错误原因及解决办法
  19. Xcode编译报错信息总结
  20. Windows安装IIS后,启动网站报错:不能在此路径中使用此配置节……

热门文章

  1. Koa2学习(二)async/await
  2. 定时邮件 已经稳定运行10天+ 从局域网linux到外网邮箱
  3. HDU - 4333 Revolving Digits(拓展kmp+最小循环节)
  4. windows系统下mysql5.5查看和设置数据库编码
  5. 【USACO 2011】 道路和航线
  6. mysql数据恢复失败记录
  7. Linux IO多路复用之epoll网络编程(含源码)
  8. 如何编写linux下nand flash驱动-3
  9. appium学习【五】【转】appium实现屏幕向左滑动
  10. Ruby module里的self