質問

MasterPagesを使用してWebサイトをナビゲートすると、アプリケーションは現在のページを認識していますか?その場合、アクセスできるオブジェクトに保存しますか?

私が尋ねている理由は、これを置き換えるためです:

//masterpage 
<div id="nav_main">
   <ul><asp:ContentPlaceHolder ID="navigation" runat="server">                    
   </asp:ContentPlaceHolder></ul>
</div>

//content page(s)
<asp:Content ContentPlaceHolderID="navigation" ID="theNav" runat="server">
   <li><a href="default.aspx">Home</a></li>
   <li id="current"><a href="faq.aspx">FAQ</a></li>
   <li><a href="videos.aspx">Videos</a></li>
   <li><a href="#">Button 4</a></li>
   <li><a href="#">Button 5</a></li>
</asp:Content>

ナビゲーションのより洗練されたソリューションでは、リストアイテムのIDを「現在」に設定することにより、ページへのリンクが強調表示されます。現在、各ページは、それぞれのリンクのIDを最新に設定してナビゲーションを再作成します。

役に立ちましたか?

解決

Chrisに同意します。このメニューの表示を制御するコントロールを使用して、強調表示するリンクを認識させます。これは私が定期的に使用する方法です。異なるスタイルの同じリンクを必要とする複数のページがある場合、より複雑になる可能性がありますが、アイデアは得られます。

Dim thisURL As String = Request.Url.Segments(Request.Url.Segments.Count - 1)
Select Cast thisUrl
   Case "MenuItem1.aspx"
       lnkMenu1.CssClass = "Current"
   Case "MenuItem2.aspx"
       lnkMenu2.CssClass = "Current"
End Select

他のヒント

マスターページ内から現在のリクエストURLを取得するには、次のようにします。

string s = this.Page.Request.FilePath; // "/Default.aspx"

また、コンテンツページではなく、マスターページにナビゲーションを移動することをお勧めします。これにより、メンテナンスやアクセスが容易になります。

はい、マスターファイルで次のコードを使用します。コンテンツページ名が表示されます。

Page.ToString().Replace("ASP.","").Replace("_",".")

Pageプロパティにアクセスしてページを取得できるはずです。 IE:

string type = this.Page.GetType().Name.ToString();

リクエストパスのいずれかを使用することになるでしょう。マスターページ内から現在を設定します。マスターページにそれをオーバーライドするプロパティもあると思います。そのため、リンクなどのないページが適切な値に設定できるようになります。

この方法でうまくいきました-ありがとうJared

これは、表示しているページの現在のメニュー項目を強調表示するためにナビゲーションメニューを取得するために行ったことです。コードはマスターページにあります。 基本的にファイルパスを取得します(Jaredの方法) &quot;〜&quot;を使用します私たちのリンクでそれを取り除く必要がありました。 MenuコントロールのmenuItemsコレクションを繰り返します。 navigateUrlプロパティを比較します。

(私は最高のコーダーではなく、説明するのはさらに悪い-しかし、それはうまくいき、私はそれでかなり苦労しました!)

protected void HighlightSelectedMenuItem()
    {
        string s = this.Page.Request.FilePath; // "/Default.aspx"
        string nav;
        if (s.Contains("~"))
        {
            s = s.Remove(s.IndexOf("~"), 1);
        }

        foreach (MenuItem item in navMenu.Items)
        {
            if (item.NavigateUrl.Contains("~"))
            {
                nav = item.NavigateUrl.Remove(item.NavigateUrl.IndexOf("~"), 1);
                if (s == nav)
                {
                    item.Selected = true;
                }
            }

        }
    }
string s = this.Page.GetType().FullName;
string[] array = s.Split('_');
int count = array.Count<String>();
string currentPage = array[count - 2];

代わりに、マスターページtryの代わりに子ページに特定のタイトルを設定した場合、ページタイトルを検索できます:

this.Page.Title

お役に立てば幸いです。

これはC#にあります

string thisURL = Request.Url.Segments[Request.Url.Segments.Length - 1];
        if (thisURL.ToLower()== "default.aspx") li1.Attributes.Add("class","yekan active");
        if (thisURL.ToLower() == "experts.aspx") li2.Attributes.Add("class", "yekan active");

現在強調表示されているページは、マスターページではなくナビゲーションコントロールが管理する必要があります。

読み込まれたページは、ナビゲーションアイテムにそれが誰であるかを通知するか、navコントロール自体が追跡する必要があります。

ポイントは、マスターページは単にコンテンツが表示されるホルダーであると想定されていることです。マスターページは何も制御することは想定されていません。

試用

this.Page.Master

現在のページのマスターページが表示されます。

Request.RawURLもあります

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top