событие page_load на главной странице и странице содержимого - PullRequest
1 голос
/ 09 мая 2011

Вот последовательность, в которой происходят события, когда главная страница объединяется со страницей содержимого:

http://msdn.microsoft.com/en-us/library/dct97kc3.aspx

Итак, моя проблема:

У меня есть одна страница входа (не используется главная страница), одна главная страница и сотни страниц содержимого.

Я проверяю сеанс входа Session["loggedInUser"] на главной странице (если не вошел в систему, перенаправить на страницу входа)

Итак, когда я не вхожу в систему, если я набираю адрес одной страницы контента, он должен проверить сеанс входа в систему на главной странице и перенаправить на страницу входа, верно? Но здесь есть два случая:

Если на странице содержимого я не использую ничего, связанного с Session["loggedInUser"], он будет перенаправлен на страницу входа, поэтому здесь все в порядке!

Второй случай: если я использую Session["loggedInUser"] для отображения имени пользователя на странице содержимого, например:

UserInfo loggedInUser = (UserInfo)Session["loggedInUser"];

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

Я также пытался Page_PreInit на главной странице, но без помощи

protected void Page_PreInit(object sender, EventArgs e)
{
    if (Session["loggedInUser"] == null)
    {
        Response.Redirect("~/Login.aspx");
    }
}

Есть предложения?

Ответы [ 4 ]

1 голос
/ 09 мая 2011

Предположительно, когда вы говорите, что используете значение Session["loggedInUser"], вы вызываете метод .ToString() или аналогичный для его отображения?

В этом случае вам нужно будет проверить наличие нулевого объекта перед его использованием. В любом случае рекомендуется проверять наличие объекта, прежде чем использовать какие-либо методы для него, поэтому:

if (Session["loggedInUser"] != null)
{ ... }

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

http://msdn.microsoft.com/en-us/library/03sekbw5.aspx

1 голос
/ 09 мая 2011

Наконец-то я нашел решение:

Я создаю класс BasePage, например:

public class BasePage : System.Web.UI.Page
{
    protected override void OnLoad(EventArgs e)
    {
        if (Session["loggedInUser"] == null)
        {
            Response.Redirect("~/Login.aspx");
        }
        base.OnLoad(e);
    }
}

И на странице содержимого вместо наследования от Page я изменяю на BasePage, и он отлично работает

Спасибо за вашу поддержку

Хороший день;)

1 голос
/ 09 мая 2011

Вы можете проверить Session["loggedInUser"] на странице содержимого Page_PreRender(), а не Page_Load() или, альтернативно, выполнить проверку главной страницы в Page_Init() вместо Page_Load(). У нас возникла та же проблема, и мы пошли с опцией Мастер страницы Page_Init(), чтобы мы могли по-прежнему использовать Page_Load() на всех страницах контента.

Редактировать: Это Page_Init() , а не PreInit().

0 голосов
/ 20 ноября 2013

У меня есть 2 мастер-страницы (1 для prelogin, 2 для afterlogin), домашняя страница независима, страница выхода наследует страницу postlogin) во всех сеансах postloginpage chck, если sessionnull (xyz) else (перенаправить страницу входа), все это в событии Page_Init afterlogin .master ................ * 1001 К успеху *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...