【问题标题】:Changes to Site.Master page do not persist for a session对 Site.Master 页面的更改不会在会话中持续存在
【发布时间】: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

【问题讨论】:

    标签: asp.net


    【解决方案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 非常棒,值得花点时间学习它。上面的方法是重新发明轮子。希望这是有道理的!
    猜你喜欢
    • 1970-01-01
    • 2017-12-28
    • 1970-01-01
    • 2016-04-13
    • 2017-09-08
    • 2014-01-28
    • 1970-01-01
    • 2016-01-20
    • 2017-02-08
    相关资源
    最近更新 更多