`

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

阅读更多

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" /> 
      
<href="<%= Request.ApplicationPath %>">Portal 主页</a> 
<span class="Accent"> |</span> 
<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> 
           
<href='<%= Request.ApplicationPath %> 
/DesktopDefault.aspx?tabindex=
<%# Container.ItemIndex %>&tabid
<%# ((TabStripDetails) Container.DataItem).TabId %>'> 
<%# ((TabStripDetails) Container.DataItem).TabName %> 
</a>  
        
</ItemTemplate> 
        
<SelectedItemTemplate> 
           
         
<span class="SelectedTab"> 
分享到:
评论

相关推荐

    【ASP.NET编程知识】在ASP.NET Core5.0中访问HttpContext的方法步骤.docx

    ASP.NET Core 5.0 中访问 HttpContext 的方法步骤 在 ASP.NET Core 5.0 中,访问 HttpContext 的方法步骤是通过 IHttpContextAccessor 接口及其默认实现 HttpContextAccessor 来实现的。只有在需要访问服务内的 ...

    【ASP.NET编程知识】ASP.NET Core读取Request.Body的正确方法.docx

    ASP.NET Core 读取 Request.Body 的正确方法 ASP.NET Core 读取 Request.Body 的正确方法是 ASP.NET Core 开发中一个常见的问题。许多开发者在读取 Request.Body 时都会遇到一些问题,本文将详细介绍读取 Request....

    在ASP.NET Core5.0中访问HttpContext的方法步骤

    ASP.NET Core 应用通过 IHttpContextAccessor 接口及其默认实现 HttpContextAccessor 访问 HttpContext。 只有在需要访问服务内的 HttpContext 时,才有必要使用 IHttpContextAccessor。 通过 Razor Pages 使用 ...

    221025-14Linkage(HttpContext.Items数据读写)

    nopCommerce是一个流行的开源电子商务平台,其开发者可能利用`HttpContext.Items`来在请求处理流程中传递特定的业务逻辑数据,如用户会话信息、购物车状态等,这样可以提高效率并减少不必要的数据库查询。...

    【ASP.NET编程知识】iframe跨域与session失效问题的解决办法.docx

    在 ASP.NET 开发中,跨域和 Session 失效问题是一个常见的问题,但通过添加“P3P”协议和使用 HttpContext.Current.Session,我们可以解决这个问题,从而确保应用程序的正常运行。 相关知识点: * 跨域和 Session ...

    AspNetCoreCurrentRequestContext:在ASP.NET Core应用程序上启用HttpContext.Current

    启用在ASP.NET Core应用程序上使用HttpContext.Current。 安装 从NuGet- PM &gt; Install-Package AspNetCoreCurrentRequestContext 如何使用 首先,您必须在Startup类中的Configure方法IApplicationBuilder ...

    asp.net c# 在类中使用session的方法

    在Web应用程序开发中,特别是在ASP.NET C#应用中,正确且有效地在类中使用Session是非常重要的,这能帮助我们实现用户个性化体验、购物车管理、登录状态维护等功能。 ### 一、理解ASP.NET中的Session Session对象...

    异步 HttpContext.Current实现取值的方法(解决异步Application,Session,Cache…等失效的问题)

    回答的也多数都是:引用System.Web,不要用HttpContext.Current.Application应该用System.Web.HttpContext.Current.Application,后来在网上看到一篇关于System.Runtime.Remoting.Messaging.CallContext这个类的详细...

    asp.net文件管理

    ASP.NET文件管理是一个高效且用户友好的在线文件管理系统,它为开发者提供了在Web环境中便捷地处理文件的能力。这个系统基于Microsoft的ASP.NET框架,利用其强大的功能和灵活性,为用户提供了一个安全、稳定且易于...

    ASP.NET loading,动画进度条

    ### ASP.NET 页面加载动画进度条实现方法 #### 一、背景与概述 在现代Web开发中,用户体验至关重要。用户在等待页面加载时如果能够看到一个动态的进度条,不仅可以提升用户体验,还能增加网站的专业感。本文将详细...

    asp.net 导出GridView里的数据到Excel中

    根据提供的文件信息,本文将详细解释如何在ASP.NET中实现GridView数据导出至Excel的功能。 ### ASP.NET GridView数据导出到Excel的实现方法 #### 一、导出概述 在Web开发中,尤其是在使用ASP.NET进行开发时,经常...

    ASP.NET Core自定义中间件如何读取Request.Body与Response.Body的内容详解

    在编写自定义中间件时,需要注意流的读写状态以及资源管理,避免出现意外的异常或数据丢失。 总之,ASP.NET Core的中间件机制允许开发者灵活地处理HTTP请求和响应。通过正确地备份、读取和恢复`Request.Body`和`...

    ASP.net 文件管理

    ASP.NET 文件管理是一个基于C#和.NET框架的实用工具,旨在提供一种简单的方式来组织和操作服务器上的文件。这个系统的核心功能可能包括文件的上传、下载、删除、重命名以及目录的浏览和创建。通过这样的系统,用户...

    asp.net实现在线查看(预览)pdf,ppt,word,excel文件.rar

    【核心代码】 1 2 3 4 5 6 7 8 ...using System.Net;...using System.Net.Http;... System.Web.HttpContext.Current.Server.MapPath(sourceDoc), System.Web.HttpContext.Current.Server.MapPath(saveDoc)); }

    异步 HttpContext.Current实现取值的方法(解决异步Application,Session,Cache...等失效的问题)

    在ASP.NET开发中,`HttpContext.Current` 是一个非常重要的对象,它提供了对当前HTTP请求的各种信息的访问,包括Application、Session、Cache等。然而,在异步编程中,由于线程切换的原因,`HttpContext.Current` ...

    ASP.NET期末复习题

    四、ASP 和 ASP.NET 的区别 * ASP 和 ASP.NET 的主要区别表现在结构、速度和功能三个方面 五、ASP.NET 配置系统 * ASP.NET 配置系统包括服务器配置和应用程序配置,服务器配置信息存储在 machine.config 文件中,...

    asp.net里导出excel表方法汇总.pdf

    本文档总结了四种在ASP.NET(C#)环境中导出Excel的方法及其实现细节。 #### 1. 由Dataset生成 这种方法通过读取一个`DataSet`中的数据并将其转换为Excel格式。具体步骤如下: 1. **设置响应头**:首先设置`...

    【ASP.NET编程知识】ASP.NET之Excel下载模板、导入、导出操作.docx

    ASP.NET之Excel下载模板、导入、导出操作 ASP.NET是一种基于Web的开发框架,它提供了丰富的功能来处理Excel文件。 本文将介绍ASP.NET下Excel下载模板、导入、导出操作的实践经验,供大家参考。 一、下载模板功能 ...

    【ASP.NET编程知识】ASP.NET实现301重定向方法.docx

    ASP.NET 实现 301 重定向方法 在 ASP.NET 开发中,实现 301 重定向是一个非常重要的技术,特别是在搜索引擎优化(SEO)方面。为什么需要实现 301 重定向?因为搜索引擎将 www.abc.com 和 abc.com 识别为不同的两个...

    Asp.net文件夹及文件的处理

    ### ASP.NET 文件夹及文件处理知识点详解 #### 一、创建与删除文件夹 在ASP.NET开发中,经常需要对服务器上的文件或文件夹进行操作。以下代码展示了如何检查一个文件夹是否存在,并根据检查结果创建或删除文件夹。...

Global site tag (gtag.js) - Google Analytics