为什么输入不同的内容,得到的页面viewstate一样呢?
admin 发表于 2010-04-21 | 来源:互联网 | 阅读:

web页中,只有一个textbox和一个button。无后台代码。

在textbox中输入不同内容后,单击button。

请问为什么在textbox中输入不同内容时得到的viewstate是一样的呢?

已经有38 个评论
  1. wuwei04 说:

    ViewState在客户端的保存形式,保存在一个ID为__VIEWSTATE的Hidden中,它的Value是使用Base64编码后的字符串。这个字符串实际上是一个对象序列化之后的结果。这个对象保存了整个页面的控件树的ViewState。可以使用一些工具将这个字符串进行解码查看其内容,比如ViewStateDecoder,ViewStateAnalyzer。   Page对客户端请求进行处理,在处理的过程中先是将客户端提交的_VIEWSTATE反序列化为对象,调用Control的相关方法给所有的控件装载数据,这些数据是上次请求结束后控件的状态数据。在请求结束之前调用Control的相关方法得到所有控件的被修改过的状态数据,之后Page将其进行序列化,并返回给客户端。在Control中又具体调用StateBag类的方法完成状态数据的加载和保存。   页面情况不同 __VIEWSTATE就不同

  2. xydrj 说:

    你再多跟踪一次。

  3. xjhuc05 说:

    继续点击按钮一次。

  4. jc2008_828 说:

    参考ViewState文章:http://www.cnblogs.com/psunny/archive/2010/03/11/1683864.html

  5. 421056 说:

    是的,我跟踪了多次分别“不输入任何内容”、输入“111”、输入“222”、输入“333”、输入“444”、输入“555”。分别单击按钮后查看源文件得到的viewstate值是一样的

  6. lee 说:

    to littleqiang520你提供的资料我有点看不懂你能直接帮我解答一下我这里的问题吗?

  7. WOOMYWOODY 说:

    简单的说 就是 textbox 使用的不是 ViewState 的机制textbox 实现了 IPostBackDataHandler 接口

  8. 天天累 说:

    貌似textbox就算关闭了其viewstate功能,也是能保存状态的

  9. forestyaser 说:

    难道textbox没有viewstate吗?不用它来保存状态吗?

  10. xwcylm 说:

    我就是不用textbox,换其他的web控件,得到的viewstate也是一样的,为什么??例如:我换成web页中,只有一个dropdownlist和一个button。无后台代码。在dropdownlist中选择选项1后,单击button,得到viewstate1在dropdownlist中选择选项2后,单击button,得到viewstate2结果viewstate1和viewstate2也是一样的??为什么呢?

  11. liangjiaqi 说:

    你是用的 服务器控件吗?标准的HTML标签 是没有VIEWSTATE的.如果你还能看到VIEWSTATE,那是因为ASPX页面用于保存其它一些值的.

  12. wtaxum 说:

    用的是服务器控件

  13. waterskin 说:

    使用 Label 就会发现不同了

  14. TheAlien 说:

    来看一下TextBox什么时候要保存ViewStateC# code
    private bool SaveTextViewState
    {
    get
    {
    if (this.TextMode == TextBoxMode.Password)
    {
    return false;
    }
    if (((base.Events[EventTextChanged] == null) && base.IsEnabled) && ((this.Visible && !this.ReadOnly) && (base.GetType() == typeof(TextBox))))
    {
    return false;
    }
    return true;
    }
    }
    也就是说,TextBox实在是太简单了(而且浏览器经常重复提交Text属性值)。如果你需要处理TextChanged事件,或者需要设置ReadOnly,等等真正去使用TextBox而不是简单地仅仅当作个保存Text属性的摆设,它就使用ViewState了。

  15. 96789123 说:

    如果只做简单输入时textbox不使用viewstate的话那为什么在textbox中输入内容,单击button进行回传后,输入的内容还能保持在textbox中呢

  16. TheAlien 说:

    其它的也是同理!你的测试也太简单了,什么真正的交互应用程序所需要的工作都不做(例如你至少可以在点击按钮时把DropdownList的样式中的heigth扩大10个像素啊?!),你就简单拖个控件了事,人家asp.net遇到你这种什么都不做的用户当然不管你什么状态啦。

  17. WOOMYWOODY 说:

    我的确做了一个小例子,有编写后台程序的,所得的viewstate是不同。我只是感觉很奇怪:我不写后台程序,只是输入内容,为什么在单击button回传后,能保留用户输入的内容。客户端不做存储工作,那就应该是服务器做了,自然就想到viewstate了。但是一试发现服务器似乎也没管那到底是谁存储了用户输入的内容呢?

  18. look 说:

    自己顶一下

  19. 萌芽邪恶 说:

    textbox的内容通过表单提交到服务器,所以viewstate不保存。

  20. 天天累 说:

    谢谢littlecc2009,让我更理解了不过还想问viewstate到底什么时候会保存textbox或其他控件的状态信息呢

  21. nashliu 说:

    谢谢littlecc2009,让我更理解了不过还想问viewstate到底什么时候会保存textbox或其他控件的状态信息呢一般输入控件都不需要viewstate保存数据的吧,其他例如lable之类的就需要viewstate保存,因为http是无状态的,所以服务器每次都重造页面对象,因此需要把控件状态序列化之后作为表单一部分提交,然后在服务器中再反序列化其中信息并用它更新重造的控件对象的数据。我菜鸟哦。。希望其他高手指证。。

  22. WOOMYWOODY 说:

    谢谢littlecc2009,让我更理解了不过还想问viewstate到底什么时候会保存textbox或其他控件的状态信息呢一般输入控件都不需要viewstate保存数据的吧,其他例如lable之类的就需要viewstate保存,因为http是无状态的,所以服务器每次都重造页面对象,因此需要把控件状态序列化之后作为表单一部分提交,然后在服……”因此需要把控件状态序列化之后作为表单一部分提交“——》需要把状态信息序列化之后放在表单回送给客户端

  23. lchz 说:

    是不是表单之类的服务器控件就不用viewstate保存状态呢,而是通过post方式传递数据呢?

  24. mikeyao210 说:

    是不是表单之类的服务器控件就不用viewstate保存状态呢,而是通过post方式传递数据呢?表单指的是html页面中的<form></from>,应该说输入控件通常不需要viewstate保存数据,例如textbox,dropdownlist等等

  25. look 说:

    markup

  26. hahamy 说:

    我觉得viewstate应该保留客户端对页面操作后的页面状态,为什么输入控件就不用viewstate保存呢?又想不通了。

  27. kook 说:

    我觉得viewstate应该保留客户端对页面操作后的页面状态,为什么输入控件就不用viewstate保存呢?又想不通了。因为输入控件的内容经常变化。。

  28. 徐咏波 说:

    理解了,谢谢

  29. xwcylm 说:

    Web应用程序的无状态,一个客户端的请求,在其请求完成后,服务器端都会删除这个请求的相关信息。有时我们需要Web请求完成后,还要继续保持信息。  对这个需求,session、application、cookie就可以了为什么要需要viewstate呢

  30. geqian5 说:

    Web应用程序的无状态,一个客户端的请求,在其请求完成后,服务器端都会删除这个请求的相关信息。有时我们需要Web请求完成后,还要继续保持信息。 对这个需求,session、application、cookie就可以了为什么要需要viewstate呢对的,session之类的也可以。它们都可以保存信息,但是各有各优缺点。cookie保存信息在客户端,session是服务器变量,占用服务器内存,浏览器关闭消失,viewstate是客户端变量,范围只是用于当前页面。因此用那个看你的需要了。。

  31. xwcylm 说:

    跨页之间需要保留状态我能理解那哪些情况需要在同一页面内应用也保留状态呢?

  32. jc2008_828 说:

    跨页之间需要保留状态我能理解那哪些情况需要在同一页面内应用也保留状态呢?你指的是用viewstate?

  33. 96789123 说:

    对跨页之间需要保留状态我能理解那哪些情况需要在同一页面内应用也保留状态呢?用viewstate

  34. cxjasx 说:

    对跨页之间需要保留状态我能理解那哪些情况需要在同一页面内应用也保留状态呢?用viewstate额。。看来你还没了解viewstate哦。。呵呵。。viewstate就是用与同一页面保存状态的。。因为每次把表单回发给服务器,页面对象都是重造的(因为http无状态),也就是说每个客户端回发给服务器服务器都是造出相同的页面对象,因此每个特定客户端的回发的对象的状态信息就会消失了。因此我们要用viewstate,服务器每次针对特定的客户端操作修改其提交表单的数据时,要把修改后的状态保存在表单的一个viewstate中,然后再发给客户端。这样下次客户端再提交表单都服务器,服务器就可以从那个viewstate获取上次的状态信息,从而更新页面对象(前面说过更新前的页面对象对每个客户端都是相同的嘛),这就是viewstate的用途了。。

  35. 96789123 说:

    也就是说viewstate只保留服务器端对特定客户端所做过处理的结果吗?而不保留特定客户端自己所做的操作结果?

  36. 405290688 说:

    也就是说viewstate只保留服务器端对特定客户端所做过处理的结果吗?而不保留特定客户端自己所做的操作结果?其实大多数操作都是回发到服务器在服务器进行的,例如各种服务端事件的处理。当然那些在客户端执行而不在服务器执行的操作例如javascript的,那就当然不会用viewstate保存了。。

  37. nrc001 说:

    终于明白了!!太感谢了!

  38. liangjiaqi 说:

    终于明白了!!太感谢了!不用谢~~

我要评论

评论功能因故关闭!

请加入我们的QQ群一起参与讨论:群号59400482(500人超级群)


返回首页 | 关于我们 | 联系我们 | 广告合作 | 网站地图 | 友情链接 | 版权声明