转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 站长学院 >> Web开发 >> 正文
ASP.NET状态存储管理九大兵器之四(暂存状态)         ★★★★

ASP.NET状态存储管理九大兵器之四(暂存状态)

作者:闵涛 文章来源:闵涛的学习笔记 点击数:913 更新时间:2009/4/23 10:47:48

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>

 


联系方式:
http://www.cnblogs.com/aierong
aierong@2118.cn
aierong@hotmail.com
QQ:114298


[C语言系列]NET 中C#的switch语句的语法  [系统软件]托拽Explore中的文件到VB.net的窗口
[系统软件]Boost库在XP+Visual C++.net中的安装  [常用软件]新配色面板:Paint.Net3.0RC1官方下载
[常用软件]用内建的“Net Meeting”聊天  [VB.NET程序]Henry的VB.NET之旅(三)—共享成员
[VB.NET程序]Henry的VB.NET之旅(二)—构造与析构  [VB.NET程序]Henry的VB.NET之旅(一)—失踪的窗体
[VB.NET程序]在托盘上显示Balloon Tooltip(VB.NET)  [VB.NET程序]Henry手记-VB.NET中动态加载Treeview节点(二)
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Web开发  · 网页制作
    · 平面设计  · 网站运营
    · 网站推广  · 搜索优化
    · 建站心得  · 站长故事
    · 互联动态
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台