Nick
Nick

Reputation: 886

ASP.NET Repeater FindControl not working for Label, but works for Textbox

I'm facing issues trying to get controls from my repeater. I have one label and one textbox. The label is giving me a null reference error, however the textbox is working.

Markup:

<asp:Repeater ID="PalletsRepeater" runat="server" OnItemDataBound="PalletsRepeater_ItemDataBound">
    <ItemTemplate>
        <div style="margin-left: 20px; margin-top: 5px;">
            <asp:Label lbl="lblPalletId" Text='<%#"Pallet "+Eval("PALLETID")%>' runat="server" />
            <asp:Label Text=", Qty = " CssClass="field-label-blue" runat="server" />
            <asp:TextBox ID="txtPalletItemQty" runat="server" Text='<%# Eval("ITEMQTY") %>' step="1" type="number" />
        </div>
    </ItemTemplate>
</asp:Repeater>

Code Behind:

foreach (RepeaterItem repeaterRow in PalletsRepeater.Items)
{
    // This fails.
    string palletId = ((System.Web.UI.WebControls.Label)repeaterRow.FindControl("lblPalletId")).Text;
    // This works.
    string palletItemQty = ((System.Web.UI.WebControls.TextBox)repeaterRow.FindControl("txtPalletItemQty")).Text;
}

I have researched this on Stack Overflow and most answers involve using the OnItemDatabound event, but when I tried to implement those answers, it still comes back null for the label. Personally I don't understand the suggestions as far as using the OnItemDatabound event.

Upvotes: 1

Views: 388

Answers (1)

VDWWD
VDWWD

Reputation: 35514

Change

<asp:Label lbl="lblPalletId" Text='<%#"Pallet "+Eval("PALLETID")%>' runat="server" />

Into

<asp:Label id="lblPalletId" Text='<%#"Pallet "+Eval("PALLETID")%>' runat="server" />

You cannot find it because it has no ID

Upvotes: 2

Related Questions