注册 登录
编程论坛 ASP.NET技术论坛

[求助] 关于asp.net viewstate的问题,谢谢了

shupingda 发布于 2007-06-14 14:26, 714 次点击
问题1:如果启用了控件的viewstate 属性,那当客户在请求一个aspx页面时,该页面上的 ViewState 值和所有控件将被收集并格式化成一个编码字符串,然后被分配给隐藏窗体字段的值属性(即 <input type=hidden>)中,由于隐藏窗体字段是发送到客户端的页面的一部分,所以 ViewState 值被临时存储在客户端的浏览器中。如果客户端选择将该页面回传给服务器,则 ViewState 字符串也将被回传。回传后,ASP.NET 页面框架将解析 ViewState 字符串,并为该页面和各个控件填充 ViewState 属性。然后,控件再使用 ViewState 数据将自己重新恢复为以前的状态。


现在我假设,开始页面中有一个textbox控件,其text值初始为空,
请问:此时viewstate中到底存了什么呢,是textbox控件的ID和其值吗

当客户在textbox中填如"hello,china"后再回传,此时viewstate又寸了什么呢,是textboxID和"hello,china吗

最好讲的详细点,

我实在搞不懂viewstate怎么用,哪个高手会啊,可以教我一下啊,
肯教我的留下QQ,让我在这个小虾米向您学几照吧,谢谢谢谢
1 回复
#2
铲铲2007-06-17 01:05

第一次,初始值为空,
那么TextBox的内容是空的,ViewState中存储的值也是空的。

假设输入了内容hello,china,当你提交的方式返回服务器(不是刷新哦)时,
ASP.NET通过比对ViewState中(空字符串)和你在TextBox中输入(hello,china)的不同,来比对决定引发TextChanged事件。(如果你注册了事件方法,则执行)。

在发送页面的时候,ASP.NET将你新内容(hello,china)存储到ViewState中,并且TextBox的初始值设置为你所输入的内容(hello,china),然后发送到客户端。

再下一次,还是重复上述过程。

ViewState只是页面级别的状态保持技术,不可能代替Cookie、Session等会话级别的状态保持技术。他们的范畴不一样。

如果你是很常规的开发应用,完全不用考虑ViewState,ASP.NET帮助你维护它。除非你考虑性能问题的话,可以在“不需要提交返回”的页面上禁用ViewState来减小页面尺寸。想要知道它的原理和细节,可以到微软的MSDN上去看看。我手上也没有详尽的资料来解释它们。

1