Представьте, что у меня есть свойство, определенное в global.asax.
public List<string> Roles
{
get
{
...
}
set
{
...
}
}
Я хочу использовать значение на другой странице. как я к нему отношусь?
Представьте, что у меня есть свойство, определенное в global.asax.
public List<string> Roles
{
get
{
...
}
set
{
...
}
}
Я хочу использовать значение на другой странице. как я к нему отношусь?
Вы можете получить доступ к классу следующим образом:
((Global)this.Context.ApplicationInstance).Roles
Мне кажется, что это зависит только от сеанса - так почему бы не сделать его парой статических методов, которые принимают сеанс как параметр? Затем вы можете передать значение свойства "Сессия" со страницы. (Все, что имеет доступ к 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! Мой первый ответ после скрытия в течение месяца.
Чтобы получить доступ к свойству, определенному в вашем глобальном классе, используйте одно из следующих действий:
свойство приложения, определенное как в классах HttpApplication, так и в классах страницы (например, PageApplication [ "TestItem" ])
Свойство HttpContext.ApplicationInstance(например, HttpContext.Current.ApplicationInstance)
С помощью любого из них вы можете применить результат к своему глобальному типу и получить доступ к требуемому вам ресурсу.
Вы также можете использовать следующий синтаксис:
((Global)HttpContext.Current.ApplicationInstance).Roles
Если значения зависят от сеанса, то это действительно просто, используя словарь 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
В самом global.asax для .net 3.5 я использовал typeof (global_asax), и это отлично работало. И, что на самом деле привело меня сюда, было внедрение примеров DotNet OpenID. Я изменил некоторые из них, чтобы использовать кэш приложений, как предложил Уилл.
Для других слоев проекта, которые невозможно иметь глобальный как класс:
dynamic roles= ((dynamic)System.Web.HttpContext.Current.ApplicationInstance).Roles;
if (roles!= null){
// my codes
}
Просто я должен быть уверен, что свойство Roles в глобальном классе никогда не меняется. а другой путь - отражением.