自定义服务器控件开发(3)--视图状态与控件状态
(一)介绍
Web应用程序是无状态的,每次从服务器请求网页时,都会创建一个网页类的新实例,那么在每次往返过程中都将会丢失所有与改页面及其控件关联的信息,为了克服这一固有的局限性,asp.net使用视图状态、控件状态用于保存往返过程中的页面和控件值。其中控件状态为asp.net 2.0特有。
1:视图状态
视图状态是asp.net框架默认的保存往返过程中的页面和控件值的方法,当呈现也的HTML形式时,需要在回发过程中保留的页的当前状态和值被序列化XML,然后使用Base64编码进行编码,并输出到视图状态的隐藏字段中。视图状态可以存储字符串、整数、布尔值、Array对象、ArrayList对象、哈希表等。
视图状态的优点:
1:不需要任何服务器资源。(视图状态被存放在hide字段中发送到客户端)
2:实现简单。(默认已经开启视图状态)
3:增强的安全功能
视图状态的缺点:
1:性能。(视图状态是存放在页面中,如果存储量大,则显示和发送页面的速度会很慢)
2:安全。(呈现到客户端隐藏域很容易被篡改)
2:控件状态
控件状态和视图状态有很多相似之处,例如,二者都可以用于实现状态信息存储和管理,其相关数据都存储在一个或多个隐藏字段中等等。然而,控件状态的最大特点是:控件状态不能被关闭,这一点与视图状态完全不同,同时,该技术特性仅为服务器控件范围使用,不能用于Web页面范围。当页面或者某个控件禁用了视图状态功能时,控件状态仍可照常使用,丝毫不受影响。而此时与视图状态有关的功能则会受到影响,无法工作了。由此可见,控件状态对于提高控件可靠性、灵活性等方面有着重要意义。
控件状态的优点:
1:需要的服务器资源少(存储在隐藏域中)
2:可靠性(不能关闭)
3:灵活性(可编程控制)
而控件状态的主要缺点就是必须编写代码来保存和加载控件状态。
(二) 示例
1:视图状态
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
2:控件状态
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)