How to dynamically set control IDs inside a repeater template?

Bryan picture Bryan · Apr 27, 2010 · Viewed 13.2k times · Source

Here is a perplexing issue I have not seen a good answer to on StackOverflow, although there a couple stabs at it... I have a situation where I'd like to do this:

<asp:Repeater ID="MyRepeater" runat="server" OnItemDataBound="MyRepeater_ItemDataBound">
    <ItemTemplate>
        <li id="id?">
            All the other stuff
        </li>
    </ItemTemplate>
</asp:Repeater>

The question... is how do I get the ID of my <li> elements to be id1, id2, id3, etc., based on the ItemIndex they are bound to? So far the most... er..."elegant" solution I've come up with is to replace the <li> with an asp:Literal and dump the <li...>' text. But that just feels... so wrong. And no, I'm not using ASP.NET 4.0, which I've read will provide this functionality.

Answer

SLaks picture SLaks · Apr 27, 2010

Like this:

<asp:Repeater ID="MyRepeater" runat="server" OnItemDataBound="MyRepeater_ItemDataBound">
    <ItemTemplate>
        <li id="li<%# ((RepeaterItem)Container).ItemIndex + 1%>">
            All the other stuff
        </li>
    </ItemTemplate>
</asp:Repeater>