
ASP.NET2.0的控件状态和视图状态探讨
发布时间:2006-06-08 18:46:34 来源:博客园 网友评论 0 条
基本概念
控件状态-为了让控件正常工作,有时需要存储控件状态数据。例如,如果编写了一个自定义控件,其中具有显示不同信息的不同选项卡,为使该控件如预期一样工作,控件需要知道在往返过程中选择的是哪个选项卡。ViewState 属性可用于此目的,但开发人员可能在页级别关闭了视图状态,从而有效地中断控件。为解决此问题,ASP.NET 页框架在 ASP.NET 2.0 版中公开了一种称为控件状态的新功能。
ControlState 属性允许保持特定于控件的属性信息,不像 ViewState 属性一样可以关闭。若要使用控件状态,控件必须在初始化过程中调用 RegisterRequiresControlState 方法,然后重写 SaveControlState 和 LoadControlState 方法。
视图状态-视图状态是 ASP.NET 页框架默认情况下用于保存往返过程之间的页和控件值的方法。当呈现页的 HTML 形式时,需要在回发过程中保留的页的当前状态和值将被序列化为 Base64 编码的字符串,并输出到视图状态的隐藏字段中。通过实现自定义的 PageStatePersister 类以存储页数据,您可以更改默认行为并将视图状态存储到另一个位置(如 SQL Server 数据库)。有关将页状态存储到流上而不是隐藏的页字段中的示例,请参见 视图状态持久性机制的示例。
您可以通过使用页的 ViewState 属性将往返过程中的数据保存到 Web 服务器来利用自己的代码访问视图状态。ViewState 属性是一个包含密钥/值对(其中包含视图状态数据)的字典。
各自的优势与劣势
视图状态
使用视图状态的优点:
·不需要任何服务器资源 视图状态包含在页代码内的结构中。
·实现简单 视图状态无需使用任何自定义编程。默认情况下对控件启用状态数据的维护。
·增强的安全功能 视图状态中的值经过哈希计算和压缩,并且针对 Unicode 实现进行编码,其安全性要高于使用隐藏域。
使用视图状态的缺点
·性能注意事项 由于视图状态存储在页本身,因此如果存储较大的值,用户显示页和发送页时的速度可能会减慢。尤其是对移动设备,其带宽通常是有限的。
·设备限制 移动设备可能没有足够的内存容量来存储大量的视图状态数据。
·潜在的安全风险 视图状态存储在页上的一个或多个隐藏域中。虽然视图状态以哈希格式存储数据,但它可以被篡改。如果直接查看页输出源,可以看到隐藏域中的信息,这导致潜在的安全性问题。
控件状态
使用控件状态的优点:
·不需要任何服务器资源 默认情况下,控件状态存储在页上的隐藏域中。
·可靠性 因为控件状态不像视图状态那样可以关闭,控件状态是管理控件的状态的更可靠方法。
·通用性 可以编写自定义适配器来控制如何存储控件状态数据和控件状态数据的存储位置。
使用控件状态的缺点:
·需要一些编程 虽然 ASP.NET 页框架为控件状态提供了基础,但是控件状态是一个自定义的状态保持机制。为了充分利用控件状态,您必须编写代码来保存和加载控件状态。
控件状态-为了让控件正常工作,有时需要存储控件状态数据。例如,如果编写了一个自定义控件,其中具有显示不同信息的不同选项卡,为使该控件如预期一样工作,控件需要知道在往返过程中选择的是哪个选项卡。ViewState 属性可用于此目的,但开发人员可能在页级别关闭了视图状态,从而有效地中断控件。为解决此问题,ASP.NET 页框架在 ASP.NET 2.0 版中公开了一种称为控件状态的新功能。
ControlState 属性允许保持特定于控件的属性信息,不像 ViewState 属性一样可以关闭。若要使用控件状态,控件必须在初始化过程中调用 RegisterRequiresControlState 方法,然后重写 SaveControlState 和 LoadControlState 方法。
视图状态-视图状态是 ASP.NET 页框架默认情况下用于保存往返过程之间的页和控件值的方法。当呈现页的 HTML 形式时,需要在回发过程中保留的页的当前状态和值将被序列化为 Base64 编码的字符串,并输出到视图状态的隐藏字段中。通过实现自定义的 PageStatePersister 类以存储页数据,您可以更改默认行为并将视图状态存储到另一个位置(如 SQL Server 数据库)。有关将页状态存储到流上而不是隐藏的页字段中的示例,请参见 视图状态持久性机制的示例。
您可以通过使用页的 ViewState 属性将往返过程中的数据保存到 Web 服务器来利用自己的代码访问视图状态。ViewState 属性是一个包含密钥/值对(其中包含视图状态数据)的字典。
各自的优势与劣势
视图状态
使用视图状态的优点:
·不需要任何服务器资源 视图状态包含在页代码内的结构中。
·实现简单 视图状态无需使用任何自定义编程。默认情况下对控件启用状态数据的维护。
·增强的安全功能 视图状态中的值经过哈希计算和压缩,并且针对 Unicode 实现进行编码,其安全性要高于使用隐藏域。
使用视图状态的缺点
·性能注意事项 由于视图状态存储在页本身,因此如果存储较大的值,用户显示页和发送页时的速度可能会减慢。尤其是对移动设备,其带宽通常是有限的。
·设备限制 移动设备可能没有足够的内存容量来存储大量的视图状态数据。
·潜在的安全风险 视图状态存储在页上的一个或多个隐藏域中。虽然视图状态以哈希格式存储数据,但它可以被篡改。如果直接查看页输出源,可以看到隐藏域中的信息,这导致潜在的安全性问题。
控件状态
使用控件状态的优点:
·不需要任何服务器资源 默认情况下,控件状态存储在页上的隐藏域中。
·可靠性 因为控件状态不像视图状态那样可以关闭,控件状态是管理控件的状态的更可靠方法。
·通用性 可以编写自定义适配器来控制如何存储控件状态数据和控件状态数据的存储位置。
使用控件状态的缺点:
·需要一些编程 虽然 ASP.NET 页框架为控件状态提供了基础,但是控件状态是一个自定义的状态保持机制。为了充分利用控件状态,您必须编写代码来保存和加载控件状态。
推荐阅讯
- ASP.NET+Atlas创建客户端Web应用程序
- 当ASP.NET撞上JSF之框架比较
- 让ASP.NET简便使用SCRIPT
- ASP.NET 2.0客户端回调的实现分析
- 如何充分利用ASP.NET 2.0预编译
- 揭开ASP.NET中Cookie编程的奥秘
- ASP.NET 配置文件层次结构和继承
- ASP.NET 2.0中的Web和HTML服务器控件
- 10天学会ASP.net之第七天
- 关于.NET动态代理的介绍和应用简介
阅读排行
- 1.用ASP.NET 2.0设计网络在线投票系统
- 2.在ASP.Net 2.0中实现多语言界面的方法
- 3.轻松加密ASP.NET 2.0 Web程序配置信息
- 4.在ASP.NET中使用AJAX的简单方法
- 5..NET 2.0中的企业库异常处理块简述
- 6.面向.NET开发人员的Ajax 技术平台策略
- 7.揭开ASP.NET中Cookie编程的奥秘
- 8.ASP.NET2.0服务器控件之创建自定义控件
- 9.ASP.NET2.0中Gridview中数据操作技巧
- 10.ASP.NET 2.0发送电子邮件全面剖析之二
专题教程
- 大话G游 专题:手机病毒揭密
- ARP攻击防范与解决方案 路由故障处理手册
- Picasa中文版_Picasa教程 专题:清除流氓软件
- Firefox专题 seo搜索引擎优化专区
- 重装Windows必知的事情 装机之必备软件大行动
病毒专杀栏
