对 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 变量,就像您在示例中展示的那样,它起作用了。我对自己很满意。但既然你说你不推荐它,我很担心。你能解释一下为什么不推荐它吗? tfj LiginView 非常棒,值得花点时间学习它。上面的方法是重新发明***。希望这是有道理的!

以上是关于对 Site.Master 页面的更改不会在会话中持续存在的主要内容,如果未能解决你的问题,请参考以下文章

在 psql shell 中所做的更改不会显示在 Datagrip 会话中

会话更改时不调用流星助手

如何更改会话数据并保持在同一页面上?

会话数据在 Web 主机上变得混乱

对 CSRF 保护策略感到困惑

Laravel 4会话不会在页面加载过程中持续存在