如何访问其他页面中global.asax的属性';s代码隐藏

本文关键字:属性 asax 隐藏 代码 global 何访问 访问 其他 | 更新日期: 2023-09-27 17:47:47

想象一下,我在global.asax.中定义了一个属性

public List<string> Roles
{
    get
    {
        ...
    }
    set
    {
        ...
    }
}

我想在另一页中使用该值。我该怎么称呼它?

如何访问其他页面中global.asax的属性';s代码隐藏

您可以访问这样的类:

((Global)this.Context.ApplicationInstance).Roles

在我看来,这只取决于会话-为什么不让它成为一对以会话为参数的静态方法呢?然后,您可以从页面中传入"Session"属性的值。(当然,有权访问HttpApplication的任何东西都可以引用其Session属性。)

如果这是您需要在所有页面中访问的属性,那么您最好定义一个基本页面,以便所有其他页面都能扩展。。。

例如默认情况下的

public partial class _Default : System.Web.UI.Page 
{
}

你可以做的是将BasePage.cs添加到你的App_Code文件夹

public class BasePage : System.Web.UI.Page 
{
   public List<string> Roles
   {
       get { ... }
       set { ... }
   }
}

然后让你的页面扩展这个。

public partial class _Default : BasePage
{
}

嘿,我要把我的stackoverflow.com樱桃摘下来了!我潜伏了一个月后的第一个答案。

要访问Global类中定义的属性,请使用以下任一项:

  • HttpApplication和Page类(例如Page.Application["TestItem"])中定义的Application属性

  • HttpContext.ApplicationInstance属性(例如HttpContext.Current.ApplicationInstance)

使用这两种方法中的任何一种,都可以将结果强制转换为全局类型,并访问所需的属性。

您还可以使用以下语法:

((Global)HttpContext.Current.ApplicationInstance).Roles

如果值依赖于会话,那么使用HttpContext.Items Dictionary:实际上很简单

将此代码放在Global.asax中以存储值:

Dim someValue As Integer = 5
Context.Items.Add("dataKey", someValue)

让我们用以下代码在页面中检索它:

Dim someValue As Integer = CType(HttpContext.Current.Items("dataKey"), Integer)

以下是一个链接,对其进行了更详细的描述:https://web.archive.org/web/20210608183011/http://aspnet.4guysfromrolla.com/articles/060904-1.aspx

在.net 3.5的global.asax本身上,我使用了typeof(global_asax),这很好。实际上,引导我走到这里的是实现DotNet OpenID示例。我像Will建议的那样,将其中一些更改为使用应用程序缓存。

对于不可能将Global作为类的项目的其他层:

dynamic roles= ((dynamic)System.Web.HttpContext.Current.ApplicationInstance).Roles;
if (roles!= null){
   // my codes
}

我只需要确保全局类中的Roles属性永远不会更改。另一种方式是通过反思。