简单的登录页面和基于会话变量的动态隐藏控件

本文关键字:会话 变量 隐藏 控件 动态 于会话 登录 简单 | 更新日期: 2023-09-27 18:21:57

我想我的问题围绕着我对ASP.net中的页面生命周期没有一个舒适的把握——不幸的是。我读了很多书,但要吸收的东西太多了,对不起!无论如何,我试图制作一个超级简单的页面,作为我将在整个网站上做什么的概念证明,所以首先我会发布我所拥有的:

ASPX:

<asp:Button ID="btnLogin" runat="server" Text="Login" 
onclick="btnLogin_Click" />
<hr />
<asp:Label ID="Label1" runat="server" Text="Regular User"></asp:Label>
<asp:TextBox ID="TextBox1" runat="server">Regular User</asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Regular User" />
<hr />
<asp:Label ID="Label2" runat="server" Text="Admin"></asp:Label>
<asp:TextBox ID="TextBox2" runat="server">Admin</asp:TextBox>
<asp:Button ID="Button2" runat="server" Text="Admin" />

ASPX.CS:

    protected void Page_Load(object sender, EventArgs e)
    {
        String admin = (String)(Session["admin"]) ?? "";
        if (!admin.Equals("true"))
        {
            Label2.Visible = false;
            TextBox2.Visible = false;
            Button2.Visible = false;
        }
    }
    protected void btnLogin_Click(object sender, EventArgs e)
    {
        Session["admin"] = "true";
    }

因此,我希望在用户"成为管理员"(即会话变量更改)后隐藏所有随机控件。我的问题是控件在点击按钮后不会直接隐藏。我必须刷新或导航离开然后回来。在我之前处理过页面生命周期问题之后,我认为这就是问题的症结所在,也许我只需要在page_Load之外的函数中禁用可见性?无论如何,有一种100%更好、更简单的方法可以做到这一点,我对此持开放态度,所以请告诉我——谢谢!

简单的登录页面和基于会话变量的动态隐藏控件

Button.Click处理程序发生在Page.Load之后。这意味着当单击按钮时,您需要在设置会话变量后设置控件的状态,以便在单击按钮后的第一个页面呈现更改。

此外,ViewState将保留您在控件上设置的属性,因此您需要检查登录和注销条件,并在两个方向上设置正确的状态。

代码:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        Session["admin"] = null;
    }
    Set_Control_State();
}
protected void btnLogin_Click(object sender, EventArgs e)
{
    String admin = (String)(Session["admin"]) ?? "";
    if (admin.Equals("true"))
    {
        Session["admin"] = null;
    }
    else
    {
        Session["admin"] = "true";
    }
    Set_Control_State();
}
protected void Set_Control_State()
{
    String admin = (String)(Session["admin"]) ?? "";
    if (admin.Equals("true"))
    {
        btnLogin.Text = "Log Out";
        Label2.Visible = true;
        TextBox2.Visible = true;
        Button2.Visible = true;
    }
    else
    {
        btnLogin.Text = "Log In";
        Label2.Visible = false;
        TextBox2.Visible = false;
        Button2.Visible = false;
    }
}

您的点击将发生在Page_Load之后——显然您知道这一点。

你可以做隐藏按钮后点击控件会记住它们的状态。

Label2.Visible = false;
TextBox2.Visible = false;
Button2.Visible = false;