【发布时间】:2016-08-25 06:57:45
【问题描述】:
我正在尝试使用带有登录用户名的会话变量来更新其母版页顶部的标签。但是,当我从登录页面导航时,标签重置为默认值。有人可以解释热门以将其保留在页面上。如果这种显示用户名的方法最好?
【问题讨论】:
-
你能分享你正在使用的代码吗?标签没有持续存在的原因可能有很多。
标签: c# asp.net webforms master-pages asp.net-webpages
我正在尝试使用带有登录用户名的会话变量来更新其母版页顶部的标签。但是,当我从登录页面导航时,标签重置为默认值。有人可以解释热门以将其保留在页面上。如果这种显示用户名的方法最好?
【问题讨论】:
标签: c# asp.net webforms master-pages asp.net-webpages
如果您使用实际的HttpContext.Current.Session 状态变量来保存登录时的用户名,您可以按照@woodykiddy 的建议执行操作,并在代码隐藏中设置母版页的Page_Load() 方法设置@ Label 控件的 987654323@ 属性到会话存储的包含用户名的 string 变量。
Label1.Text = (string)HttpContext.Current.Session[YOUR_STORED_USERNAME_SESSION_KEY];
不过,在Site.Master 文件的.aspx 标记中放置一小段服务器端C# 代码会更容易。这可以通过将 C# 代码包装在特殊标签中来完成,如下所示:
<%:HttpContext.Current.Session[YOUR_STORED_USERNAME_SESSION_KEY]%>
这样,每次呈现母版页的标记时都会执行服务器端调用以查找您存储的会话状态变量,并且始终是最新的。
【讨论】:
假设您的母版页上有一个类似<asp:Label runat="server" ID="Label1" /> 的标签控件。
所以要显示用户名,您可以使用User.Identity.Name 属性将其值分配给标签控件。请注意,如果用户未通过身份验证,将返回一个空字符串。一个好的做法是应用IsAutheticated 检查并可能为匿名用户显示不同的标签文本。
protected void Page_Load(object sender, EventArgs e)
{
if (User.Identity.IsAuthenticated)
{
Label1.Text = User.Identity.Name; // username
}
else
{
Label1.Text = "Guest User";
}
}
【讨论】: