Archive for November, 2009

Setting a labels "for" attribute inside a repeater

It’s nice to add <labels> to your form fields and set the labels “for” attribute so that it references the field it is a label for.

e.g.

<label for="emailaddress">Email</label>
<input type="text" id="emailaddress"/>

Now if you’re referencing asp.net controls you can use the clientid property.

e.g.

<label for="<%= emailaddress.clientid()%>">Email</label>
<asp:TextBox runat="server" ID="emailaddress" />

All nice an easy so far. The situation gets a little bit more complicated when you start nesting this inside a repeater.

e.g.

<asp:Repeater runat="server" ID="rpt1">
<itemTemplate>

<label for="<%= emailaddress.clientid()%>">Email</label>
<asp:TextBox runat="server" ID="emailaddress" />

</itemTemplate>
</asp:Repeater>

this won’t work.
Here’s what you need to do instead.

<asp:Repeater runat="server" ID="rpt1">
<itemTemplate>

<label for="<%# container.findcontrol("emailaddress").clientid()%>">Email</label>
<asp:TextBox runat="server" ID="emailaddress" />

</itemTemplate>
</asp:Repeater>