简单的登录页面和基于会话变量的动态隐藏控件
本文关键字:会话 变量 隐藏 控件 动态 于会话 登录 简单 | 更新日期: 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;