大家好,想问大家一个问题:ViewState的基本用法我知道,在分页的时候用过,用来保存本页回传的值,但是对于平时页面自动生成的ViewState很好奇,这里面到底保存了哪些值,如果禁用了会带来什么后果,希望大家能举出实际的例子说明一下,另外结合安全和性能考虑,什么时候用viewstate,什么时候不用,纠结....

解决方案 »

  1.   

    ViewState 使用恰当,它能够简化页面开发,改进用户与站点的交互。如果不理,能够显著增加站点响应大小
    很多情况下保持控件的状态是必需的,压缩的ViewState有助于提高性能
    System.IO.Compression  
    将不影响页面显ViewState持久化保存到服务器端的硬盘上
     
     
      

  2.   

    分页可以考虑一下:
    AJAX分页:
    http://www.cnblogs.com/chenping-987123/archive/2011/02/14/1954640.html
    你可以在你的页面运行以后看看,页面源代码文件中的_hidden这个控件的,value值,是多大就知道,页面的传输量有多大了。
      

  3.   

    ViewState 不是什么?1. ViewState 不是用来恢复回发的控件的值。
    这个是通过匹配 form 中该控件的变量名而自动完成的。这个只对 Load 事件加载之前创建的控件有效。
    2. ViewState 不会自动重新创建任何通过代码动态创建的控件。
    3. 不是用来保存用户信息的。仅仅保存本页的控件状态,而不能在页面之间传递。ViewState 是什么?ViewState 用来跟踪和保存控件的状态信息。否则这些信息可能会丢失,原因可能是这些值不随着 form 回发,或者根本就不在 page 的 html 中。
    ViewState 中保存着代码中改变的控件属性,通过代码绑定到控件的任何数据,以及由用户操作触发,回发的任何更改。
    ViewState 还提供了一个状态包(StateBag), 这是一个特殊的集合或字典(collection or dictionary), 可以用来保存,通过一个 key 来恢复任意的对象或者值。ViewState 的格式保存在表单中的 __VIEWSTATE 隐藏字段。是 Base64 编码过的,而不是加密!
    但要加密也是可以的(设置 enableViewStateMac 来使用 machine key 进行 hash)
    加密:设置 machineKey 验证, 但这必须在机器级别设置,需要更多的资源,所以不推荐。