想象一下,我在global.asax中定义了一个属性。
public List<string> Roles
{
get
{
...
}
set
{
...
}
}
我想在另一个页面中使用该值。我该怎么称呼呢?
答案 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)
要访问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属性永远不会改变。 另一种方式是通过反思。