2013-12-16 53 views
0

我試過Menu,TreeView,BulletedList,Repeater,HtmlGenericControl但沒有結果。ASP控制無序列表UL與嵌套列表

我想吃點什麼是ASP的控制,其呈現的東西:

<ul> 
    <li><a href="#">Item 1</a></li> 
    <li><a href="#">Item 2</a> 
     <ul> 
      <li><a href="#">Item 2.1</a></li> 
     </ul> 
    </li> 
</ul> 

例如菜單這使SPAN沒有UL。

<asp:Menu runat="server"> 
    <Items> 
      <asp:MenuItem Text="Item 1" /> 
      <asp:MenuItem Text="Item 2"> 
      <asp:MenuItem Text="Item 2.1" /> 
      </asp:MenuItem> 
    </Items> 
</asp:Menu> 

我也試過

<asp:Menu RenderingMode="MenuRenderingMode" /> 

但它不工作。我正在使用ASP.NET 3.5。

我需要創建動態ul列表,並且在點擊項目之後,它會檢查db是否存在嵌套項目並將它們添加到點擊列表中作爲嵌套ul。

由於性能,我無法一次渲染整個菜單。

對不起,如果我不是很清楚。 感謝您的幫助。

回答

2

您需要使用嵌套中繼器:

<asp:Repeater ID="rptFoo" runat="server" OnItemDataBound="rptFoo_ItemDataBound"> 
    <HeaderTemplate> 
    <ul> 
    </HeaderTemplate> 
    <ItemTemplate> 
     <li> 
      <asp:HyperLink ID="lnkFoo" runat="server" /> 
      <asp:Repeater ID="rptBar" runat="server" OnItemDataBound="rptBar_ItemDataBound"> 
       <HeaderTemplate> 
        <ul> 
       </HeaderTemplate> 
       <ItemTemplate> 
        <li><asp:HyperLink ID="lnkBar" runat="server" /></li> 
       </ItemTemplate> 
       <FooterTemplate> 
        </ul> 
       </FooterTemplate> 
      </asp:Repeater> 
     </li> 
    </ItemTemplate> 
    <FooterTemplate> 
    </ul> 
    </FooterTemplate> 
</asp:Repeater> 

然後在ItemDataBound處理程序,您需要檢查每個頂級項目是否有孩子元素,如果是,則將這些元素分配給子中繼器和數據綁定,否則將其隱藏。

protected void rptFoo_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if ((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem)) 
    { 
     FooType obj = (FooType)e.Item.DataItem; 
     Repeater rptBar = (Repeater)e.Item.FindControl("rptBar"); 
     if(obj.Children.Count() > 0) 
     { 
      rptBar.DataSource = obj.Children; 
      rptBar.DataBind(); 
     } 
     else 
     { 
      rptBar.Visible = false; 
     } 
    } 
} 
1

如果您只需要訪問代碼隱藏中的ulli元素,則可以輕鬆地爲它們添加runat="server"屬性。所述id屬性是必要的,以便能夠引用單個元件:

<ul id="mainMenu" runat="server"> 
    <li id="mainMenuItem1" runat="server"><a href="#">Item 1</a></li> 
    <li id="mainMenuItem2" runat="server"><a href="#">Item 2</a> 
     <ul id="subMenu" runat="server"> 
      <li id="subMenuItem1" runat="server"><a href="#">Item 2.1</a></li> 
     </ul> 
    </li> 
</ul> 

該結構也可以是從利用HtmlGenericControl小號代碼隱藏建立。

另一個選擇可能是使用用戶控件:http://msdn.microsoft.com/en-us/library/y6wb1a0e%28v=vs.100%29.aspx