大家来看我对ViewState的理解对不啊?我搞不清楚啊,请大家多多指教
1. 客户端向一个含有 <form runat="server">的页面发出一个GET请求,服务器端接收到该请求,会向
客户端返回一个 <input type='hidden' name="__VIEWSTATE />的隐藏域,由于此时是第一次请求,
所以这个ViewState为空。
2.用户填写好了表单并单击提交后(第一次post),服务器端会同时接收到提交上来的表单数据和ViewState
,但是此时ViewState也是空的。
3.服务器端接着会以我们编的代码逻辑去处理提交上来的表单数据,经过处理后的页面HTML又会发送给客户
端,但在把页面HTML发送给客户端之前,会先把处理后的数据保存在ViewState当中,然后这个ViewState
会随着HTML一起被发往客户端,此时ViewState中就有数据了,
4.客户端又接收到服务器发回的HTML和ViewState后,就会把页面展示到我们面前
5.加入我们此时又修改了表单的数据,那么又会产生一次回发(第二次post),那么服务器端会接收到回发
的表单数据和ViewState,不过这时的ViewState已经有值了
6.但是这时的表单数据和ViewState数据是有区别的。表单数据是最新的数据,反映了客户端最新填入的
信息,但是ViewState还是用户修改表单之前的那些旧数据。
7.那么,在服务器端怎么去恢复控件的状态呢?比如恢复TextBox的 Text 属性,我们是用表单数据去恢复,
还是利用ViewState去恢复了?如果利用ViewState去恢复,那恢复到的数据不是旧数据吗?
8.那么我的理解是:ViewState去恢复某些客户端不可编辑的属性,比如控件颜色,大小等;而表单数据去
恢复某些诸如Text这些客户端可修改的属性。
9.那么,假如我在服务器端有行代码TextBox1.Text,此时的这个Text应该是从表单数据那儿获取的吧?
Textbox1.Width应该是从ViewState获取的吧?
ViewState其实是为了让客户端与服务器端的数据交互,只要是XML2.0以上的都可以识别 asp.net的ViewState
<input type='hidden' 或datagrid这样的需要submit,ViewState,它是需要调用客户端的_doPost来回调
客户的ViewState存储着执行回调与服务器端交互的数据.
你就把ViewState当做一个存储的容器就好咯,每次请求服务器其实先要查看你ViewState里的数据
viewstate针对一个页面;session、cookie针对整个系统