Как получить доступ к свойствам из global.asax в коде другой страницы - PullRequest
13 голосов
/ 31 октября 2008

Представьте, что у меня есть свойство, определенное в global.asax.

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

Я хочу использовать значение на другой странице. как к нему обратиться?

Ответы [ 8 ]

17 голосов
/ 31 октября 2008

Вы можете получить доступ к классу так:

((Global)this.Context.ApplicationInstance).Roles
3 голосов
/ 31 октября 2008

Мне кажется, что это зависит только от сеанса - так почему бы не сделать из него пару статических методов, которые принимают сеанс в качестве параметра? Затем вы можете передать значение свойства "Session" со страницы. (Все, что имеет доступ к HttpApplication, может, конечно, просто ссылаться на его свойство Session.)

2 голосов
/ 31 октября 2008

Если это свойство, к которому вам нужно получить доступ на всех страницах, возможно, вам лучше определить базовую страницу, которую расширяют все остальные ваши страницы ...

например. по умолчанию

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
{
}
1 голос
/ 16 декабря 2010

Вы также можете использовать следующий синтаксис:

((Global)HttpContext.Current.ApplicationInstance).Roles
1 голос
/ 31 октября 2008

Привет, я выскакиваю из вишни stackoverflow.com! Мой первый ответ после потайного месяца.

Чтобы получить доступ к свойству, определенному в вашем глобальном классе, используйте одно из следующих:

  • Свойство Application, определенное в классах HttpApplication и Page (например, Page.Application ["TestItem"])

  • свойство HttpContext.ApplicationInstance (например, HttpContext.Current.ApplicationInstance)

С помощью любого из них вы можете привести результат к типу Global и получить доступ к нужному вам свойству.

0 голосов
/ 12 июля 2013

Для других слоев проекта, которые не могут иметь Global как класс:

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

Просто я должен быть уверен, что свойство Roles в классе Global никогда не меняется. а другой путь - через отражение.

0 голосов
/ 02 декабря 2009

В самом global.asax для .net 3.5 я использовал typeof (global_asax), и это работало нормально. И что на самом деле привело меня к реализации примеров OpenID DotNet. Я изменил некоторые из них, чтобы использовать кэш приложений, как предложил Уилл.

0 голосов
/ 31 октября 2008

Если значения зависят от сеанса, то это на самом деле просто, используя словарь 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

...