0

我是 ASP.NET(以及一般的 Web 开发)的新手。出于某种原因,在我的 ASP.NET 母版页中,超链接 Web 控件不起作用。

我希望它们作为 Web 控件,因此如果用户会话当前已登录,我可以将“登录”超链接文本更改为“注销”(以及它的 navigateURL)。

谁能找到问题?

这是代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head runat="server">
    <title></title>
    <link href="~/Styles/default.css" rel="stylesheet" type="text/css" />
    <asp:ContentPlaceHolder ID="HeadContent" runat="server">
    </asp:ContentPlaceHolder>
    <style type="text/css">
        .style1
        {
            width: 468px;
        }
    </style>
</head>
<body>
    <form id="Form1" runat="server">
    <div id="wrapper" runat="server">
        <div id="header" class="container" runat="server">
            <table style="width: 100%; height: 128px;" runat="server">
                <tr>
                    <td class="style1" runat="server">
                        WEBLINK
                    </td>
                    <td>
                        <asp:HyperLink ID="HyperLink1" runat="server">About</asp:HyperLink>
                    </td>
                    <td>
                        <asp:HyperLink ID="HyperLink2" runat="server" 
                            NavigateUrl="~/InterestPages/InterestNews.aspx">Interests</asp:HyperLink>
                    </td>
                    <td>
                        <asp:HyperLink ID="HyperLink3" runat="server">Blogs</asp:HyperLink>
                    </td>
                    <td>
                        <asp:HyperLink ID="loginLink" runat="server" NavigateUrl="~/Account/Login.aspx" 
                            ViewStateMode="Enabled">Login</asp:HyperLink>
                    </td>
                </tr>
            </table>
        </div>
    </div>
    <asp:ContentPlaceHolder ID="MainContent" runat="server">
            </asp:ContentPlaceHolder>
    </form>
</body>

这是我的 C# 母版页代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class SiteMaster : System.Web.UI.MasterPage
{
    private void Page_PreInit(object sender, EventArgs e)
    {
        if (Session["LoggedIn"] != null && (bool)Session["LoggedIn"] == true)
        {
            MasterPageFile = "~/LoggedIn.master";
        }
        else
        {
            MasterPageFile = "~/Site.master";
        }
    } 
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["LoggedIn"] != null && (bool)Session["LoggedIn"] == true)
        {
            loginLink.Text = "Log out";
            loginLink.NavigateUrl = "";
        }
        else
        {
            loginLink.Enabled = true;
            loginLink.Text = "Login";
            loginLink.NavigateUrl = "~/Account/Login.aspx";
        }
    }


}
4

2 回答 2

1

为什么不直接用 asp LoginView 控件替换您的登录菜单链接呢?您可以添加一个带有登录链接的匿名模板以指向您的登录页面,并通过添加 LoginStatus 来添加一个带有您的注销链接的 LoggedIn 模板。它让您向登录的用户表示欢迎。哦,它还可以让你摆脱所有 preinit 的东西和会话跟踪。

您可以使用用户身份 isAuthenticated 来确定该会话是否已登录。

如果您想为您的登录页面使用不同的母版页......您可以为您的登录页创建一个或将其指向另一个母版页。

我也不认为您的预初始化正在触发。

于 2013-06-11T05:00:07.257 回答
1

当 session 不是 null 时,你有空的 NavigateUrl 。所以请改变这一行loginLink.NavigateUrl = "#";

试试这个代码

if (Session["LoggedIn"] != null && (bool)Session["LoggedIn"] == true)
        {
            loginLink.Text = "Log out";
           loginLink.NavigateUrl = "#";
        }
else
        {
            loginLink.Enabled = true;
            loginLink.Text = "Login";
            loginLink.NavigateUrl = "~/Account/Login.aspx";
        }
于 2013-06-11T04:25:29.993 回答