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

  • 相关阅读:
    131. Palindrome Partitioning
    130. Surrounded Regions
    129. Sum Root to Leaf Numbers
    128. Longest Consecutive Sequence
    125. Valid Palindrome
    124. Binary Tree Maximum Path Sum
    122. Best Time to Buy and Sell Stock II
    121. Best Time to Buy and Sell Stock
    120. Triangle
    119. Pascal's Triangle II
  • 原文地址:https://www.cnblogs.com/luoyangcn/p/4417698.html
Copyright © 2011-2022 走看看