begin process at 2012 05 28 04:02:41
  Trouver un code source :
 
dans
 
Accueil > Forum > 

ASP.NET

 > 

WebForms

 > 

WebControl

 > 

probleme de siteMap et treeview crée dynamiquement


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

probleme de siteMap et treeview crée dynamiquement

lundi 3 août 2009 à 15:20:52 | probleme de siteMap et treeview crée dynamiquement

kaygee

Hello,

J'ai un souci avec mon siteMap source de mon treeview.

Je crée un string XML contenant mon siteMap crée sur base d'une DB sqlserver.

Tout fonctionne bien, gros problème, c'est qu'au lieu d'avoir en titre de menu le title de mon sitemap et en lien, l'url j'ai le mot siteMapNode qui s'affiche partout.

Pourriez-vous m'aider merci?


voici mon code

Code :


Code ASP.NET :
 Private Function buildXMLMenu(ByRef oDataSet As DataSet) As String

'Dim parentNode As TreeNode
' Dim childNode As TreeNode
Dim sortSubMenu As String
sortSubMenu = "LevelOrder ASC"
Dim selectSubMenu As String

Dim navigateString As StringBuilder = New StringBuilder()
' En-tete du fichier Site Map File
navigateString.Append("<?xml version=""1.0"" encoding=""utf-8"" ?>")
navigateString.Append("<siteMap xmlns=""http://schemas.microsoft.com/AspNet/SiteMap-File-1.0"">")

For Each parentRows As DataRow In oDataSet.Tables("Menu").Select("MenuLevel = 0", sortSubMenu)
selectSubMenu = "UpperLevel = " & parentRows.Item("ID").ToString

' création du sous-menu si existant
If oDataSet.Tables("Menu").Select(selectSubMenu, sortSubMenu).Length > 0 Then
' menu parent avec menu enfant
navigateString.Append("<siteMapNode title=""" & parentRows.Item("libla") & """>")
For Each childRows As DataRow In oDataSet.Tables("Menu").Select(selectSubMenu, sortSubMenu)
navigateString.Append("<siteMapNode url=""" & childRows.Item("MenuAction") & """ title=""" & childRows.Item("libla") & """ />")
Next
navigateString.Append("</siteMapNode>")
Else
' Menu parent sans menu enfant
navigateString.Append("<siteMapNode url=""" & parentRows.Item("MenuAction") & """ title=""" & parentRows.Item("libla") & """ />")
End If
Next
navigateString.Append("</siteMap>")
buildXMLMenu = navigateString.ToString
End Function


Code :


Code ASP.NET :
  Private Sub buildMenu()

' fonction pour attribuer au menu les informations récupérée par l'objet createMenu sous forme XML
Dim menuDataSource As XmlDataSource = New XmlDataSource()
menuDataSource.ID = "MainMenu"
menuDataSource.Data = Session("siteMapMenu")
menuDataSource.DataBind()

mnuPerso.DataSource = menuDataSource
mnuPerso.DataBind()

End Sub



lundi 3 août 2009 à 17:18:31 | Re : probleme de siteMap et treeview crée dynamiquement

gabj


Bonjour,

Tu peux réaliser ton siteMap dynamiquement en utilisant les objets ASP.Net.

1/ tu crées un SiteMapDataSource

Code Visual Basic :

<asp:SiteMapDataSource ID="SitMapDataSource1" runat="server" />


2/ Tu crées ton Treeview que tu bindes à ton SiteMapDataSource
Code Visual Basic :

<asp:TreeView ID="treeNav" runat="server" SourceID="SiteMapDataSource1" />


3/Tu dois modifier le provider de ton siteMapDataSource pour pouvoir récupérer tes données à partir d'une base de données :


    - Je te conseille de créer une table dans laquelle tu stockeras tes tuples du siteMap
    - Je te conseille également de créer une procédure stockée qui te renverra l'ensemble des informations à la création dynamique de ton siteMap



A partir de ce moment tu peux commencer à créer un provider spécifique à ton siteMap, pour cela tu dois faire dériver la classe de ton provider personnalisé de

Code C# :
StaticSiteMapProvider


4 / Tu mets à jour ton Web.Config pour le chargement des constantes d'initialisation de ton siteMapProvider :
Code XML :


<system.web>
<siteMap defaultProvider="SqlSiteMapProvider">
<providers>
<add name="SqlSiteMapProvider" type="SqlSiteMapProvider"
providerName="System.Data.SqlClient"
connectionString="Ta Connection"
storedProcedure="Ta Procedure Stockée" />
</providers>
</siteMap>
...
</system.web>



5/ A partir de maintenant tu peux surcharger ta méthode substituée Initialize de ta classe de base (dans ce cas StaticSiteMapProvider). Tu as un exemple de code dans la msdn.

Bon courage

Jérôme GABRIEL
MCTS ASP.Net


mardi 4 août 2009 à 11:01:20 | Re : probleme de siteMap et treeview crée dynamiquement

kaygee

Pas mal du tout et surtout très optimisé, mais mon souci à ce niveau c'est que le menu se construit en fonction de critère défini par le type de client et les autorisations dont il dispose.

je peux créer une storedprocedure mais je dois pouvoir lui passer nombres de paramètre qui déterminerons le visage de mon menu

mardi 4 août 2009 à 11:09:17 | Re : probleme de siteMap et treeview crée dynamiquement

kaygee

De plus mon intention en plaçant mon sitemap dans une variable de session c'est que je ne veux pas devoir à chaque page et chaque refresh me reconnecter à ma db.

Donc en gros je créais mon siteMap lors de mon identification, et mon menu qui se trouve dans ma master page prend pour base cette variable de session plutot que de relancer chaque fois ma storedprocedure.

mais si tu as une meilleur solution

merci

mardi 4 août 2009 à 11:38:38 | Re : probleme de siteMap et treeview crée dynamiquement

gabj


Bonjour,

Entre stocker des sitemaps par Session et appeler la meme procedure stockée, il faudrait voir quel est le plus optimisé !

Mais si tu passes par de l'identification ASP.Net je te conseillerai vivement d'utiliser les roles et de stocker tes sitemap par role dans le cache de ton application web (le cache te permet de partager tes sitemaps entre toutes les sessions et augmente les performances de ton application web). Du type:

Code C# :

private static string role = "role";
protected void Page_Load(object sender, EventArgs e)
{
SiteMap map;

if (User.IsInRole(role))
{
map = GetSiteMapByRole();
}
}

private static SiteMap GetSiteMapByRole()
{
return GetCacheSiteMap();
}

private static SiteMap GetCacheSiteMap()
{
if (HttpContext.Current.Cache[role] != null)
{
return (SiteMap)HttpContext.Current.Cache[role];
}
else
{
//Appel de ta Proc Stock par la méthode GetdbSiteMap() et tu mets ton résultat immédiatement en cache
return (SiteMap)HttpContext.Current.Cache[role] = GetdbSiteMap();
}
}

mardi 4 août 2009 à 12:55:45 | Re : probleme de siteMap et treeview crée dynamiquement

kaygee

J'y ai déjà penser à stocker les sitemaps, mais le problème c'est que les combinaisons sont tellement nombreuses et diverses et en perpétuel changement.

Pour résumer le problème, je suis en train de faire passer des pages asp over-pourrie en asp.net en optimisant au maximum le code et les performances.

hors je ne peux pratiquement pas toucher à la db existante

avec une db du genre

id lien nom lienparent

le lienparent contient l'id du parent évidement pour permettre la création du sous-menu.

je dois donc cogité pour trouver LA meilleur solution sans devoir créer une liste de sitemaps.

j'y ai déjà perdu quelques neurones ;-)

mardi 4 août 2009 à 14:28:22 | Re : probleme de siteMap et treeview crée dynamiquement

gabj

Re-bonjour,

Je pense que tu n'as pas bien compris ma réponse. Durant l'identification (je te conseille d'utiliser les authentifications ASP.Net), tu dois appliquer à chacun de tes utilisateurs un role sur ton application (tu peux avoir 1 à n utilisateur pour un role).
A partir de là tu peux gérer tes sitemaps par role(tu peux affecter les roles directement par l'attribut roles de chacun des siteMapNode de ton fichier avec l'extension .siteMap).
Si tu as des besoins plus spécifiques par utilisateur, tu peux également utiliser les profiles ASP.Net. Maintenant, je ne te cacherai pas que si tu as une application web avec authentification sans règle de sécurité par groupe d'utilisateur, je pense qu'il faudrait sans doute revoir la stratégie de sécurité du site.

Bon courage

Jérôme GABRIEL
MCTS ASP.Net

mercredi 5 août 2009 à 10:30:44 | Re : probleme de siteMap et treeview crée dynamiquement

kaygee

malheureusement le problème est la, je ne peux pas utiliser l'authentification .net, comme je l'ai dis avant je dois utiliser ce qui se trouve à ma dispo sans modifier sinon je risque la lapidation sur la place publique.

Les roles et authorisation sont géré par une DLL, je recois en le role du client ainsi que des switch pour authorisé ou non certain menu.

C'est affreusement barbare mais ca a fait ses preuves et donc c'est du "touche pas a ca ptit con" ;-)

c'est un peu pour cela que j'ai trouvé ma méthode la plus efficace vu le contexte.

Pouvoir gérer des rôles vu les infos que je recois releve du défi.



Cette discussion est classée dans : menu, code, append, sitemap, navigatestring


Répondre à ce message

Sujets en rapport avec ce message

Comment utilise le "xmlhttprequest"? [ par pierrot10 ] Bonjour dans mon code j'aurai un onclick="Menu(menu2);" ceci fera appeelle a une fonction: function Menu(m){ if (m==menu){ }else if(m==menu1){ <!-- Conexion à une BD sous JavaScript ! ! ! [ par richch ] Bonjour, J'essaye de construire un menu pour mon site web et en fait je voudrais savoir s'il y a une possibilité d'insérer du Menu web géré via Web.sitemap [ par carlos95 ] Bonjour,J'essaie de mettre en place un menu se basant sur le fichier web.sitemap, mais visual studio 2005 détecte une erreur de syntaxe lorsque je sai 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 Developper une treeview [ par Skinou ] Bonjour a tous, Je suis débutant en ASP.NET et là je suis en train de faire un petit site. J'ai fait un fichier web.sitemap pour gérer l'arborecence d Inserer un bouton a partir du code behind [ par welwel86 ] Bonjour,Je développe actuellement un site web en utilisant le langage C#, le menu du site est 100% dynamique. Je veux alors insérer les boutons du men sitemapPath et menu [ par zoullou007 ] Bonjour, voilà mon soucis: J'ai un fichier Web.sitemap qui défini l'architecture de mon site. A un endroit j'ai un noeud avec l'URL: ListeClient.aspx Conseil sur les Sitemap [ par kaygee ] Hello,Je voudrais quelques conseils sur l'utilisation des sitemap.En quelques mots, j'ai un site en 4 langues, le modèle est le meme pour toutes les p menu+sitemap [ par pigeon11 ] j'ai créé un menu et je lui appliqué un web.sitemapLe problème c'est que lors du clique sur un élément du menu la page indiquée sur l'url s'affiche ma Dropdownlist modification design [ par ulmo22 ] Bonjour je ne sais pas si je suis au bonne endroit. Mais j'ai un souci sous ASP , je débute tout juste dans dedans . Voila j'ai crée une Dropdownlist


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,437 sec (4)

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