簡體   English   中英

ASP Control無序列表UL,帶嵌套列表

[英]ASP Control unordered list UL with nested list

我嘗試了Menu,TreeView,BulletedList,Repeater,HtmlGenericControl,但沒有結果。

我想擁有的是呈現某些內容的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添加到單擊的列表中。

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

對不起,如果我不太清楚。 感謝幫助。

您需要使用嵌套的中繼器:

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

如果只需要從代碼后面訪問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/zh-cn/library/y6wb1a0e%28v=vs.100%29.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM