如何在其他页面的代码中访问global.asax中的属性

时间:2008-10-30 22:27:42

标签: c# asp.net global-asax

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

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

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

8 个答案:

答案 0 :(得分:17)

你可以像这样访问这个类:

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

答案 1 :(得分:3)

在我看来,这只取决于会话 - 所以为什么不把它作为一个参数会话的一对静态方法呢?然后,您可以从页面传入“Session”属性的值。 ( 有权访问HttpApplication的任何内容当然可以引用其Session属性。)

答案 2 :(得分:2)

如果这是您需要在所有页面中访问的属性,您可能更好地定义所有其他页面扩展的基页...

e.g。默认情况下

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
{
}

答案 3 :(得分:1)

嘿,我正在弹出我的stackoverflow.com樱桃!潜伏一个月后我的第一个答案。

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

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

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

使用其中任何一个,您可以将结果转换为Global类型并访问所需的属性。

答案 4 :(得分:1)

您还可以使用以下语法:

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

答案 5 :(得分:0)

如果值依赖于Session,那么使用HttpContext.Items词典实际上很简单:

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

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

让我们使用以下代码在页面中进行检索:

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

以下是一个更详细描述它的链接:http://aspnet.4guysfromrolla.com/articles/060904-1.aspx

答案 6 :(得分:0)

在.net 3.5的global.asax本身上,我使用了typeof(global_asax)并且工作正常。而且,实际上引导我的是实现DotNet OpenID示例。我改变了一些使用像Will建议的应用程序缓存。

答案 7 :(得分:0)

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

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

我必须确保Global类中的Roles属性永远不会改变。 另一种方式是通过反思。

相关问题