2008-10-30 35 views

回答

17

您可以访问类是这样的:

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

它看起来对我来说,只有依赖于会议 - 那么为什么不让它一对内搭会话参数静态方法?然后,您可以从页面中传递“会话”属性的值。 (任何有确实有机会获得的HttpApplication可以直接引用其Session属性,当然)。

+0

对不起,我降低了你的帖子。正如我一直在想的那样,你是完全正确的。我想把我的投票转换成upvote,但是stackoverflow不会让我了。请接受我的感谢。 – minty 2008-10-31 16:02:12

+0

@minty:只需点击突出显示的倒票,它就会撤消它。这可能会使你事后注册。 – 2008-10-31 16:24:08

+0

这是一个好主意,但将属性值包装在一个属性中可以帮助防止未命中使用。当然,如果支持变量在会话中,那么您仍然需要担心人们直接访问它。 – Trisped 2012-04-12 01:08:54

2

如果这是你需要的所有页面访问的属性,你可能会更好地界定一个基本页面,所有的其他网页延长...

如默认情况下

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

如果值依赖于会话,那么这是实际运用简单HttpContext.Items词典:

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

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

让与此代码retreive它在一个页面:

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

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

1

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

要访问您的全局类中定义的属性,使用下列的:在一个HttpApplication和页类都定义

  • 应用程序属性(如Page.Application [“TestItem”])

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

在上述任一情况,你可以在c作为全局类型的结果并访问您需要的属性。

0

在我用在Global.asax本身.NET 3.5的typeof(global_asax),并且工作得很好。而且,这里真正引导我的是实现DotNet OpenID示例。我改变了它的一些使用像Will建议的应用程序缓存。

1

您还可以使用以下语法:

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

对于项目的其他层,它是不可能有全球为一类:

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

只是我必须确保Global类中的角色属性不会更改。 另一种方式是通过反思。

相关问题