2010-10-19 34 views
6

He comenzado una nueva aplicación ASP.NET 4 WebForm. Por defecto, el archivo Site.Master contiene el siguiente menú:Crear un menú desde el archivo web.sitemap en 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> 

Este menú contiene dos bloques: "Inicio" y "Acerca de". Me gusta esta estructura Sin embargo, deseo llenar el NavigationMenu según el contenido de mi archivo Web.sitemap. En este momento, este archivo es el siguiente:

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

he cambiado el código de NavigationMenu a tener el siguiente aspecto:

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

Mi problema es, este enfoque crea un pequeño bloque que representa el menú. Cuando el usuario pasa el cursor sobre esto, aparecen dos elementos del submenú "Inicio" y "Productos". Curiosamente, el archivo web.sitemap solo permite encontrar uno siteMapNode como elemento secundario del elemento siteMap. ¿Cómo hago que "Home" y "Products" aparezcan de la misma manera que "Home" y "About", mientras que me da la flexibilidad de usar el sitemap?

¡Gracias!

Respuesta

3

Para mí ShowStartingNode = "false" funcionó mejor.

0

Debería abandonar el menú asp: e iterar a través del mapa del sitio usando un ListView y generar su propio menú. Usaría la etiqueta UL estándar. A continuación, vincule el "li", "ul" y "a" a CSS para diseñar.

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

Esto manejar un archivo de mapa de sitio que es de dos niveles, que tendrá que añadir una vista de lista adicional si usted tiene 3 niveles.

Además, puede tener más de 2 niveles, aquí hay un enlace a MSDN que muestra un exapmle usando 3 niveles: https://msdn.microsoft.com/en-us/library/yy2ykkab%28v=vs.140%29.aspx

Cuestiones relacionadas