2011-09-27 66 views
1

我有一個asp.net站點地圖與單級下拉菜單。我在母版頁中使用以下代碼,通過生成<li><ul>將它們顯示爲下拉菜單。它工作正常的問題是,即使有些項目沒有子項目它產生空導致顯示下拉圖標。 如何通過檢查子節點數來停止空的<ul>世代。ASP.NET站點地圖作爲下拉菜單顯示非子元素的問題

<!--- Menu --> 
     <div id="horizontalcssmenu" class="horizontalcssmenu"> 
      <asp:SiteMapDataSource ID="SiteMapDataSource1" ShowStartingNode="false" runat="server" /> 
        <ul id="cssmenu1"> 
         <li><a id="A1" href="index.aspx" runat="server">Home</a></li> 

         <asp:Repeater ID="foo" DataSourceID="SiteMapDataSource1" EnableViewState="false" 
             runat="server" onitemcommand="foo_ItemCommand"> 
          <ItemTemplate> 
           <li> 
            <a href='<%#Eval("url") %>'><%#Eval("Title") %></a> 
            <ul> 
             <asp:Repeater ID="bar" DataSource='<%# ((SiteMapNode) Container.DataItem).ChildNodes %>' runat="server"> 
              <ItemTemplate> 
               <li><a href='<%#Eval("url") %>'><%#Eval("Title") %></a></li> 
              </ItemTemplate> 
             </asp:Repeater> 
            </ul> 

           </li> 
          </ItemTemplate> 
         </asp:Repeater> 
        </ul> 
       </div> 
    <!-- Menu End --> 

enter image description here

輸出代碼顯示這樣的事情

<!--- Menu --> 
     <div id="horizontalcssmenu" class="horizontalcssmenu"> 
        <ul id="cssmenu1"> 
         <li><a href="index.aspx" id="ctl00_A1">Home</a></li> 
           <li> 
            <a href='/SVSS/StudentFullDetails.aspx'>Student Details</a> 
            <ul> 
            </ul> 
           </li> 
           <li> 
            <a href='/SVSS/StudentMonthlyAttendance.aspx'>Attendance</a> 
            <ul> 
            </ul> 
           </li> 
           <li> 
            <a href='/SVSS/MyNotice.aspx'>Notice</a> 
            <ul> 
            </ul> 

           </li> 

        </ul> 
       </div> 
       <!-- Menu End --> 

回答

2

如何像:

<%if(((SiteMapNode) Container.DataItem).ChildNodes.Length > 0) { %> 
    <ul> 
     <asp:Repeater ID="bar" DataSource='<%# ((SiteMapNode) Container.DataItem).ChildNodes %>' runat="server"> 
      <ItemTemplate> 
       <li><a href='<%#Eval("url") %>'><%#Eval("Title") %></a></li> 
      </ItemTemplate> 
     </asp:Repeater> 
    </ul> 
<%}> 
+0

我以前試過,但沒有工作。它顯示錯誤保持在裏面,如果條件 – AjayR

+0

@Ajay - 你也嘗試過'#'嗎? – GunnerL3510

1

有點晚了,但可能幫助別人。 嘗試設置中繼器的Visible屬性,像這樣。

Visible="<%# ((SiteMapNode)Container.DataItem).ChildNodes.Count > 0 ? true : false %>"