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
>
Sql Server2005 Transact-SQL 新兵器学习总结之-总结
MS SQL数据库备份和恢复存储过程(加强版本)
sql server中分布式查询随笔(链接服务器(sp_addlinkedserver)和远程登录映射(sp_addlinkedsrvlogin)使用小总结)
WAP开发资料站(最新更新)
自定义格式字符串随笔 (IFormattable,IFormatProvider,ICustomFormatter三接口的实现)
Mcad学习笔记之异步编程(AsyncCallback 委托,IAsyncResult接口,BeginInvoke方法,EndInvoke方法的使用小总结)
Mcad学习笔记之通过反射调用類的方法,屬性,字段,索引器(2種方法)
Mcad学习笔记之序列化(2进制和Soap序列化)
Mcad学习笔记之委托再理解(delegate的构造器,BeginInvoke,EndInvoke,Invoke4个方法的探讨)
WinForm开发,窗体显示和窗体传值相关知识总结
Mcad学习笔记之Microsoft Windows服务
copy某目錄下的所有的目錄和文件到目的目錄(目錄數據備份)
ASP.NET状态管理之一(概括篇)