ASP.NET Lab

The Best Web, The Best Future

博客园 首页 新随笔 订阅 管理

ASP.NET 2.0 保留了 ASP.NET 1.1 中的大部分功能,包括使用视图状态来自动保持页面的状态,以及会话和应用程序状态的数据库支持。另外,ASP.NET 2.0 还增加了两个新的特征:视图状态块和控件状态。

控件状态

有时候你需要为了控件的正常工作而保存控件的状态数据。例如,如果你编写了一个使用不同的制表页来显示不同信息的自定义控件,要让控件按照预期的流程而工作,控件需要在回传的过程之间知道哪一个制表页才是被选中的。ViewState 属性能够用于这个目的,但是视图状态能够在页面级别被开发者关闭,从而影响控件的运行。要解决这个问题,ASP.NET 页面框架在 ASP.NET 2.0 中暴露了一个新的特征,被称为控件状态。

ControlState 属性允许你保持特定控件的属性信息,并且不像 ViewState 属性一样能够被关闭。要使用控件状态,控件必须在初始化期间调用 RegisterRequiresControlState 方法,然后重载 SaveControlState 和 LoadControlState 方法。

档案属性

多数时候,你需要在用户使用应用程序的时候保存特定的用户数据来对用户体验进行定制。ASP.NET 1.1 中为此提供了两个主要的方法。会话状态为保存特定的用户信息提供了一个简单方法。但是,会话信息会在用户会话过期的时候从内存中被删除。你同样能够使用 Cookie 来保存一个唯一的用户标识,然后从服务器的数据库中保持并获取信息。但是,这都需要编写代码来实现。为了解决这个问题,ASP.NET 2.0 提供了一个被称为档案属性的新特征,允许你保存特定的用户数据。

ASP.NET 提供了一个被称作档案属性的特征,允许你保存特定的用户数据。这个特征与会话状态类似,不同之处就是档案数据不会在用户的会话过期的时候被丢失。档案属性特征所使用的 ASP.NET 档案被保存在一个持续格式中并且与单独的用户相关联。ASP.NET 档案允许你在不需要创建并维护自定义数据库的情况下来简化对用户信息的管理。另外,档案还使用一个强类型的 API 使用户信息能够生效,并且你能够在应用程序的任何位置对这个 API 进行访问。你能够在档案中保存任何类型的对象。ASP.NET 档案特征提供了一个普通的存储系统来允许你在仍然需要在类型安全规则中使数据生效的情况下定义并维护几乎所有类型的数据。

关于更多信息,请参考:[ASP.NET 档案属性概览]。

视图状态拆分

视图状态提供了一个简单的方法来对页面中的字段和控件数据进行自动化保持,从而不需要手动进行请求然后在回传的过程期间重新组装到服务器中。它同样允许你把页面中的自定义数据保存到 ViewState 属性中。

但是,视图状态的数据在某些情况下会变得非常庞大。因为视图状态数据被保存在隐藏字段中,一些代理和防火墙会禁止对包含庞大视图状态数据的页面进行访问。由于这个原因,ASP.NET 2.0 页面框架引入了一个被称为视图状态拆分的特征。如果视图状态数据的数量比较庞大,视图状态拆分就会自动把数据拆分成块并保存进多个隐藏窗体的字段中。

要启用视图状态拆分,请为单个视图状态字段的 MaxPageStateFieldLength 属性设置最大尺寸(单位是字节)限制。当页面被回传到服务器的时候,页面会在初始化和恢复属性信息的时候对视图状态字符串进行分析。默认时的设置是 -1,表示没有最大尺寸的限制并且视图状态也不会被拆分成数据块。

关于更多信息,请参考:[视图状态概览]。

自定义会话状态管理

默认时,会话状态的值和信息被保存在 ASP.NET 进程的内存中。ASP.NET 同样提供了允许你使用会话状态服务器的会话状态提供者,会话状态服务器会把会话数据保持到一个分离的进程中,或者在 SQL 数据库中保持会话状态数据。但是,通过 ASP.NET 2.0,你可以创建允许你对被保存在 ASP.NET 应用程序中的会话状态数据进行定制的自定义会话状态提供者。例如,出于下列原因,你可能会考虑创建一个自定义的提供者:

  • 你需要把会话状态信息保存到 SQL Server 以外的数据源中,如 Visual FoxPro 数据库或 Oracle 数据库。

  • 你需要使用一个数据库结构来管理会话状态信息,该数据库结构区别于被提供者所使用的由 .NET Framework 所提供的数据库结构。这样的一个实例可能是被保存在公司或网站的现有 SQL Server 数据库的预定义结构中的购物车数据。

关于更多信息,请参考:[实现会话状态存储提供者]。

HiddenField 控件

视图状态允许你通过编程在 Web 页面中保存数据并在隐藏的窗体字段中自动获取、保持、并维护这些数据。但是,ASP.NET 2.0 增加了一个新的 Web 控件,HiddenField 控件在页面中被呈现成 input type="hidden"/ 元素并且提供了与其他 Web 控件一致的可编程 API。

posted on 2007-01-10 21:26  Laeb  阅读(233)  评论(0编辑  收藏  举报