快速业务通道

ASP.NET状态管理之四(暂存状态HttpContext.Items)

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-19

ASP.NET提供一个类System.Web.HttpContext ,用来表示上下文,此对象有一个属性Items

暂存状态就是利用HttpContext.Items属性来存放数据

MSDN中HttpContext.Items属性的解释是这样的:获取可用于在 HTTP 请求过程中在 IHttpModule 和 IHttpHandler 之间组织和共享数据的键值

HttpContext.Items属性中可以存放任何类型数据,无论这个属性中存放什么数据,都会在请求处理结束后自动清除,这就是暂存状态,数据的存放时间非常短.

//例如:

//我们有一页面A.ASPX,有一按钮ID:Submit,点按钮把页面转向b.aspx页面
public void Submit_Click(Object sender, EventArgs E)
{
  SqlConnection myConnection = new SqlConnection("server=(local)NetSDK;database=pubs;Trusted_Connection=yes");
  SqlDataAdapter myCommand = new SqlDataAdapter("select * from Authors", myConnection);
  DataSet ds = new DataSet();
  myCommand.Fill(ds, "Authors");
  //把数据放入暂存中
  Context.Items["MyData"] =ds;
  Server.Transfer(b.aspx);  
}
//b.aspx页面中
public void Page_Load(Object sender, EventArgs E)
 {
  if (!IsPostBack)
  {
  //取得暂存数据
  DataSet ds=(DataSet)Context.Items["MyData"];
  //其它数据过程
  }
 }

在ibuyspyportal中我们也看到了此功能的使用:

查询字符串包含正被请求的选项卡的 TabIndedx 和 TabId 参数。在处理请求的整个过程中,一直使用此信息筛选要显示给用户的数据。

http://www.ibuyspyportal.com/DesktopDefault.aspx?tabindex=1&tabid=2

要使用查询字符串值,需要首先确保它是一个有效值,如果不是,则要进行一些错误处理。它并不是一大串代码,但是您真的要在每个使用该值的页和组件中复制它吗?当然不!在 Portal 示例中,甚至更多的地方都涉及到它,因为一旦我们知道了 TabId,就可以预先加载其他信息。

Portal 使用查询字符串值作为参数,以构造一个新的 PortalSettings 对象,并将它添加到 Global.asax 的 BeginRequest 事件的 Context.Items 中。由于在每个请求开始处都执行了开始请求,这使得与该选项卡有关的值在应用程序的所有页和组件中都可用。请求完成后,对象将被自动丢弃

void Application_BeginRequest(Object sender, EventArgs e)
{
  int tabIndex = 0;
  int tabId = 0;
  // 从查询字符串获取 TabIndex
  if (Request.Params["tabindex"] != null) {       
    tabIndex = Int32.Parse(Request.Params["tabindex"]);
  }
  // 从查询字符串获取 TabID
  if (Request.Params["tabid"] != null) {       
    tabId = Int32.Parse(Request.Params["tabid"]);
  }
  Context.Items.Add("PortalSettings", new PortalSettings(tabIndex, tabId));
}

DesktopPortalBanner.ascx 用户控件从 Context 请求 PortalSetting 的对象,以访问 Portal 的名称和安全设置。事实上,此模块是操作中的 Context 的一个典型综合示例。为阐明这一点,我已将代码进行了一些简化,并用粗体标记了 HTTP 或应用程序特定的 Context 被访问过的所有地方。

<%@ Import Namespace="ASPNetPortal" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<script language="C#" runat="server">
  public int     tabIndex;
  public bool     ShowTabs = true;
  protected String  LogoffLink = "";
  void Page_Load

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号