【问题标题】:ASP.NET Repeater FindControl not working for Label, but works for TextboxASP.NET Repeater FindControl 不适用于标签,但适用于文本框
【发布时间】:2018-07-19 19:15:23
【问题描述】:

我在尝试从中继器获取控件时遇到问题。我有一个标签和一个文本框。标签给了我一个空引用错误,但是文本框正在工作。

标记:

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

代码背后:

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

我在 Stack Overflow 上对此进行了研究,大多数答案都涉及使用 OnItemDatabound 事件,但是当我尝试实现这些答案时,标签仍然返回 null。就使用 OnItemDatabound 事件而言,我个人不理解这些建议。

【问题讨论】:

    标签: asp.net webforms repeater


    【解决方案1】:

    改变

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

    进入

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

    你找不到它,因为它没有 ID

    【讨论】:

    • 天哪。我知道我会很尴尬地找到解决问题的方法。哦,好吧,谢谢你!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-18
    • 2012-09-14
    • 2020-05-26
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    • 1970-01-01
    相关资源
    最近更新 更多