viewstate不是可以用来保存状态的吗?启用控件的EnableViewState=true,那么该控件的值就不会因为刷新页面而丢失,是这样嘛?
如果是这样,那也就是说如果我不启用viewstate,设置控件的enableViewState = false,那刷新页面的时候这个控件值应该会丢失呀。
可是我不管启不启用控件的viewstate,刷新页面后的结果都是一样,控件值仍旧存在。我实验时就放置了一个textbox和一个button.button的click事件没有具体内容。
然后当我运行这个页面的时候,在textbox里输入了123,单击按钮。不管我是否启用了viewstate,textbox中的值仍旧存在。感觉是我对viewstate理解有误,请大家指正。

解决方案 »

  1.   

    奇怪了,我在08下设置EnableViewState=false不起作用
      

  2.   

    不管你设为True还是False, aspx页面Render成html页面时都有一个隐藏域, 我觉得是不是和这个有关系啊?
    关注中!
      

  3.   


    你将textbox的自动回传功能开启,也就是设置为True,在试一试,也许会有不一样的结果
      

  4.   


    无法设置postback开启或关闭呀,没有这个选项。只有一个postbackUrl属性
      

  5.   

    TextBox的Text属性值不存放在视图状态里
      

  6.   

    我简单描述一下:当没有ViewState的时候,客户端post到服务器端时也是提交所有html标签的value属性值的,而这个值就被TextBox设置为Text属性。然后,当页面此次回发处理结束,TextBox输出为<input type="text" value="....." />的时候,这个value就又是你刚刚提交来的新值。然后你再次从客户端修改value并提交.....可见这个过程中从TextBox得到提交的Text值根本不需要ViewState。那么ViewState有什么作用呢?当页面回发处理时,首先向TextBox恢复Text属性的ViewState值,然后才向Text属性写入提交的值。这个ViewState就是上一次页面输出时Text的“前一个”值,而不是本次由客户端提交的新值。这样,Text比较这两个值,如果不同则会触发TextChanged事件。(这个过程实际上是所有webControl都有的功能接口 IPostbackDataHnadler 定义的,TextBox 从它继承来了这个功能的)TextBox只有Text属性是这样的。也就是说,当asp.net调用TextBox的 IPostbackDataHandler 接口的方法来处理客户端提交的value的时候,TextBox只会将value写到Text属性并判断是否需要过一会(Page_Load阶段处理结束之后)触发TextChanged事件,而并不会去影响TextBox的其它各种属性。
      

  7.   

    让我们再次用TextBox的ForeColor属性和Text属性做一个对比:当页面处理结束输出到客户端时(输出的形式类似于<input type="text" style="color:red" value="" />),ViewState中保存着ForeColor的值,然后当你在客户端修改了TextBox的值,并且提交页面时,浏览器也是只是会提交html标签的value属性值,而并不会提交其它值(就算你使用javascript来改变颜色样式也不会直接提交给后台服务器)。于是,对于TextBox的ForeColor属性,就只有“恢复ViewState”这一个动作,也就是恢复了上一次页面输出时后台设置的ForeColor值。而对Text属性则不然。当页面处理结束输出到客户端时要输出当前的Text属性值到html标签<input type=text>的value属性上。但是当客户端提交到服务器端之时,在“恢复ViewState”给Text属性之后还又将提交的新值(如果与当前Text值不同则)重新覆盖到Text上并且准备触发随后的事件,第一遍处理是由执行ViewState恢复的机制完成的,第二遍处理是由执行IPostbackDataHandler既处理客户端提交值的机制做的。
      

  8.   

    可以模拟一下如果你关闭ViewState,回发时ForeColor自然得不到上一次输出时的值了,但是Text其实在第一个设置阶段也无法正确得到上一次输出页面时的Text值,于是此时TextChanged就会在客户端提交的值不是string.Empty的时候就会触发。