Kennt ein Masterpage, welche Seite angezeigt wird?
-
06-07-2019 - |
Frage
Wenn ich auf einer Website navigieren Verwendung Masterpages, weiß die Anwendung, welche Seite ich bin auf? Wenn ja, speichert sie es in einem Objekt kann ich zugreifen?
Der Grund, warum ich frage ist, so kann ich diese ersetzen:
//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>
Mit einer eleganteren Lösung für die Navigation, die den Link zu der Seite beleuchtet durch die Listenposition der ID-Set mit auf den „aktuelle“. Zur Zeit jede Seite erstellt die Navigation mit seinem jeweiligen ID-Set Link zum Strom.
Lösung
würde ich mit Chris überein: eine Steuer verwendet Anzeige dieses Menüs zu handhaben und ihm bewusst zu machen, was Link hervorgehoben werden soll. Hier ist eine Methode, die ich regelmäßig verwenden. Es kann immer komplexer werden, wenn Sie mehrere Seiten haben, die die gleiche Verbindung unterschiedlich gestalteten brauchen würde, aber Sie bekommen die Idee.
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
Andere Tipps
Um die aktuelle URL innerhalb der Master-Seite erhalten Sie tun würden:
string s = this.Page.Request.FilePath; // "/Default.aspx"
Ich empfehle auch Ihre Navigation in die Masterseite anstelle der Content-Seite zu bewegen. Dadurch wird es leichter zu pflegen / Zugang.
Ja, Verwenden Sie den folgenden Code in Ihrer Master-Datei. Es wird Ihnen den Inhalt Seitennamen.
Page.ToString().Replace("ASP.","").Replace("_",".")
Es soll möglich sein, um die Seite zu erhalten, indem die Eigenschaft Seite zugreifen. IE:
string type = this.Page.GetType().Name.ToString();
Sie würden wahrscheinlich verwenden nur eine der Anforderungspfad innerhalb der Master-Seite, um den Strom zu setzen. Ich würde wahrscheinlich habe eine Eigenschaft auf der Masterseite es außer Kraft zu setzen, so dass die Seiten ohne Links oder etwas, das es zu etwas vernünftig einstellen könnten.
Es funktioniert für mich auf diese Weise - Dank Jared
Das ist, was ich tat unser nav-Menü gelangen den aktuellen Menüpunkt für die Seite zu markieren, die wir sehen. Der Code ist in der Masterseite. Sie erhalten im Grunde die Filepath (Jared Weg) Wir verwenden die „~“ in unseren Links so hatte ich, dass Streifen aus. Iterate die MenuItems Sammlung der Menüsteuerung. Vergleichen Sie die NavigateUrl-Eigenschaft.
(Ich bin nicht der beste Coder und noch schlimmer zu erklären - aber es funktioniert und ich war ziemlich chuffed mit ihm)
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];
Alternativ können Sie für Seitentitel suchen, wenn Sie anstelle von Masterpage versuchen, einen bestimmten Titel für das Kind Seite gesetzt haben:
this.Page.Title
Hoffe, es hilft.
Dies ist in 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");
Die Navigationssteuerung, nicht die Masterseite, zuständig sein sollte, welche Seite wird zur Zeit markiert.
Entweder ist die Seite, die geladen wird, soll den Navigationspunkt mitteilen, wer es ist, oder die nav Steuerung selbst sollte Spur davon halten.
Der Punkt ist, dass Masterseiten sollen, einfach ein Halter sein, dass der Inhalt in angezeigt wird. Sie nichts kontrollieren soll.
Versuch
this.Page.Master
Es wird Ihnen die Masterseite der aktuellen Seite bekommen.
Es gibt auch die Request.RawURL