关于ViewState的学习

仍然在看“asp.net基础教程——C#版”。在看到第二章的小结的时候看到关于ViewState,有些不明所以,所以就到谷歌上搜索了一些文章。以下是个人整理的关于ViewState的一些内容。

==============================================================

在msdn中关于ViewState的说法:

视图状态是 Web 服务器控件正常工作和呈现自身所需要的状态数据的字典。控件开发人员通常使用 ViewState 属性访问视图状态对象。在 Page 级别禁用视图状态时,视图状态将会受到影响,因此,控件在这些情况下可能无法正确工作。

网上内容整理:

1.ViwState是什么(转自http://www.iwms.net/n1463c12.aspx

ViewState 用来跟踪和保存控件的状态信息。否则这些信息可能会丢失,原因可能是这些值不随着 form 回发,或者根本就不在 page 的 html 中。
ViewState 中保存着代码中改变的控件属性,通过代码绑定到控件的任何数据,以及由用户操作触发,回发的任何更改。
ViewState 还提供了一个状态包(StateBag), 这是一个特殊的集合或字典(collection or dictionary), 可以用来保存,通过一个 key 来恢复任意的对象或者值。

2.ViewState的原理(转自http://www.pin5i.com/showtopic-7209.html

     ViewState是一种机制,ASP.NET 使用这种机制来跟踪服务器控件状态值,否则这些值将不作为 HTTP 窗体的一部分而回传。例如,由 Label 控件显示的文本默认情况下就保存在 ViewState 中。作为开发人员,您可以绑定数据,或在首次加载该页面时仅对 Label 编程设置一次,在后续的回传中,该标签文本将自动从 ViewState 中重新填充。因此,除了可以减少繁琐的工作和代码外,ViewState 通常还可以减少数据库的往返次数。
     ViewState 确实没有什么神秘之处,它是由 ASP.NET 页面框架管理的一个隐藏的窗体字段。当 ASP.NET 执行某个页面时,该页面上的 ViewState 值和所有控件将被收集并格式化成一个编码字符串,然后被分配给隐藏窗体字段的值属性(即 <input type=hidden>)。由于隐藏窗体字段是发送到客户端的页面的一部分,所以 ViewState 值被临时存储在客户端的浏览器中。如果客户端选择将该页面回传给服务器,则 ViewState 字符串也将被回传。回传后,ASP.NET 页面框架将解析 ViewState 字符串,并为该页面和各个控件填充 ViewState 属性。然后,控件再使用 ViewState 数据将自己重新恢复为以前的状态。 

个人的理解:

1.ViewState是一种机制。一种用于保存页面状态和页面中控件值的字段。

2.ViewState先是随着首次加载页面时的信息而来,然后保存了页面中的所有值后,随着页面的回传回传。

3.在回传后,服务器端通过对ViewState中保存的值的处理,然后再次向客户端发送页面。

最后,从书中摘录一段关于ViewState用途的话:

为了使基于控件的编程模型能用于网页上的所有元素,ASP.NET引入了ViewState,作为一种转换控件状态的手段。服务器端事件完善了控件模型。

posted @ 2010-02-27 13:51  Margin22  阅读(184)  评论(0编辑  收藏  举报