在我的转发器的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>
所以基本上我需要一种干净而简单的方法来实现我的逻辑。如果我能得到一个解释正在发生的事情会很好,所以任何想法=)?
答案 0 :(得分:0)
你可以在下面找到你的文本框,但我认为它更好地使用jQuery而不是服务器端事件
protected void IsSelected_ChkBx_CheckedChanged(object sender, EventArgs e)
{
var ch = (CheckBox)sender;
var txt = ch.Parent.FindControl("Value_TxtBx") as TextBox;
}