ASP.NET中的ViewState

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
  • Web页面不需要回传
  • 不需要处理某个控件的事件
  • 控件没有需要动态设定的属性或动态绑定数据的属性


推荐两篇关于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,可以从 这里下载查看


你可能感兴趣的:(asp.net)