2009-11-25 6 views
1

Je n'ai pas beaucoup d'expérience avec les fichiers de sitemap contraignant au contrôle de menu dans ASP.Net et je voulais voir si cela était possible (sans beaucoup de plomberie personnalisée). J'utilise CSS Friendly Adapters pour obtenir un balisage propre. J'ai le CSS déjà préparé pour créer la navigation horizontale, où la barre supérieure représente la navigation principale, et la barre inférieure représente la sous-navigation.Contrôle de menu ASP.Net avec le fichier .sitemap

Essentiellement, je veux transformer ce fichier sitemap:

<?xml version="1.0" encoding="utf-8" ?> 
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" > 
    <siteMapNode url="~/Default.aspx" title="Home" description=""> 
     <siteMapNode url="~/Page1.aspx" title="Page1" description=""> 
      <siteMapNode url="~/SubPage1_1.aspx" title="Sub Page 1.1" description="" /> 
      <siteMapNode url="~/SubPage1_2.aspx" title="Sub Page 1.2" description="" /> 
     </siteMapNode> 
     <siteMapNode url="~/Page2.aspx" title="Page2" description=""> 
      <siteMapNode url="~/SubPage2_1.aspx" title="Sub Page 2.1" description="" /> 
      <siteMapNode url="~/SubPage2_2.aspx" title="Sub Page 2.2" description="" /> 
     </siteMapNode> 
    </siteMapNode> 
</siteMap> 

Dans ce balisage:

<div class="nav" > 
    <ul class="fixed"> 
     <li><a href="Page1.aspx" class="active">Page 1</a></li> 
     <li><a href="Page2.aspx">Page 2</a></li> 
    </ul> 
</div><!-- end .nav --> 

<div class="subnav" > 
    <ul class="fixed"> 
     <li><a href="SubPage1_1.aspx" class="active">Page 1.1</a></li> 
     <li><a href="SubPage1_2.aspx">Page 1.2</a></li> 
    </ul> 
</div><!-- end .subnav --> 

Où est lié la sous-navigation aux nœuds enfants de la navigation principale nœud dans le sitemap.

Est-il tort de s'attendre ce sera simple;)

+1

Pouvez-vous me donner l'idée comment afficher la navigation de second niveau comme horizontale. J'espère que vous avez un fichier CSS qui affiche la navigation de second niveau dans le style horizontal. –

+1

Il y a beaucoup d'exemples sur le web qui couvrent "la navigation CSS horizontale". La plupart utilisent des listes imbriquées pour créer la relation parent enfant. Dans mon cas, j'ai simplement utilisé une couche sur le dessus de l'autre. Voici un lien qui devrait vous aider à démarrer: http://www.alvit.de/css-showcase/css-navigation-techniques-showcase.php – Josh

+1

Ceci est la chose réelle (Tutoriel 3: Master Pages et navigation sur le site par Scott Mitchell): http://msdn.microsoft.com/en-us/library/aa581782.aspx Veuillez vous reporter à «Étape 3: Affichage d'un menu basé sur la carte du site». Juste magnifique! :) –

Répondre

1

Il se trouve que la solution est en fait très simple. En utilisant deux SiteMapDataSourceControls et en réglant le StartingNodeOffset = 1 de la seconde, vous pouvez réaliser efficacement l'approche de navigation en deux couches en utilisant deux répéteurs.

<ul> 
    <asp:Repeater ID="rptMainNavigation" runat="server" DataSourceID="SiteMapDataSourceMainNavigation"> 
     <ItemTemplate> 
      <li><a href="<%# ((SiteMapNode)Container.DataItem).Url %>"><%# ((SiteMapNode)Container.DataItem).Title %></a></li> 
     </ItemTemplate> 
    </asp:Repeater> 
</ul> 

<ul> 
    <asp:Repeater ID="rptSubNavigation" runat="server" DataSourceID="SiteMapDataSourceSubNavigation"> 
     <ItemTemplate> 
      <li><a href="<%# ((SiteMapNode)Container.DataItem).Url %>"><%# ((SiteMapNode)Container.DataItem).Title %></a></li> 
     </ItemTemplate> 
    </asp:Repeater> 
</ul> 

<asp:SiteMapDataSource ID="SiteMapDataSourceMainNavigation" runat="server" ShowStartingNode="False" /> 
<asp:SiteMapDataSource ID="SiteMapDataSourceSubNavigation" runat="server" ShowStartingNode="False" StartingNodeOffset="1" />