Search code examples
c#asp.netasp.net-controls

ASP.NET wrap an asp:HyperLink in <li>'s, from server-side


I have the next structure for a menu item:

class MenuItem
{
    public string Path, Title;
}

I want to be able to Iterate an object of MenuItem[], creating a new object of asp:HyperLink on each iteration, and to add it to a <ul> list.

One thing that must happen is that each HyperLink will be inside a <li> tag.

How can I do that?


Solution

  • You can use a repeater. In the aspx:

    <asp:Repeater ID="repMenuItems" runat="server">
        <HeaderTemplate>
            <ul>
        </HeaderTemplate>
        <ItemTemplate>
            <li><asp:HyperLink ID="lnkMenuItem" runat="server" Text='<%# Eval("Title") %>' NavigateUrl='<%# Eval("Path")%>'/></li>
        </ItemTemplate>
        <FooterTemplate>
            </ul>
        </FooterTemplate>
    </asp:Repeater>
    

    And in the codebehind:

    repMenuItems.DataSource = arrMenuItem;  // your MenuItem array
    repMenuItems.DataBind();
    

    Additionaly you should change your class code for using Public Properties instead of Public Members, like this:

    public class MenuItem 
    { 
        public string Title {get;set;} 
        public string Path {get;set;} 
    }
    

    I recommend you to read more about Properties in .NET, a nice feature for object encapsulation http://msdn.microsoft.com/en-us/library/65zdfbdt(v=vs.71).aspx

    Hope this helps you