您的位置:首页 > 理论基础 > 计算机网络

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

2017-10-17 17:55 344 查看
转自:http://www.cnblogs.com/aierong/archive/2004/07/14/24177.html

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(Object sender, EventArgs e) { 




    // 从当前上下文获取 PortalSettings 


 PortalSettings portalSettings = 


(PortalSettings) Context.Items["PortalSettings"]; 




    // 动态填充门户站点名称 


    siteName.Text = portalSettings.PortalName; 




    // 如果用户已登录,自定义欢迎信息 


    if (Request.IsAuthenticated == true) { 


     


      WelcomeMessage.Text = "欢迎" + 


Context.User.Identity.Name + "!<" + 


"span class=Accent" + ">|<" + "/span" + ">"; 




      // 如果身份验证模式为 Cookie,则提供一个注销链接 


      if (Context.User.Identity.AuthenticationType == "Forms") { 


        LogoffLink = "<" + "span class="Accent">|</span> " + 


"<a href=" + Request.ApplicationPath + 


"/Admin/Logoff.aspx class=SiteLink> 注销" + 


"</a>"; 


      } 


    } 




    // 动态显示门户选项卡条 


    if (ShowTabs == true) { 




      tabIndex = portalSettings.ActiveTab.TabIndex; 




      // 生成要向用户显示的选项卡列表                  


      ArrayList authorizedTabs = new ArrayList(); 


      int addedTabs = 0; 




      for (int i=0; i < portalSettings.DesktopTabs.Count; i++) { 


       


        TabStripDetails tab = 


(TabStripDetails)portalSettings.DesktopTabs[i]; 




        if (PortalSecurity.IsInRoles(tab.AuthorizedRoles)) { 


          authorizedTabs.Add(tab); 


        } 




        if (addedTabs == tabIndex) { 


          tabs.SelectedIndex = addedTabs; 


        } 




        addedTabs++; 


      }      




      // 用已授权的选项卡填充页顶部的选项卡 


// 列表 


      tabs.DataSource = authorizedTabs; 


      tabs.DataBind(); 


    } 


  } 




</script> 


<table width="100%" cellspacing="0" class="HeadBg" border="0"> 


  <tr valign="top"> 


    <td colspan="3" align="right"> 


      <asp:label id="WelcomeMessage" runat="server" /> 


      <a href="<%= Request.ApplicationPath %>">Portal 主页</a> 


<span class="Accent"> |</span> 


<a href="<%= Request.ApplicationPath %>/Docs/Docs.htm"> 


        Portal 文档</a> 


      <%= LogoffLink %> 


         


    </td> 


  </tr> 


  <tr> 


    <td width="10" rowspan="2"> 


        


    </td> 


    <td height="40"> 


      <asp:label id="siteName" runat="server" /> 


    </td> 


    <td align="center" rowspan="2"> 


     


    </td> 


  </tr> 


  <tr> 


    <td> 


      <asp:datalist id="tabs" runat="server"> 


        <ItemTemplate> 


           


<a href='<%= Request.ApplicationPath %> 


/DesktopDefault.aspx?tabindex=<%# Container.ItemIndex %>&tabid= 


<%# ((TabStripDetails) Container.DataItem).TabId %>'> 


<%# ((TabStripDetails) Container.DataItem).TabName %> 


</a>  


        </ItemTemplate> 


        <SelectedItemTemplate> 


           


         <span class="SelectedTab"> 


<%# ((TabStripDetails) Container.DataItem).TabName %> 


</span>  


        </SelectedItemTemplate> 


      </asp:datalist> 


    </td> 


  </tr> 


</table> 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: