访问中继器内部的复选框

本文关键字:复选框 内部 中继器 访问 | 更新日期: 2023-09-27 18:04:39

在我的repeater的ItemTemplate中,我有一个CheckBox和一个禁用的TextBox,我需要实现这个想法:TextBox只有在CheckBox被选中时才被启用。所以我设置CheckBox AutoPostBack为true,我试着把这段代码放在ItemDataBound中。但我找不到我的控制,这很奇怪,因为我使用相同的代码,但在循环"MyRptr.Item[I].FindControl....",它的工作原理!. .我不想遍历所有的Item,我只希望知道创建CheckBox的Item编号或位置。我也试着为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>

所以基本上我需要一个干净和简单的方式来实现我的逻辑,如果我能得到一个解释发生了什么,这将是伟大的,所以有什么想法=)?

访问中继器内部的复选框

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

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