对 Site.Master 页面的更改不会在会话中持续存在
Posted
技术标签:
【中文标题】对 Site.Master 页面的更改不会在会话中持续存在【英文标题】:Changes to Site.Master page do not persist for a session 【发布时间】:2014-05-27 00:14:25 【问题描述】:下午好。
我正在使用 ms vwd 2010 express 处理以下网页: Site.Master/Site.Master.vb、Login.aspx/Login.aspx.vb
Site.Master 有以下内容:
<div class="loginDisplay">
<asp:Label ID="WelcomeLabel" runat="server" Text=""></asp:Label>
<asp:HyperLink ID="LogHyperlink" navigateurl="~/Account/Login.aspx" runat="server">Log In</asp:HyperLink>
</div>
我在 Login.aspx.vb 程序中有如下代码:
Dim WelcomeLabel As New Label
WelcomeLabel = CType(Master.FindControl("WelcomeLabel"), Label)
WelcomeLabel.Text = "Welcome " & OLEdr.Item("ho1FirstName")
Dim LogHyperlink As New HyperLink
LogHyperlink = CType(Master.FindControl("LogHyperlink"), HyperLink)
LogHyperlink.Text = "Log Out"
LogHyperlink.NavigateUrl = "Exit.aspx"
当用户成功登录时,LogHyperlink 会从 Log In 更改为 注销并且 WelcomeLabel 包含文本“欢迎”和人的名字。这一切都很好。
但是,该代码仅适用于 Login.asp 页面。当我导航到另一个 页面,比如 About.aspx(也使用 Site.Master),Site.Master 页面回到了原始页面,我丢失了代码所做的更改。
如何使更改在所有会话中持续存在 网页?所有网页都使用 Site.Master。
谢谢。 tfj
【问题讨论】:
【参考方案1】:查看LoginView 控件。看来您正在尝试准确实现该控件的用途。它允许您根据用户是否登录显示不同的信息。
【讨论】:
谢谢你,但我看过它并决定不使用它。我真的不想花时间学习所有关于登录控件的知识。我将使用我自己的数据库进行验证,并且我需要启用/禁用菜单项。我以前没有使用过母版页。如果我想做的事情不可行,请告诉我。【参考方案2】:这是可行的(虽然我不推荐)。在 Login.aspx.vb 中添加一行来保存会话中的用户名:
Session("LoggedInUser") = OLEdr.Item("ho1FirstName").ToString()
Dim WelcomeLabel As New Label
WelcomeLabel = CType(Master.FindControl("WelcomeLabel"), Label)
WelcomeLabel.Text = "Welcome " & OLEdr.Item("ho1FirstName")
Dim LogHyperlink As New HyperLink
LogHyperlink = CType(Master.FindControl("LogHyperlink"), HyperLink)
LogHyperlink.Text = "Log Out"
LogHyperlink.NavigateUrl = "Exit.aspx"
在 Site.Master.vb 中,从 Page_Load 中的 Session
加载用户名:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
If Not Session("LoggedInUser") Is Nothing Then
WelcomeLabel.Text = Session("LoggedInUser").ToString()
LogHyperlink.Text = "Log Out"
LogHyperlink.NavigateUrl = "Exit.aspx"
Else
LogHyperlink.Text = "Log In"
LogHyperlink.NavigateUrl = "~/Account/Login.aspx"
WelcomeLabel.Text = ""
End If
End Sub
【讨论】:
谢谢你,afzalulh!昨晚深夜,我尝试了一个 Session 变量很多 谢谢你,afzalulh!昨晚深夜,我尝试了一个 Session 变量,就像您在示例中展示的那样,它起作用了。我对自己很满意。但既然你说你不推荐它,我很担心。你能解释一下为什么不推荐它吗? tfjLiginView
非常棒,值得花点时间学习它。上面的方法是重新发明***。希望这是有道理的!以上是关于对 Site.Master 页面的更改不会在会话中持续存在的主要内容,如果未能解决你的问题,请参考以下文章