begin process at 2012 05 27 20:36:07
  Trouver un code source :
 
dans
 
Accueil > Forum > 

ASP.NET

 > 

WebForms

 > 

WebControl

 > 

Configuration du control menu (a:active ou itemSelected)


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Configuration du control menu (a:active ou itemSelected)

mercredi 21 janvier 2009 à 17:31:24 | Configuration du control menu (a:active ou itemSelected)

ordiminnie

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 !
jeudi 22 janvier 2009 à 00:14:20 | Re : Configuration du control menu (a:active ou itemSelected)

ggtry

Bonsoir,

C'est normal, puisque les éléments statiques qui ont des enfants ne sont pas sélectionnés comme tels (c'est l'un de leurs enfants qui l'est).
Tu peux passer par l'événément MenuItemClick et modifier l'apparence du parent lorsqu'un enfant est sélectionné.
Le problème est que tu dois alors introduire l'html dans le .text de ton item (en tout cas, je ne vois pas comment faire autrement).
Ca fait très bidouille, mais sur un menu à deux niveaux (1 statique, 1 dynamique), tu peux donner la même valeur au text et à la value pour le static, puis, par exemple (en changeant ici le background du static lorsque tu cliques sur le sous-menu) :

Protected Sub Menu1_MenuItemClick(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.MenuEventArgs)
        For Each i As MenuItem In Menu1.Items
            i.Text = i.Value
        Next
        If Not e.Item.Parent Is Nothing Then
            e.Item.Parent.Text = "<span style='background-color:red';>" & e.Item.Parent.Text & "</span>"
        End If
    End Sub

Peut-être y a-t-il mieux, mais c'est une solution...

GGtry
jeudi 22 janvier 2009 à 11:27:06 | Re : Configuration du control menu (a:active ou itemSelected)

ordiminnie

Merci ggtry,

J'ai essayé ta solution mais je me bute à un autre problème : l'évènement onmenuitemclick ne se déclenche jamais... Si quelqu'un veut bien jeter un oeil à mon code, moi je ne vois pas....

Voici mon code pour le composant Menu :
                  <asp:Menu ID="SubMenu" runat="server" DataSourceID="SMDSsub"
                    MaximumDynamicDisplayLevels="1" Orientation="Horizontal"
                    DisappearAfter="-1" onmenuitemclick="SubMenu_MenuItemClick">

Puis dans le code-behind:
 protected void SubMenu_MenuItemClick(object sender, MenuEventArgs e)
    {
        e.Item.Parent.Text = "<span CssClass=\"StaticSelectedStyle\">" + e.Item.Parent.Text + "</span>";
    }

Voilà, je ne passe jamais sur l'évènement (avec un breakpoint) quand je clique sur les éléments du menu...quelqu'un sait d'où ça peut venir ? C'est tout ce qu'il y a de plus classique il me semble...

Merci

jeudi 22 janvier 2009 à 12:36:06 | Re : Configuration du control menu (a:active ou itemSelected)

ggtry

Bonjour,

Oui, désolé, je n'y avais pas pensé, mais puisque c'est un menu de navigation, tu dois avoir des navigateurl sur le sous-menu, et donc pas de postback... d'où le fait que l'événement menuitemclick n'est pas déclenché.
Autre solution, dans ce cas : sur le page_load, tu peux comparer en faisant une boucle le path de tes navigateurl avec le path de la page actuelle. Si il y a correspondance, tu donnes au parent de l'item qui a le bon navigateurl le format que tu veux.

GGtry
jeudi 22 janvier 2009 à 18:35:09 | Re : Configuration du control menu (a:active ou itemSelected)

ordiminnie

Ok je comprends l'idée mais je n'ai pas de navigateurl car mon menu est connecté à une SiteMapDataSource, lui-même connecté à un sitemap....  enfin j'imagine que je vais pouvoir récupérer les url du sitemap quand meme.
 Si tu as le nom de la fonction qui me permet de faire ça, ne te gêne pas pour me la donner ! :)

En tout cas, merci pour l'idée !

 
jeudi 22 janvier 2009 à 19:16:30 | Re : Configuration du control menu (a:active ou itemSelected)

ggtry

Le navigateurl est en effet défini automatiquement.
Sur le prerender du menu (plutôt que sur le Page_Load), tu peux essayer un truc comme cela :

For Each i As MenuItem In Menu1.Items
            For Each j As MenuItem In i.ChildItems
                If Server.MapPath(j.NavigateUrl) = Server.MapPath(Request.Path) Then
                   j.Parent.Text = "<span style='background-color:red';>" & j.Parent.Text & "</span>"
                End If
            Next
Next


GGtry
vendredi 23 janvier 2009 à 12:44:31 | Re : Configuration du control menu (a:active ou itemSelected)
vendredi 23 janvier 2009 à 12:51:47 | Re : Configuration du control menu (a:active ou itemSelected)

ordiminnie

Merci pour ces précisions !

J'ai cependant un problème : je n'arrive pas à accéder à un élément de menu de niveau 2 à partir du niveau 1 et vice-versa.
Pour mon menu de niveau 1 : myItem.ChildItems.Count() renvoie tj 0
Pour mon menu de niveau 2: myItem.Parent vaut tj null

Donc je ne peux pas préciser que lorsque un élément de niveau 2 est sélectionné, on doit appliquer une certaine présentation à son parent.

J'ai donc fait une boucle pour chacun des niveaux et je pensais dire à l'élément sélectionné de niveau 1 qu'il doit le rester jusqu'à ce qu'un autre élément de niveau 1 le soit. Comment formuler ça ? Je continue aussi de chercher mais si tu as une piste...

Voilà mon code:
--> 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.Text = "<span Style=\"color:blue;\">" + myItem.Text + "</span>";
            }
            else if ((myItem.NavigateUrl) == ((Request.Path) + "#"))
            {
                myItem.Text = "<span Style=\"color:blue;\">" + myItem.Text + "</span>";
            }
            
        }
    }

--> 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 = "<span Style=\"color:red;\">" + myItem.Text + "</span>";
                if (myItem.Parent != null) //ne rentre jamais dedans !
                {
                    myItem.Parent.Text = "<span Style=\"color:red;\">" + myItem.Parent.Text + "</span>";
                }
            }
            
        }
    }
vendredi 23 janvier 2009 à 14:36:44 | Re : Configuration du control menu (a:active ou itemSelected)

ggtry

Bonjour,

Je crois que je viens de comprendre que je n'avais pas compris ce que tu voulais faire... (mea culpa, je viens de regarder les liens que tu avais donné).
Je pensais que tu avais un seul menu avec une partie statique et une partie dynamique. En fait, tu as deux menus distincts, c'est bien ça ?
Si c'est cela, oublie ce qui a été dit jusqu'ici : avec deux menus qui n'ont qu'un seul niveau, tu n'auras ni enfant ni parent pour l'un et l'autre.
En fait, je ne vois pas trop comment tu fais pour lier ton menu2 à ton menu1 (tu fais ça dans une masterpage ?)
Mais si tu es capable de définir quel sous-menu doit être affiché dans ton menu2, tu dois savoir de quoi il dépend dans ton menu1 : donc, il suffit de mettre l'item en question du Menu1 à Menu1.Items(x).Selected, non ?

GGtry
vendredi 23 janvier 2009 à 15:03:02 | Re : Configuration du control menu (a:active ou itemSelected)

ordiminnie

Et bien même sans comprendre, tu m'as guidé sur une bonne voie, maintenant que tu vois bien ce que je veux faire, ça va être un jeu d'enfant ! :-)

En fait pour lier mes deux menus, c facile, j'ai un seul sitemap. Mais j'ai un sitemapdatasource par menu, et je dis à l'un : tu ouvres le niveau 1 et à l'autre : tu ouvres le niveau 2. Le reste est géré par asp.net, quand j'ouvre un item du menu 1 qui a des enfants, le menu 2 les affiche.
Le tout est dans la masterpage.

Donc, si je comprends bien, j'ai deux menus mais j'ai quand même les relations parents-enfants.
Un collègue me dit que c'est sûrement que le sitemap n'est pas accessible côté client...mais il sait pas m'en dire plus...Est-ce que tu connais une classe qui me permette d'accéder au sitemap ou d'envoyer son contenu côté client ?

merci !



1 2

Cette discussion est classée dans : menu, control, active, configuration, noeuds


Répondre à ce message

Sujets en rapport avec ce message

menu [ par zaytoun ] bonjour;je developpe un site web avec VS2005 commportant un menu (le controle menu).alors mon probleme est le suivant: je ne veux pas donner à l'utili User Control dynamique (C#) [ par ranouf ] Bonjour, Je cherche aussi à résoudre ce pb. J'ai mon menu qui mene à la page => "?page=employe" ou "?page=departement". Un coup je voudrai que ça m'a Usercontrol menu categorie ? [ par Alex001 ] Bonjour à tous,Je travail sur Dashcommerce open source et je souhaite modifié le menu catégorie.c'est un control user (*.ascx) composé d'un webcontrol click non exécuté sur un sous un sous-menu [ par Cool_01 ] Bonjour tout le monde,Je suis entrain de developper un site internet en utilisant ASP.NET avec C#.NETJ'ai un control Menu  pour lequel je  crée les Me Control public [ par Byrong ] Bonjour est-il possible de rendre un control public en asp vb.Net Car mon menu est dans ma page maitre et j'aimerais changer l'état des items, donc control web ascx et liens relatif [ par liliemumue ] Bonjour,J'utilise pour les pages mon site un control ascx qui charge le menu :( menu.ascx se trouve à la racine du site)Mon enu contient des images se Menu Dynamique [ par cbruno ] Bonjour à tous,Voilà je rencontre un pb avec un menu horizontal dynamique !j'ai récuperé des sources avec une base de donnée! Jusque là pas de soucis Pb envoi d'un mail sans composant avec ASP [ par vinsator ] Bonjour à tous,J'ai un pb avec la source asp qui s'intitule "envoi de mail en asp sans composant"(voici la source)Const cdoSendUsingMethod = "<A href= Configuration d'une plateforme dot.net [ par leo67000 ] J'ai Microsoft Visual Studio .NET 2003 sous Windows XP Pro et j'ai installer IIS;Lorsque je veux créer une application .NET j'ai le message d'erreur s Activedirectory [ par tcheko225 ] J'écris un programme qui doit communiquer avec ActiveDirectory de windows 2003 Server quand je le met il n'y'a pas d'erreur,voici le code: package rés


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,702 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales