在ASP.NET的回发中,会将TextBox的旧值回发到服务器吗?
譬如,我一个文本框有一个textchange事件,它的初始值是aaaa,我重新输入值为bbbb,引发textchange回发时,我通过HTTP WATCH看到回发的是bbbb,我想问的是在这里aaaa不用回发到服务器吗?那它怎么比较textbox的值是否发生变化从而引发textchange事件呢?难道是在客户端判断是否发生变化从而决定是否回发事件?总之,我想问的是
1、textchange事件是在客户端判断是否发生变化引起回发?还是回发到服务器端再判断是否引发textchange事件?
2、旧值应该是通过viewstate传回到服务器端吧?那新值是怎么传回去的呢?新值组成一个字符串textbox1=bbbb&textbox2=ccc来返回给服务器的吗?

解决方案 »

  1.   

    ViewState保存了整个页面的控件树的ViewState
    Page对客户端请求进行处理,在处理的过程中先是将客户端提交的_VIEWSTATE反序列化为对象
      

  2.   

    是先回发 在 在引发textchange事件的。如果你想用 textbox的ontextchange事件,必须把textbox的autopostback设为true 这就是发生变化后自动回发。
    你看下生成的html代码 都是在生成的隐藏的hidden里面 放着。
    单击按钮后 但是读取当前表单的内容。发送给服务器端
      

  3.   

    你好,我想问下,当前的TEXTBOX是怎么传到服务器呢?通过序列成VIEWSTATE传回去吗?
      

  4.   

    1、textchange事件是在客户端判断是否发生变化引起回发?还是回发到服务器端再判断是否引发textchange事件?
    不是,textchange事件的触发是发生在此文本框失去焦点的时候,而且你的AutoPostback属性要是true。2、旧值应该是通过viewstate传回到服务器端吧?那新值是怎么传回去的呢?新值组成一个字符串textbox1=bbbb&textbox2=ccc来返回给服务器的吗?
    因为是失去焦点的时候触发该事件,那么我想你就比较好理解了吧,包括新值的回传,这些都简单了
      

  5.   

    1、textchange事件是在客户端判断是否发生变化引起回发?还是回发到服务器端再判断是否引发textchange事件?服务器判断的2、旧值应该是通过viewstate传回到服务器端吧?那新值是怎么传回去的呢?新值组成一个字符串textbox1=bbbb&textbox2=ccc来返回给服务器的吗?旧值在页面生成的时候, 记录了 textbox 的状态(关心的状态,包括 text), 在页面级别合并所有开启 viewstate 的状态, 作为一个隐藏的 html 标签, 生成到了最终页面中.当回发时, 那个隐藏的回发服务器, 新值是作为 html form 提交(post) 过去的,这样新旧值都有了, 剩下的就是 asp.net 的 viewstate 恢复机制了;
    恢复完比较, 如果有改变才激发 chagned 事件.整个的过程可以开启页面  trace 来观察, 这个功能对学习和调试很有帮助.
      

  6.   

    服务器不会保存你上一次请求的值。能保存是因为.NET有ViewState(视图)机制
    建议你看一下MSDN的帮助文档 了解下自定义控件。比如回发要继承什么接口,要重写什么方法
      

  7.   

    嘿嘿,谢谢,我正在在看自定义控件,有疑惑才问的,嘿嘿,谢谢各位了啊~~~特别 是Dobzhansky,讲得很仔细,谢谢另外,我比较疑惑的是,在文本框,如果我点一下它,使它获取焦点,然后再点其他的,让它失去焦点,其中我没有改变文本框的内容,从页面看,好像没有刷新呀(我设置了autopostback为true)的,按照上边引用所说,应该失去焦点就会触发事件,然后去服务器判断有无更改后,再决定是否运行textchange事件吧?可是为什么没有页面刷新呢?难道是AJAX?(那为什么有更新时又页面刷新了的呢?)请各位前行在同一条路上的朋友们多多指教一下我哈,谢谢了