【问题标题】:Accesing a CheckBox that's inside a Repeater访问中继器内的复选框
【发布时间】:2026-01-31 08:45:01
【问题描述】:

在我的中继器的 ItemTemplate 中,我有一个 CheckBox 和一个禁用的 TextBox,我需要实现这个想法:只有在 CheckBox 被选中时才会启用 TextBox .. 所以我将 CheckBox AutoPostBack 设置为 true,我试图把这个ItemDataBound 中的代码。但我找不到我的控件,这很奇怪,因为我使用相同的代码但在循环“MyRptr.Item [i].FindControl ....”中并且它有效! ..我不想遍历所有项目,我只希望如果我能知道创建 CheckBox 的项目编号或位置。我还尝试为 CheckBox 的 CheckedChanged 事件创建事件句柄,但我也找不到 CheckBox!

protected void MyRptr_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            CheckBox ChkBx = e.Item.FindControl("IsSelected_ChkBx") as CheckBox;
            if (ChkBx.Checked == true)
            {
                TextBox TxtBx = e.Item.FindControl("Value_TxtBx") as TextBox;
                TxtBx.Enabled = true;
            }
        }


<asp:Repeater ID="MyRptr" runat="server" 
            onitemdatabound="MyRptr_ItemDataBound">
                <ItemTemplate>
                    <asp:CheckBox ID="IsSelected_ChkBx" runat="server" Text='<%# Eval("Item") %>' AutoPostBack="True" OnCheckedChanged="IsSelected_ChkBx_CheckedChanged" />
                    &nbsp;<asp:TextBox ID="Value_TxtBx" runat="server" Enabled="false"></asp:TextBox>
                    <asp:HiddenField ID="ID_HdnFld" runat="server" Value='<%# Eval("ID") %>' />
                </ItemTemplate>
                <SeparatorTemplate>
                    <br></br>
                </SeparatorTemplate>
            </asp:Repeater>

所以基本上我需要一种干净简单的方法来实现我的逻辑,如果我能解释正在发生的事情,那就太好了,所以有什么想法 =) 吗?

【问题讨论】:

    标签: c# asp.net webforms


    【解决方案1】:

    你可以找到你的文本框如下,但我认为最好使用 jQuery 而不是服务器端事件

    protected void IsSelected_ChkBx_CheckedChanged(object sender, EventArgs e)
    {
         var ch = (CheckBox)sender;
         var txt = ch.Parent.FindControl("Value_TxtBx") as TextBox;
    }
    

    【讨论】:

    • (Y) 完美 .. 有效 =) .. 我认为 JQuery 或 JavaScript 一般会更好,你能帮我吗?
    • 我真的从来没有用过JQuery或JavaScript..你能提供一些代码吗?我不会让别人为我写代码,但我真的从来没有用过这个!