庖丁解牛Asp.net3.5控件和组件开发技术系列—页面状态机制(四)
和控件状态的总结
前面讲了页面状态的各个方面,从概念到代码演示再到性能。本节做个总结,重新理一下页面状态内容,说明视图状态和控件状态的优缺点和使用场景。 1.视图状态 视图状态是ASP.NET页框架用于保存服务器与客户端往返过程之间的页面和控件值的方法。当呈现页的HTML形式时,需要在回发过程中保留的页的当前状态和值将被序列化为Base64编码的字符串,并输出到视图状态的隐藏字段中,即页面中HTML源代码中的__VIEWSTATE隐藏字段,可以存储:字符串、整数、布尔值、Array对象、ArrayList对象、哈希表等数据类型。 视图状态有如下优点: (1)节省服务端资源。由于视图状态是存放到隐藏字段(在HTML代码结构中)传送到客户端的,因此不占用服务端资源。 (2)使用方便。默认已经开启视图状态。有些场合,如果控件没有注册服务端事件或者控件没有动态属情况可以将视图状态关闭,节省网络流量,提高页面呈现速度。 (3)视图状态通过散列码校检机制和使用3DES等加密机制来保证数据安全。 (4)自定义存储位置。在Load和Save方法中可以自定义其存储位置。 视图状态有如下缺点: (1)由于其存储到页面HTML代码结构中,因此传输数据量大时,会严重影响性能。可以用视图状态分块机制,将数据分块存储,设置MaxPageStateFieldLength属性。 (2)如果视图状态被禁用,则无法保存页面状态。 (3)虽然已经通过加密,但由于其是呈现到客户端隐藏字段区域,因此容易被篡改。 2.控件状态 有时,为了让控件正常工作,需要按顺序存储控件状态数据。例如,如果编写了一个自定义控件,其中使用了不同的选项卡来显示不同的信息,如 TabTrip,FormView等控件,为了让自定义控件按预期的方式工作,该控件需要知道在往返行程之间选择了哪个选项卡。可以使用 ViewState属性来达到这一目的,然而,开发人员可以在页级别关闭视图状态,从而使控件无法正常工作。 为了解决此问题,ASP.NET 2.0增加了一项新的存储功能:控件状态。ControlState属性允许您保持特定于某个控件的属性信息,且不能像ViewState属性那样被关闭。简单地说,当禁用视图状态时,ControlState能够完成ViewState不能够完成的任务。 控件状态有如下优点: (1)节省服务端资源。跟视图状态一样,控件状态存储在隐藏字段中,也不占用服务器资源。 (2)比视图状态更可靠。控件状态功能推出的一个重大原因就是,当视图状态被禁用时,它依然可以有效。 (3)自定义存储位置。在Load和Save方法中可以自定义其存储位置。 控件状态有如下缺点: (1)由于其存储到页面HTML代码结构中,因此传输数据量大时,会严重影响性能。 (2)视图状态可以用System.Web.UI.StateBag类型的ViewState来存储,也可以自定义编程。控件状态只能自定义编程。 6.11 本章总结 客户端提交的两次连续的页面请求,其数据可能存在差异。ASP.NET是采用视图机制解决两次页面请求之间的关联性问题的。本章在讲解页面状态存储原理后,对视图状态机制作了详细的介绍,包括基本ViewState工作原理、自定义视图状态的应用、控件状态机制及应用方案、视图状态和控件的关系、对页面状态进行加密以及页面状态的清理机制、动态增加控件使用视图时的注意事项、对页面状态的保存和装载应用高效率的类型转换器,并且讨论了页面状态的性能优化策略,对视图状态和控件状态的优缺点做了比较,分析了它们的及适用场景。在开发过程中,如果能够理解页面状态工作原理,则开发起来就会非常容易。 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |