zoukankan      html  css  js  c++  java
  • .NET 之ViewState的本质

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

  • 相关阅读:
    敌兵布阵(线段树单点更新+区间查询)
    小明上学(CCF认证2018-12-1 )
    There Are Two Types Of Burgers (Educational Codeforces Round 71)
    Bad Prices ( Codeforces Round #582 )
    Redis热点key优化
    Redis big key处理
    Redis的安全问题
    Redis的flushall/flushdb误操作
    Redis在linux系统中的优化
    Redis之缓存设计
  • 原文地址:https://www.cnblogs.com/luoyangcn/p/4417698.html
Copyright © 2011-2022 走看看