updated on 2007/07/19
什么是ViewState,它起到了什么作用呢?简单的讲,ViewState维持了Web Page的UI状态。
在ASP.NET诞生之前,要保持住同一个web页面回传后(假设不跳转到其它页面)里面各个html元素的值,需要程序员自己显示得做一些工作,将各个html元素的值显示得赋值。而ASP.NET却能自动得做这些繁杂的工作。这些都要归功于ViewState,那么ViewState具体是怎么工作的呢?
其实也没什么,仔细研究一下就会发现,原来ASP.NET自己管理着一个隐藏html元素: <input type="hidden" name="__VIEWSTATE">。当执行一个asp.net页面时,这个页面的ViewState值以及所有控件的ViewState值将被编码成一个String串赋值给上述的隐藏元素,作为html的一部分发给客户端浏览器。当客户端提交页面后,这个ViewState串(有可能会在客户端改变)又会重新传回,在服务器端,ASP.NET分析处理这个ViewState串,以重新取代各个控件的值,从而会“智能”得将客户端的操作元素值“记”下来。
当然ASP.NET也给我们工程师留出来一个接口来改变某个控件的ViewState值,或根据需要自己可以存入一个ViewState,例如:
ViewState["SortField"] = value;
ViewState和Session的区别是:
Session State | ViewState | |
---|---|---|
是否占用Server资源 | 是 | 否 |
是否超时 | 是 – 默认20分钟 | 否 |
是否存储所有的.NET类型 | 是 | 否,只限于: strings, integers, Booleans, arrays, ArrayList, hashtable, custom TypeConverters |
是否增加html的传输量 | 否 | 是 |
在以下几种情况中可以不使用ViewState:
Web Pages | Controls |
---|---|
|
|
推荐两篇关于ViewState的技术文章:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspnet/html/asp11222001.asp
http://msdn.microsoft.com/msdnmag/issues/03/02/CuttingEdge/
和著名博客
http://weblogs.asp.net/infinitiesloop/archive/2006/08/03/Truly-Understanding-Viewstate.aspx
另外本人做了一个关于asp.net状态管理机制的ppt,可以从这里下载查看
![](/images/cnblogs_com/happyhzs2000/qsygsl.jpg)