2008-10-30 40 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類中的角色屬性不會更改。 另一種方式是通過反思。

相關問題