global.asax でプロパティが定義されているとします。
public List<string> Roles
{
get
{
...
}
set
{
...
}
}
別のページで値を使用したい。どのように私はそれを参照するのですか?
global.asax でプロパティが定義されているとします。
public List<string> Roles
{
get
{
...
}
set
{
...
}
}
別のページで値を使用したい。どのように私はそれを参照するのですか?
次のようにクラスにアクセスできます。
((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チェリーをポップしています! 1ヶ月潜伏した後の私の最初の答え。
Global クラスで定義されたプロパティにアクセスするには、次のいずれかを使用します。
HttpApplication クラスと Page クラスの両方で定義された Application プロパティ (例: Page.Application["TestItem"])
HttpContext.ApplicationInstance プロパティ (例: HttpContext.Current.ApplicationInstance)
これらのいずれかを使用して、結果を Global 型にキャストし、必要なプロパティにアクセスできます。
次の構文も使用できます。
((Global)HttpContext.Current.ApplicationInstance).Roles
On the global.asax itself for .net 3.5 I used typeof(global_asax) and that worked fine. And, what actually lead me here was implementing the DotNet OpenID examples. I changed some of it to use the Application cache like Will suggested.
値がセッションに依存している場合、これは実際には 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
グローバルをクラスとして持つことができないプロジェクトの他のレイヤーの場合:
dynamic roles= ((dynamic)System.Web.HttpContext.Current.ApplicationInstance).Roles;
if (roles!= null){
// my codes
}
Global クラスの Roles プロパティが変更されないようにする必要があります。もう1つの方法は、反射によるものです。