【问题标题】:ASP.NET master page hyperlink controls not workingASP.NET 母版页超链接控件不起作用
【发布时间】:2013-06-06 20:21:24
【问题描述】:

我是 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";
        }
    }


}

【问题讨论】:

标签: asp.net hyperlink master-pages


【解决方案1】:

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

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

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

我也不认为你的 pre-init 正在触发。

【讨论】:

  • 我会尝试这种方法,看看效果如何。谢谢。
【解决方案2】:

当 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";
        }

【讨论】:

    猜你喜欢
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    • 2017-06-29
    • 2010-09-17
    • 1970-01-01
    相关资源
    最近更新 更多