在C#中的Page OnInit / OnLoad上添加/删除会话变量

时间:2011-01-16 08:26:02

标签: c# asp.net session-variables

我正在使用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 个答案:

答案 0 :(得分:5)

好吧,我想我明白了。在您的第一个OnInit方法中,您只检查boolSignOn为空或空,但不是panelOpen

试试这个内容:

 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);
   }

}

我希望这可行。试一试

答案 1 :(得分:1)

好的,我们走了,

当用户按下登录链接或按钮时,您将值存储在案例中的会话变量中

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

用户登录和重定向到页面主页的页面会加载你检查Session [“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;
    }
}

我希望这就是你要找的东西。

答案 2 :(得分:1)

抱歉,我无法正确理解您的问题,但是我可以看到您的问题的蓝图,以下是您可能需要遵循的几个步骤,看看这是否可以解决您的问题。

1)当用户打开面板时(假设当用户点击打开面板时应该有点击事件)。因此,在click事件中添加代码,以使用打开的Panel ID创建和保存会话变量。

2)假设用户在将用户重定向回同一页面时已完成登录过程,您应该能够访问会话变量并在OnLoad事件中将其删除。

3)如果这不起作用,请尝试使用Server.Transfer将用户重定向回同一页面。

4)你也尝试过Session.Clear();这有用吗?