Configuration du control menu (a:active ou itemSelected)

Résolu
cs_ordiminnie Messages postés 29 Date d'inscription vendredi 10 octobre 2008 Statut Membre Dernière intervention 22 juin 2009 - 21 janv. 2009 à 17:31
cs_ordiminnie Messages postés 29 Date d'inscription vendredi 10 octobre 2008 Statut Membre Dernière intervention 22 juin 2009 - 23 janv. 2009 à 18:16
Bonjour,


Je pose ma question aux habitués de asp.net et du controle menu. Mais
les autres aussi peuvent répondre...toutes les contributions sont les
bienvenues ! :-)


Ma navigation est en deux parties, donc deux menus. Le premier est
statique, il propose les noeuds racines de mon sitemap. Le deuxième est
dynamique, il propose les noeuds de niveau 2 (les noeuds enfants donc).
C'est le même principe que là. (sauf que je travaille pas en flash)


J'applique un sytle <StaticMenuSelectedStyle ForeColor= "red" /> à mon premier menu.

Voila le problème: les items racines qui n'ont pas d'enfant restent
bien en rouge uen fois que la page est chargée mais ceux qui ont des
noeuds enfants reviennent en "statut" normal.

Comment faire pour faire que mes noeuds parents restent en selected ? J'ai essayé cette bidouille sans succès:

je mets une class

<StaticMenuItemStyle cssclass ="StaticMenuItemStyle" />

puis dans le css :

.StaticMenuItemStyle a:active

{color:red}


Pour illustrer, vous pouvez voir ce site, la navigation est en flash mais j'essaie de  faire le même rendu (au niveau des onglets) en .net et css.


Merci !

14 réponses

cs_ordiminnie Messages postés 29 Date d'inscription vendredi 10 octobre 2008 Statut Membre Dernière intervention 22 juin 2009
23 janv. 2009 à 16:41
Hourra ! ça fonctionne !
J'ai finalement compris (grâce à toi : merci beaucoup de toutes tes explications forts utiles !) ;
 voici mon code (j'ai encore une petite question à la fin)

--> Pour le menu de niveau 1
 protected void PrincipalMenu_PreRender(object sender, EventArgs e)
    {
        foreach (MenuItem myItem in PrincipalMenu.Items)
        {
            if ((myItem.NavigateUrl) == (Request.Path))  
            {
                myItem.Selected = true;   
            }
            else if ((myItem.NavigateUrl) == ((Request.Path) + "#"))
            {
                myItem.Selected = true;
            }
        }
    }

--> Pour le menu de niveau 2
    protected void SubMenu_PreRender(object sender, EventArgs e)
    {
        foreach (MenuItem myItem in SubMenu.Items)
        {
            if ((myItem.NavigateUrl) == (Request.Path))
            {                myItem.Text "" + myItem.Text + ""; //même avec "" ça ne fonctionne pas. encore moins avec myItem.selected true;
                SiteMapNode myNode = SiteMap.CurrentNode;
                SiteMapNode myParentNode = myNode.ParentNode;
                string myUrl = myParentNode.Url;
                foreach (MenuItem myParentItem in PrincipalMenu.Items)
                {
                    if (myParentItem.NavigateUrl == myUrl)
                    {
                        myParentItem.Selected = true;
                    }
                }  
            }
        }
   }
   
Tu remarques peut être que pour les MenuItems du premier menu, j'ai pu simplement mettre la propriété selected à true puis j'applique une présentation via la balise <StaticSelectedStyle BackColor="#FF9933" />  qui se trouve dans le comosant menu.

Par contre, pour les items du deuxième menu, le même pp ne fonctionne pas (balise  <DynamicSelectedStyle />) !Je suis obligé d'injecter l'html pur (je ne peux pas injecter une classe css.) Aurais-tu une explication à cela ? Normalement je voulais utiliser des images de fond.

Un grand merci pour ton aide. J'attends ton avis sur ce dernier problème et je mettrais ce topic en accepté.
3
Rejoignez-nous