0

我的注销按钮的代码如下所示:

protected void ButtonLogout_Click(object sender, EventArgs e)
{
    Session["login"] = null;        
}

我的页面的 onLoad 事件如下所示:

protected void Page_Load(object sender, EventArgs e)
{
    if ((string)Session["login"] != null)
    {
       ButtonLogout.Visible = true;
       // (...)
    }
    else
    {
        ButtonLogout.Visible = false;
        // (...)
    }
}

我对这件事正常工作有疑问。我不知道发生了什么,所以我在 ButtonClick 和 PageLoad 事件中都设置了断点。我发现 PageLoad 事件首先执行(原文如此!),这就是为什么 ButtonLogout 在单击它后没有隐藏的原因。我可以简单地在 ButtonClick 事件中刷新页面,但我不确定单击 1 次按钮后两次加载页面是否正常。难道没有其他方法可以解决这个问题吗?谢谢。

4

2 回答 2

2

问题在于页面生命周期以特定方式执行。基本来说,它是:

  • Page_Load
  • 事件火
  • 预渲染

可以找到更多详细信息 - http://msdn.microsoft.com/en-us/library/ms178472.ASPx

如果您正在设置控件的可见性,您可以在 Pre_Render 页面事件中进行设置,此时按钮事件将触发并设置您需要的内容。

于 2013-04-03T11:29:55.567 回答
0

我建议您使用 asp.net LoginStatus 来处理它。并且不要忘记在用户注销时清除会话。检查使用 LoginName 和 LoginStatus 控件将对您有所帮助。

protected void HeadLoginStatus_LoggingOut(object sender, LoginCancelEventArgs e)
    {
        Session.Clear();//It clears the session when the user logged out.
        Session.Abandon();
        FormsAuthentication.SignOut();
    }
于 2013-04-03T11:42:30.277 回答