2010-10-19 91 views
6

我已經啓動了一個新的ASP.NET 4 WebForm應用程序。默認情況下,Site.Master文件包含以下菜單:從ASP.NET的web.sitemap文件生成菜單

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

此菜單包含兩個塊:「主頁」和「關於」。我喜歡這種結構。但是,我想根據我的Web.sitemap文件的內容填充NavigationMenu。在這個時候,這個文件看起來是這樣的:

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

我改變了NavigationMenu代碼如下所示:

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

我的問題是,這種方法創建一個小的塊表示該菜單。當用戶將鼠標懸停在上面時,會出現兩個子菜單項「Home」和「Products」。奇怪的是,web.sitemap文件只允許一個siteMapNode作爲siteMap元素的子元素。我如何使「家」和「產品」以「Home」和「About」相同的方式出現,同時給我使用站點地圖的靈活性?

謝謝!

回答

3

對我來說ShowStartingNode = 「假」 更好地工作。

0

你應該拋棄asp:Menu並使用ListView迭代站點地圖並生成自己的菜單。我會使用標準的ul標籤。然後將「li」,「ul」和「a」綁定到CSS以進行造型。

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

這將處理兩個級別的站點地圖文件,如果您有3個級別,則必須添加其他列表視圖。

此外,你可以有超過2個級別,這裏是msdn的鏈接,顯示使用3級的exapmle:https://msdn.microsoft.com/en-us/library/yy2ykkab%28v=vs.140%29.aspx