2010-10-19 10 views
6

Ho avviato una nuova applicazione Web Form di ASP.NET 4. Per impostazione predefinita, il file Site.master contiene il seguente menu:Creare un menu dal file web.sitemap in ASP.NET

<asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" EnableViewState="false" IncludeStyleBlock="false" Orientation="Horizontal"> 
    <Items> 
    <asp:MenuItem NavigateUrl="~/Default.aspx" Text="Home"/> 
    <asp:MenuItem NavigateUrl="~/About.aspx" Text="About"/> 
    </Items> 
</asp:Menu> 

Questo menu contiene due blocchi: "Home" e "Informazioni". Mi piace questa struttura. Tuttavia, desidero popolare lo NavigationMenu in base ai contenuti del mio file Web.sitemap. In questo momento, questo file è simile al seguente:

<?xml version="1.0" encoding="utf-8" ?> 
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" > 
    <siteMapNode> 
    <siteMapNode url="/Default.aspx" title="Home" description=""></siteMapNode> 
    <siteMapNode url="/Products/List.aspx" title="Products" description=""></siteMapNode> 
    </siteMapNode> 
</siteMap> 

ho cambiato il codice NavigationMenu a guardare come il seguente:

<asp:SiteMapDataSource ID="mySiteMapDataSource" runat="server" /> 
<asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" DataSourceID="mySiteMapDataSource" EnableViewState="false" IncludeStyleBlock="false" Orientation="Horizontal" /> 

Il mio problema è, questo approccio crea un piccolo blocco che rappresenta il menu. Quando l'utente si posiziona su questo punto, due voci di sottomenu appaiono "Casa" e "Prodotti". Stranamente, il file web.sitemap consente solo uno siteMapNode come figlio dell'elemento siteMap. Come faccio a fare in modo che "Casa" e "Prodotti" appaiano nello stesso modo in cui "Home" e "Informazioni" hanno fatto, dandomi la flessibilità di usare la mappa del sito?

Grazie!

risposta

3

Per me ShowStartingNode = "false" ha funzionato meglio.

0

Si dovrebbe abbandonare l'asp: Menu e scorrere la mappa del sito utilizzando un ListView e generare il proprio menu. Vorrei usare il tag ul standard. Quindi lega "li", "ul" e "a" a css per lo styling.

<asp:ListView ID="lvMenuList" DataSourceID="SiteMapDataSource1" runat="server"> 
     <LayoutTemplate> 
       <li runat="server" /> 
     </LayoutTemplate> 
     <ItemTemplate> 
       <li> <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# Eval("Url") %>'><span><%# Eval("Title") %></span></asp:HyperLink>       
      <asp:ListView ID="ListView2" runat="server" DataSource='<%# ((SiteMapNode) Container.DataItem).ChildNodes %>' > 
     <LayoutTemplate> 
       <ul><li runat="server" /></ul> 
     </LayoutTemplate> 
     <ItemTemplate> 
       <li> <asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl='<%# Eval("Url") %>'><span><%# Eval("Title") %></span></asp:HyperLink> </li> 
     </ItemTemplate> 
</asp:ListView> 

         </li> 
        </ItemTemplate> 
        </asp:ListView> 

Questo consente di gestire un file di mappa del sito che è di due livelli, si dovrà aggiungere un ulteriore ListView se si dispone di 3 livelli.

Inoltre, è possibile avere più di 2 livelli, ecco un link a MSDN che mostra un exapmle utilizzando 3 livelli: https://msdn.microsoft.com/en-us/library/yy2ykkab%28v=vs.140%29.aspx

Problemi correlati