2010-10-19 13 views
6

Ich habe eine neue ASP.NET 4 WebForm-Anwendung gestartet. Standardmäßig enthält die Datei Site.Master folgendes Menü:Erstellen Sie ein Menü aus der Datei 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> 

Dieses Menü enthält zwei Blöcke: „Home“ und „About“. Ich mag diese Struktur. Allerdings möchte ich die NavigationMenu basierend auf den Inhalt meiner Web.sitemap-Datei bevölkern. Zu diesem Zeitpunkt sieht diese Datei wie folgt aus:

<?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> 

Ich änderte den NavigationMenu Code wie folgt aussehen:

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

Mein Problem ist, erzeugt dieser Ansatz einen kleinen Block, der das Menü darstellt. Wenn der Benutzer darüber schwebt, erscheinen zwei Untermenüpunkte "Home" und "Products". Seltsamerweise erlaubt die web.sitemap-Datei nur eine siteMapNode als Kind des Elements siteMap. Wie mache ich es so, dass "Home" und "Products" auf die gleiche Weise wie "Home" und "About" erscheinen, während ich die Flexibilität habe, die Sitemap zu verwenden?

Vielen Dank!

Antwort

3

Für mich ShowStartingNode = "false" funktionierte besser.

0

Sie sollten das asp: Menü ablegen und mit einem ListView durch die Sitemap iterieren und ein eigenes Menü erstellen. Ich würde das Standard-UL-Tag verwenden. Dann binden Sie die "li", "ul" und "a" an CSS für 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> 

Dies wird eine Sitemap-Datei verarbeiten, die zwei Ebenen ist, erhalten Sie einen zusätzlichen Listenansicht hinzufügen müssen, wenn Sie 3 Ebenen haben.

Sie können aber auch mehr als zwei Ebenen haben, hier ist ein Link zu Msdn, die eine exapmle mit 3 Ebenen zeigt: https://msdn.microsoft.com/en-us/library/yy2ykkab%28v=vs.140%29.aspx

Verwandte Themen