Site.Master页面的更改不会持续存在于会话中

时间:2014-04-12 21:26:41

标签: asp.net

下午好。

我使用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从登录更改为 注销,WelcomeLabel包含文本&#34;欢迎&#34;和人的名字。一切正常。

但是,该代码仅适用于Login.asp页面。当我导航到另一个 页面,说About.aspx(也使用Site.Master),Site.Master 页面返回原始,我丢失了代码所做的更改。

如何在所有会话中保持会话的持续更改 网页?所有网页都使用Site.Master。

谢谢。 TFJ

2 个答案:

答案 0 :(得分:0)

查看LoginView控件。看来你正试图准确实现控件的用途。它允许您根据用户是否登录显示不同的信息。

答案 1 :(得分:0)

这是可行的(虽然我不推荐它)。在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