我正在使用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()
方法,但是当页面完全加载时,我试图删除会话变量。
请建议!
答案 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();这有用吗?