MasterPageは表示されているページを知っていますか?
-
06-07-2019 - |
質問
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もあります