学会处理ASP.NET的页面和请求状态信息

ZDNet软件频道 时间:2003-04-23 作者:BUILDER.COM |  我要评论()
本文关键词:
任何动态Web应用程序都必须能够管理状态信息——ASP.NET的应用程序也不例外。在本文里,我会讨论处理两种类型状态信息的方法:请求状态和页面状态。
本文译自Builder.com,未经许可请勿转载任何动态Web应用程序都必须能够管理状态信息——ASP.NET的应用程序也不例外。在本文里,我会讨论处理两种类型状态信息的方法:请求状态和页面状态。我还会举出一些处理状态信息常用的最佳方法。



在本文里,我的内容会用到下面这两篇先前的发表文章里的概念:
《ASP.NET提供了新的状态管理技术》
《使用ASP.NET缓冲来优化你的Web应用程序》


使用请求状态

对ASP.NET Web应用程序的请求由ASP.NET运行引擎在一个管线进程里处理。在这个请求被处理的时候,它就被从Web服务器(IIS)传递到HTTP应用程序,后者global.asax里的事件会对HTTP模块启动。在这些模块里,会话状态、安全以及其他信息会被处理。最后,专用的HTTP句柄会生成页面。A说明了这一过程。

图A

ASP.NET请求处理的简化图


在处理过程中,信息被附加到HttpContext对象里,这个对象能够通过Context属性最终在任何Page和UserControl类里被访问到。

除了允许访问当前请求的其他信息之外,HttpContext对象也能够被自定义的数据所填充,这些自定义数据能够被请求的其余内容访问。例如,global.asax代码分离(code-behind)类的BeginRequest事件能够包含读取数据的代码,这个数据库里放有动态页面布局的信息。这样这个信息就能够被放置在HttpContext对象里,并且能够从任何页面访问到,用以加载用户的控件和自动更改页面显示选项。

另一个例子是从Web页面取回用户的输入,然后把信息放到上下文里从而把信息传递给另一个页面,就像下面这样:

Me.Context.Items.Add("dept", txtDept.Text)
Me.Context.Items.Add("city", txtCity.Text)
Me.Server.Transfer("displayData.aspx")

在这种情况下,要注意缓冲区里的项目是能够被任何类型的数据所填充的名称-值对。但是对于要在另一个页面上取回的数据,Server对象的Transfer方法必须被用来执行下一个页面而不是带有查询字符串的Response.Redirect,因为后者会让浏览器创建一个对此页面的新请求,因此会创建一个新的HttpContext。而Server.Transfer在另一方面会在服务器端继续执行同一个请求,并保持已有的HttpContext。


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134