关于上下文-2 (转自msdn)

图 1:浏览器中呈现的标准页眉和页脚示例
这是一个简单的示例,但您可以很容易地将它扩展,使其包含标准的页眉与导航,或者仅输出相应的 <!-- #include ---> 语句。请注意,如果希望页眉或页脚包含交互内容,应考虑使用 ASP.NET 用户控件。

[SomePage.aspx 源代码 - 内容示例]

<FONT face="Arial" color="#cc66cc" size="5">常规页面内容</FONT>

[Visual Basic Global.asax]

<%@ Application Language="VB" %><script runat="server">      Sub Application_BeginRequest(sender As Object, e As EventArgs)         ' 生成页眉         Context.Response.Write("<html>" + ControlChars.Lf + _"<body bgcolor=#efefef>" + ControlChars.Lf + "<hr>" + _ ControlChars.Lf)      End Sub                   Sub Application_EndRequest(sender As Object, e As EventArgs)         ' 生成页脚         Context.Response.Write("<hr>" + ControlChars.Lf + _      "2002 Microsoft Corporation 版权所有" + _      ControlChars.Lf + "</body>" + ControlChars.Lf + "</html>")      End Sub </script>

[C# Global.asax]

<%@ Application Language="C#" %><script runat="server">        void Application_BeginRequest(Object sender, EventArgs e) {            // 生成页眉            Context.Response.Write("<html>\n<body bgcolor=#efefef>\n<hr>\n");        }        void Application_EndRequest(Object sender, EventArgs e) {            // 生成页脚            Context.Response.Write("<hr>\2002 Microsoft Corporation 版权所有\n");            Context.Response.Write("</body>\n</html>");        }</script>

如何在用户经过身份验证后显示欢迎信息?

回答:测试 User 上下文对象以查看用户是否经过身份验证。如果是,还要从 User 对象获取用户名。当然,这是本文开头的示例。

[Visual Basic]

<script language="VB" runat="server">    Sub Page_Load(sender As Object, e As EventArgs) {        If User.Identity.IsAuthenticated Then            welcome.Text = "欢迎" + User.Identity.Name        Else            ' 尚未登录,添加一个指向登录页的链接            welcome.Text = "请登录!"            welcome.NavigateUrl = "signin.aspx"        End If    End Sub</script><asp:HyperLink id="welcome" runat="server" maintainstate="false"></asp:HyperLink>

[C#]

<script language="C#" runat="server">    void Page_Load(object sender, EventArgs e) {        if (User.Identity.IsAuthenticated) {            welcome.Text = "欢迎" + User.Identity.Name;        }        else {            // 尚未登录,添加一个指向登录页的链接            welcome.Text = "请登录!";            welcome.NavigateUrl = "signin.aspx";        }    }</script><asp:HyperLink id="welcome" runat="server" maintainstate="false"></asp:HyperLink>

Context.Items 简介
希望以上示例可以说明,使用手头仅有的上下文信息编写 Web 应用程序是多么容易。那么,如果可以用同样的方法访问您应用程序独有的一些上下文,不是很好吗?
这就是 Context.Items 集合的用途。它使用在参与处理请求的各部分代码中都可用的方法,保存应用程序的请求特有值。例如,同样一条信息可以用在 Global.asax、ASPX 页、页内的用户控件中,也可以由页调用的业务逻辑使用。
请考虑 IBuySpy Portal(英文)应用程序示例。它使用一个简单的主页 DesktopDefault.aspx 来显示门户内容。显示的内容取决于所选择的选项卡,以及用户(如果已经过身份验证)角色。
asp01242002-fig02.gif
图 2:IbuySpy 主页
查询字符串包含正被请求的选项卡的 TabIndedx 和 TabId 参数。在处理请求的整个过程中,一直使用此信息筛选要显示给用户的数据。http://www.ibuyspyportal.com/DesktopDefault.aspx?tabindex=1&tabid=2(英文)
要使用查询字符串值,需要首先确保它是一个有效值,如果不是,则要进行一些错误处理。它并不是一大串代码,但是您真的要在每个使用该值的页和组件中复制它吗?当然不!在 Portal 示例中,甚至更多的地方都涉及到它,因为一旦我们知道了 TabId,就可以预先加载其他信息。
Portal 使用查询字符串值作为参数,以构造一个新的 PortalSettings 对象,并将它添加到 Global.asax 的 BeginRequest 事件的 Context.Items 中。由于在每个请求开始处都执行了开始请求,这使得与该选项卡有关的值在应用程序的所有页和组件中都可用。请求完成后,对象将被自动丢弃 - 非常整齐!

[Visual Basic Global.asax]

      Sub Application_BeginRequest(sender As [Object], e As EventArgs)                  Dim tabIndex As Integer = 0         Dim tabId As Integer = 0                  ' 从查询字符串获取 TabIndex         If Not (Request.Params("tabindex") Is Nothing) Then            tabIndex = Int32.Parse(Request.Params("tabindex"))         End If                  ' 从查询字符串获取 TabID         If Not (Request.Params("tabid") Is Nothing) Then            tabId = Int32.Parse(Request.Params("tabid"))         End If                  Context.Items.Add("PortalSettings", _New PortalSettings(tabIndex, tabId))      End Sub

[C# Global.asax]

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 被访问过的所有地方。

[C# DesktopPortalBanner.ascx]

<%@ 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>\n" + "<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>

您可以使用 Visual Basic 和 C# 在 http://www.ibuyspy.com(英文)联机浏览并运行 IBuySpy Portal 的完整源文件,或者下载后再运行。小结
Context 是 ASP.NET 中的又一个“精益求精”的功能。它扩展了 ASP 的已经很不错的上下文支持,以便将两个挂钩添加到 ASP.NET 的新运行时功能中。同时添加了 Context.Items,作为短期值的新状态机制。但对于开发人员,此功能的最大好处是使代码更紧凑,且易于维护,而且此上下文我们都能看懂。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c#
, context
, tabindex
, tab字符c#
, 页眉
, 上下文
, 示例
tabindex功能
omnifocus2 上下文、struts2的上下文对象、struts2 上下文、上下文、上下文无关文法,以便于您获取更多的相关知识。

时间: 2024-08-01 07:35:53

关于上下文-2 (转自msdn)的相关文章

关于上下文-1 (转自msdn)

关于上下文 Susan WarrenMicrosoft Corporation 2002年1月14日 编写 Web 应用程序时最常见的问题之一,是要让代码知道它的执行上下文.让我们通过一个简单的例子(即个性化页面)来说明这个问题:     请登录.与     欢迎 Susan!虽然看起来很简单,但即使是这一小段 Web UI,仍然需要好几段信息,而且每次请求该页时这些信息都会发生变化.我们需要知道以下内容: 用户登录了吗? 用户的显示名是什么? 更通常的问题是,每次请求该页时,唯一的上下文是什么

领域驱动设计的编码: 数据聚焦型开发的技巧

今年,Eric Evans 具有开创性的软件设计图书"Domain-Driven Design: Tackling Complexity in the Heart of Software"(领域驱动设计:软件核心复杂性应对之道) (Addison-Wesley Professional,2003 年,amzn.to/ffL1k)迎来了其出版十周年的纪念日.Evans 在本书中分享了其指导大型企业完成构建软件的过程的多年经验.他随后花了更长时间考虑 如何概括帮助这些项目获得成功的模式 -

【转】Windows Shell扩展编程傻瓜手册大全:上下文菜单扩展

引用自:http://blog.163.com/yesaidu@126/blog/static/51819307200861853827582/ Part I: A step-by-step tutorial on writing shell extensions 第一节:Windows shell扩展初步:上下文菜单扩展   作者:Michael Dunn 译者:yesaidu   源代码下载:1       2   目录 ● README ● 系列绪言 ● 第一部分绪言 ● 从AppWiza

用XML数据岛创建上下文菜单

xml|菜单|创建|数据   上下文菜单就是用户在页面上单击右键时所显示的一组命令.微软的MSDN有一个简单的例子说明了怎样建立自定义菜单.这里,我们将通过XML的数据岛来快速创建自定义的上下文菜单.XML数据岛就是存在于HTML文档中的XML数据的一部分.通过XML文档对象模型[XML document object model (DOM)],我们可以轻松地参考和引用XML里的内容.我们这里利用XML数据岛来存储上下文菜单的多个定义,其中的每一个定义都可以和文档中的任一元素相联系.在没有定义的

拖放 DataGrid 列--来自MSDN

datagrid 摘要:了解如何利用基本的 GDI 功能,从而通过 DataGrid 控件获得可视化效果.通过跨越托管边界进行调用,可以利用本机 GDI 功能来执行屏幕捕获,并最终获得拖放体验. 下载 ColumnDragDataGrid.msi 文件. 本页内容 简介 入门 ScreenImage 类 DraggedDataGridColumn 类 ColumnDragDataGrid 类 列跟踪 重写 DataGrid 的 OnPaint 方法 小结 简介几个月以前,当我初到 Microso

ConcurrencyMode.Multiple模式下的WCF服务就一定是并发执行的吗:探讨同步上下文对并发的影响[上篇]

在<并发与实例上下文模式>中,我们通过实例演示的方式讲述了基于不同实例上下文模式的并发行为.对于这个实例中的服务类型CalculatorService,读者应该还记得我们对它进行了特别的定义:通过ServiceBehaviorAttribute特性将属性将UseSynchronizationContext设置成False.至于为何要这么做,这就是本篇文章需要为你讲述的内容.为了让读者对本节介绍的内容有一个深刻的认识,我们不然去掉ServiceBehaviorAttribute特性的UseSyn

设备上下文-请问各位大神,Windows编程里边的DC(device context)到底是什么啊?

问题描述 请问各位大神,Windows编程里边的DC(device context)到底是什么啊? 请教各位大神,设备上下文(device context)到底是个什么东西?它仅仅是一个抽象概念还是一个实体概念(即有对应的代码)?它是一个结构体吗?如果它有对应的源码的话,怎么能找到?在下在网上找了很多资料,包括MSDN上的,但越看越糊涂.在下想了解关于它最本质的东西,在下怎么才能"看到它"?这个问题给在下带来很大困惑,希望大家为在下指点迷津,拜托大家了!在下先行谢过! 解决方案 DC实

与众不同 windows phone (16) - Media(媒体)之编辑图片, 保存图片到相册, 与图片的上下文菜单“应用程序...”和“共享...”关联, 与 Windows Phone 的图片中心集成

原文:与众不同 windows phone (16) - Media(媒体)之编辑图片, 保存图片到相册, 与图片的上下文菜单"应用程序..."和"共享..."关联, 与 Windows Phone 的图片中心集成 [索引页][源码下载] 与众不同 windows phone (16) - Media(媒体)之编辑图片, 保存图片到相册, 与图片的上下文菜单"应用程序..."和"共享..."关联, 与 Windows Phon

针对 Visual Studio 2017 的新版本离线 MSDN 可以下载了

针对 Visual Studio 2017的新版本离线文档库(MSDN)已经可以下载了.现在,无需使用激活的网络连接,就可以轻松地下载MSDN和DOCS上发布的内容了.Visual Studio团队还在Microsoft Azure上托管了文档生成和获取服务,使得这两项服务更加的高效和可靠 .我们将会持续的更新内容,用户也不用卡在过时的文档中等待6个月才能获取新版本的文档.创建和更新离线文档阅读器的过程不再需要几个月,而只需几个小时! 新的离线文档阅读器依旧可以直接与Visual Studio集