.net - Доступ к глобальным переменным страниц из пользовательского элемента управления. - PullRequest
1 голос
/ 27 марта 2012

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

 public partial class index : System.Web.UI.Page
  {
    FormsIdentity id = (FormsIdentity)User.Identity;
    string custID = "some guid";
    string accID = "some guid";

    protected void Page_Load(object sender, EventArgs e)
    {
    }
  }

Это всего лишь пример, мои настоящие глобальные переменные являются более сложными объектами пользовательской конфигурации, но они должны быть одинаковыми.

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

Кто-нибудь знает, если / как это сделать? Спасибо!

Ответы [ 2 ]

3 голосов
/ 27 марта 2012

Да, вы можете. Это называется передачей переменных в пользовательский элемент управления. Конечно, он хранится в памяти более одного раза, но это всего лишь «цена» сохранения разделения интересов и создания элементов управления многократного использования.

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

Теперь, если вы не хотите хранить в памяти два комментария. Я бы не беспокоился об этом, так как это небольшой объем информации (1), тем более что он будет действовать только в течение срока действия запроса (2). Не совсем верно, поскольку GC не срабатывает сразу.

2 голосов
/ 27 марта 2012

Если вы полагаетесь на эту информацию для нескольких элементов управления, лучше всего иметь UserControlBase, который наследуется от UserControl, а затем заставить ваши элементы управления наследоваться от UserControlBase. Сделайте то же самое с классами Page. Затем вы можете добавить свойство в вашу BasePage. Для ссылки в вашей UserControlBase просто сделайте ...

protected UserInfo UserInfo 
{ 
    get 
    { 
        return ((BasePage)this.Page).UserInfo; 
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...