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.

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top