Убедитесь, что что-то хранится в сеансе перед чем-либо еще в жизненном цикле страницы.

Я хочу сохранить что-то в объекте сеанса (например, идентификатор пользователя), прежде чем что-либо еще произойдет в жизненном цикле страницы.
Я попытался поместить это в конструктор страницы, но объект сеанса тогда еще недоступен.< br> Я пытался переопределить OnInit, но тогда другие делегаты, подключенные к событию Init, могли все еще выполняться раньше.

Я действительно потерялся, хотя это похоже на очень простую теорию ASP.NET.


person Protector one    schedule 06.03.2012    source источник
comment
@Aristos: Разве это не вызовет у меня те же проблемы, но с делегатами, также подключенными к PreInit?   -  person Protector one    schedule 06.03.2012


Ответы (2)


Более распространенный подход — инкапсулировать доступ к данным в Session и загружать их по запросу при первом доступе. Базовый шаблон выглядит следующим образом:

public string UserId
{
    get
    {
        string s = Session["UserId"];
        if (s == null)
        {
            s = ... Get UserID from somewhere, e.g. database
            Session["UserId"] = s;
        }
        return s;
    }
}

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

person Joe    schedule 06.03.2012
comment
Ах, это здорово! Думаю, это не ответ на вопрос, но, возможно, гораздо лучшее решение проблемы! :) - person Protector one; 06.03.2012

Вы можете переопределить OnInit(). метод, реализуйте свой код и добавьте последний вызов base.OnInit(), который вызывает зарегистрированные события Init.

person devio    schedule 06.03.2012
comment
Фактически, другие зарегистрированные делегаты будут выполняться независимо от того, вызываете ли вы OnInit базы или нет. Чтобы понять, что я имею в виду, в конструкторе страницы поместите что-то вроде этого: Init += MyDelegate;. - person Protector one; 06.03.2012
comment
не могу проверить .net прямо сейчас, но взгляните на Mono и найдите OnInit koders.com /csharp/ - person devio; 06.03.2012