【发布时间】: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" />
<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>
所以基本上我需要一种干净简单的方法来实现我的逻辑,如果我能解释正在发生的事情,那就太好了,所以有什么想法 =) 吗?
【问题讨论】: