在缺省情况下,ASP.NET页面会在页面上使用ViewState来保持页面和控件往返之间的属性值。在每个页面被处理的时候,ASP. NET引擎会对页面的当前状态和页面上的每个控件进行散列运算,将结果变成字符串,并把这个字符串放在一个隐藏字段里传递给客户端的浏览器。当客户端把这个页面发布回服务器的时候,ASP.NET会在页面的初始化阶段剖析这个隐藏字段,再把页面和控件的值恢复到先前的状态。
开发人员也能够把他们自己的值保存在ViewState里,这些值回被自动的保存。例如,如果想在往返之间保存一个叫做BackColor的值,你可以在ViewState里创建变量,并像下面这样设置其值:
ViewState(“BackColor”) = “Blue”
使用ViewState有几个很大的好处:由于它的使用是自动的,所以不需要配置文件来实现。也就是说在缺省状态下,页面和控件的所有状态都是自动维护的。ViewState还是非常安全的,因为所有的值都自动地经过散列运算、压缩和编码,而且标准的隐藏字段是空白的文本。但是ViewState不是万能药。由于ASP.NET将ViewState保存在页面里,所以如果一个页面带有多个控件或者控件带有大量的值(例如,带有几百个数据列的数据格),那么它们就会让页面的载入和发布变得相当地慢。一般来说,你会考虑因为含有大量只读数据的控件而关闭ViewState。
开发人员可能也想选择将页面专用的信息保存在页面上的一个隐藏字段里,以此来维持页面的状态。当浏览器把这个页面提交给服务器的时候,服务器页面会从HTTP表格集合的隐藏字段里提取出隐藏字段的内容以及其他控件的值。许多ASP的实现会把隐藏字段作为维持客户状态的方式,在把原有的应用程序从ASP迁移到ASP.NET的时候,你可以选择继续使用这种方法。
隐藏字段的实现很简单,而且能够得到所有的浏览器和客户端设备的支持。但是使用隐藏字段有一些很明显的缺点。用户只需要简单地查看页面的源代码就能够看到隐藏字段的值。此外,尽管可以将简单的名称-值对保存进隐藏字段里,你还必须为在一个隐藏字段里保存多个值而创建你自己的存储和剖析机制。例如,你可能要实现字符串定界符和字符串剖析机制,从而在一个字段里保存多个值。就和ViewState一样,隐藏字段里大量的值在显示和发布页面的时候会导致其(显示和发布速度)的下降。