近几天看了下viewState的知识,碰到几个问题不太了解:
1\资料上说页面提交后服务器处理返回前,每个web控件的填入viewState中,以hidden字段的_ViewState传回client, 但我在页面上防了asp:textbox和asp:button后,提交返回后_ViewState字段里只有原始的默认20个字节左右的信息,没有关于tesxtbox和button的信息, 在这情况下我在codeBehind类里重载了LoadViewState()也不执行, 但页面使用trace=true是发现页面提交后执行了LoadViewState(), 然后修改codeBehind类,给ViewState添加了个字符串或者在SaveViewState()里修改了TextBox.Text时, 我的LoadViewState()就被执行了

解决方案 »

  1.   

    asp:textbox的viewstate是true还是false都一样不起作用,和其他控件的viewstate还不一样,你试试看禁用他的viewstate和启用它生成的viewstate都是一样大小的
      

  2.   

    现在不仅是textbox, 还有label, checkbox啊什么的, 提交后返回时_ViewState字段并没有相关信息啊, 而且trace时 viewstate size = 0
      

  3.   

    你想呀,可能在客户端修改_ViewState的值吗?那也太不安全了呀。你可以这样测试一下:
    1.在文本框里填写内容
    2.提交——这时_ViewState没有变化
    3.返回的页面里面文本框里有你刚写的值
    4.再次提交——这时_ViewState就应该有变化了
      

  4.   

    label, checkbox啊什么的也是一样的设置viewstate没有用的,都让你碰上了,真的,你拿datagrid,repeater这样的控件去试验,就知道viewstate变化有多少了
      

  5.   

    为什么会没有用呢, 不是说只要页面控件配置准确, SaveViewState()时都会绑定吗
    在submit的onclick时修改了lebal的value,label就有viewState了, 为什么
      

  6.   

    viewState不是给客户端代码用的,而是给服务端代码用于访问返回的客户端的页面中的值使用的。
    一般页面在第一次请求时,也就是IsPostBack==false时,是不调用LoadViewState()方法的,页当IsPastBack==true时,则先调用LoadViewState()再调用Page_Load(),最后调用SaveViewState().
      

  7.   

    你用datagrid试试,那个viewstate狂大无比。
    textbox的话你试试填上内容后viewstate有无变化
      

  8.   

    EnableViewState优先级别:
    全局配置 < 程序 < 页< 控件注意:下列服务器控件不能禁止ViewStateTextbox 
    Checkbox
    Checkbox List
    RadioButtonList
    上面控件的状态通过IPostBackEventHandler 和 IPostBackDataHandler接口处理,而不是ViewState的机制,所以EnableViewState没有效果。
      

  9.   

    ViewState 是状态保持 同一页面比如分页排序 的变量都要用到的。
      

  10.   

    在这情况下我在codeBehind类里重载了LoadViewState()也不执行
    ------------------------------------------------------------
    不会这么妖怪吧?如果你没有禁用的话,这个PostBack后必定会执行的,你可以在里面设个断点看看TextBox的值