Question

Lorsque je navigue sur un site Web utilisant MasterPages, l'application sait-elle sur quelle page je suis? Si oui, le stocke-t-il dans un objet auquel je peux accéder?

La raison pour laquelle je pose cette question est pour pouvoir remplacer ceci:

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

Avec une solution plus élégante pour la navigation, qui met en surbrillance le lien vers la page en réglant l'ID de l'élément de liste sur "en cours". Actuellement, chaque page recrée la navigation avec l'ID de son lien respectif défini sur courant.

Était-ce utile?

La solution

Je suis d’accord avec Chris: utilisez un contrôle pour gérer l’affichage de ce menu et indiquez-lui quel lien doit être mis en surbrillance. Voici une méthode que j'utilise régulièrement. Cela peut devenir plus complexe si vous avez plusieurs pages nécessitant le même style de lien, mais vous avez l’idée.

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

Autres conseils

Pour obtenir l'URL de la demande actuelle dans la page maître, procédez comme suit:

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

Je vous recommande également de déplacer votre navigation dans la page maître au lieu de la page de contenu. Cela facilitera la maintenance / l'accès.

Oui, utilisez le code ci-dessous dans votre fichier maître. Il vous donnera le nom de la page de contenu.

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

Vous devriez pouvoir obtenir la page en accédant à la propriété Page. IE:

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

Vous utiliseriez probablement l'un des chemin de demande . depuis la page maître pour définir le courant. J'aurais probablement aussi une propriété sur la page principale pour la remplacer, de sorte que les pages sans liens ou quelque chose puisse définir quelque chose de raisonnable.

Cela a fonctionné pour moi de cette façon - Merci Jared

C’est ce que j’ai fait pour que notre menu de navigation mette en évidence l’élément de menu actuel de la page que nous consultons. Le code est dans la page maître. Vous obtenez essentiellement le chemin du fichier (façon de Jared) Nous utilisons les " ~ " dans nos liens, j'ai donc dû éliminer cela. Itérez la collection menuItems du contrôle Menu. Comparez la propriété browseUrl.

(Je ne suis pas le meilleur codeur et même pire à expliquer - mais ça marche et ça me tracasse!)

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];

Vous pouvez également rechercher un titre de page si vous avez défini un titre spécifique pour la page enfant à la place de la page principale, essayez:

this.Page.Title

J'espère que ça aide.

c'est en 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");

Le contrôle de navigation, et non la page maître, devrait indiquer quelle page est actuellement en surbrillance.

Soit la page chargée doit indiquer à l'élément de navigation de qui il s'agit, soit le contrôle de navigation lui-même doit en garder la trace.

Le fait est que les pages maîtres sont supposées être simplement un détenteur dans lequel le contenu est affiché. Elles ne sont pas censées contrôler quoi que ce soit.

essayer

this.Page.Master

Vous obtiendrez la page maître de la page en cours.

Il y a aussi le Request.RawURL

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top