0

ASP.NET (および Web 開発全般) は初めてです。何らかの理由で、ASP.NET マスター ページでハイパーリンク Web コントロールが機能しません。

ユーザーセッションが現在ログインしている場合、「ログイン」ハイパーリンクテキストを「ログアウト」(およびそのnavigateURL)に変更できるように、それらをWebコントロールとして使用します。

誰でも問題を見つけることができますか?

コードは次のとおりです。

<!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

セッションが 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 に答える
1

ログイン メニュー リンクを asp LoginView コントロールに置き換えてみませんか? ログイン ページを指すログイン リンクを含む Anonymous テンプレートと、LoginStatus を追加することにより、ログアウト リンクを含む LoggedIn テンプレートを追加できます。ログインしたユーザーに歓迎を提供できます。ああ、それはまた、すべての事前初期化とセッション追跡を取り除くこともできます.

ユーザー ID isAuthenticated を使用して、そのセッションがログインしているかどうかを判断できます。

また、ログイン ページに別のマスター ページを使用する場合は、ログイン ページ用に別のマスター ページを作成するか、別のマスター ページを指すようにします。

また、あなたの pre-init が発火しているとは思いません。

于 2013-06-11T05:00:07.257 に答える