Добавление / удаление переменных сеанса на странице OnInit / OnLoad в C # - PullRequest
2 голосов
/ 16 января 2011

Я использую C #.

У меня ниже код в C #:

protected override void OnInit(EventArgs e)
{
    try
    {
        if (Session["boolSignOn"].ToString() == "true".ToString())              
        {              
            lblPanelOpen.Text = Session["panelOpen"].ToString();
        }
        else
        {
            lblPanelOpen.Text = Session["panelOpen"].ToString();
        }
    }
    catch (Exception ex)
    {
        Logger.Error("Error processing request:" + ex.Message);
    }
}
protected override void OnLoad(EventArgs e)
{
    try
    {
        if (!string.IsNullOrEmpty(Session["panelOpen"].ToString()))
        {
            lblPanelOpen.Text = string.Empty;
            Session.Remove("panelOpen");
        }
    }
    catch (Exception ex)
    {
        Logger.Error("Unable to remove the session variable:" + ex.Message);
    }
}

В приведенном выше коде у меня есть переменная Session["panelOpen"], которая создается из другого пользовательского элемента управления икак только моя страница пытается отрендерить, я сохраняю Session["panelOpen"] в своем скрытом lblPanelOpen.Text на странице OnInit() методе, однако, когда страница полностью загружена, я пытаюсь удалить переменную сеанса.

Пожалуйстапредложить!

Ответы [ 3 ]

5 голосов
/ 16 января 2011

ОК, я думаю, я понял. В первом методе OnInit вы проверяете, является ли boolSignOn нулевым или пустым, а не panelOpen.

попробуйте это intead:

 if (Session["boolSignOn"].ToString() == "true".ToString() && Session["panelOpen"] != null)   

Также измените остальную часть. и измените весь код на:

Обновите здесь полный код, который я попробовал

 protected override void OnInit(EventArgs e)
{
    try
    {
        //Change your condition here
        if (Session["boolSignOn"].ToString() == "true".ToString() && Session["panelOpen"] != null)               
        {              
            lblPanelOpen.Text = Session["panelOpen"].ToString();
        }
        else
        {
            //Dont set text to panelOpen here
            lblPanelOpen.Text = string.Empty;
        }
    }
    catch (Exception ex)
    {
        Logger.Error("Error processing request:" + ex.Message);
    }
}

protected override void OnLoad(EventArgs e)
{
    try
    {
        if (!string.IsNullOrEmpty(Session["panelOpen"].ToString()))
        {
            // No need to set it here it will be set in next load in OnInit call 
            //lblPanelOpen.Text = string.Empty;
            Session.Remove("panelOpen");
        }
   }
   catch (Exception ex)
   {
       Logger.Error("Unable to remove the session variable:" + ex.Message);
   }

}

Надеюсь, это может сработать. Попробуйте 1011 *

1 голос
/ 16 января 2011

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

1) Когда пользователь открывает панель (при условии, что должно быть событие щелчка, когда пользователь щелкает, чтобы открыть панель). Поэтому добавьте код в событие click, чтобы создать и сохранить переменную сеанса с открытым идентификатором Panel.

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

3) Если это не работает, попробуйте использовать Server.Transfer для перенаправления пользователя обратно на ту же страницу.

4) Также вы пытались сделать Session.Clear (); Это работает?

1 голос
/ 16 января 2011

Хорошо, мы идем,

Когда пользователь нажимает ссылку или кнопку входа, вы сохраняете значение в переменной сеанса в вашем случае

Session["boolSignOn"] = true;
Session["panelOpen"] = blah blah; // your thing to keep;

Логин пользователя и страница, перенаправленная на домашнюю страницу при загрузке страницы, вы проверяете сессию ["boolSignOn"], если она имеет значение, и это правда, тогда вы применяете необходимые изменения панели.

protected void Page_Load(object sender, EventArgs e)
{
    if (Session["boolSignOn"] != null && (bool)Session["boolSignOn"] == true)
    {
       // get the Session["panelOpen"] and do the changes you need.
    }
}

На вашей домашней странице Page_Unload, если Session ["boolSignOn"] имеет значение, и это правда, что вы очищаете как Session ["boolSignOn"], так и Session ["openPanel"],

protected void Page_Unload(object sender, EventArgs e)
{
    if (Session["boolSignOn"] != null && (bool)Session["boolSignOn"] == true)
    {
        Session["boolSignOn"] = null;
        Session["openPanel"] = null;
    }
}

Надеюсь, это то, что вы ищете.

...