![](/img/trans.png)
[英]Need an event handler to work on a dynamically added control which interacts with another dynamically added control
[英]Event handler for dynamically added control does not work
我正在使用更新面板向网页添加动态控件。 我也为此动态控件创建了一个事件处理程序。 因此,尽管该控件已添加到网页,但该控件的事件处理程序无法正常工作。
我的C#代码
protected void Button1_Click(object sender, EventArgs e)
{
CheckBox cbTest = new CheckBox();
cbTest.Text = "Click me for fun";
cbTest.AutoPostBack = true;
cbTest.CheckedChanged+=new EventHandler(cbTest_CheckedChanged);
UpdatePanel1.ContentTemplateContainer.Controls.Add(cbTest);
DynamicPlaceHolder.Controls.Add(cbTest);
}
public void cbTest_CheckedChanged(object sender, EventArgs e)
{
TextBox1.Text = "Yes. It worked!!!";
}
我的Aspx代码。
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<fieldset>
<legend>UpdatePanel</legend>
<asp:PlaceHolder ID="DynamicPlaceHolder" runat="server" ></asp:PlaceHolder>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
</fieldset>
</ContentTemplate>
</asp:UpdatePanel>
<asp:TextBox Width="200px" runat="server" ID="TextBox1"></asp:TextBox>
当我单击该按钮时,复选框已创建。 但是,当我选中复选框时,面板会刷新,并且文本框不会更新为“是。它能正常工作!!”。
首先,为什么要将CheckBox添加到UpdatePanel1.ContentTemplateContainer
甚至是DynamicPlaceHolder
?
因此,将其更改为:
//UpdatePanel1.ContentTemplateContainer.Controls.Add(cbTest);
DynamicPlaceHolder.Controls.Add(cbTest);
您最好在Page_Load
分配事件:
protected void Page_Load(object sender, EventArgs e)
{
for (int i = 0; i < DynamicPlaceHolder.Controls.Count; i++)
{
Control ctrl = DynamicPlaceHolder.Controls[i];
if (ctrl is CheckBox)
{
CheckBox chk = (CheckBox)ctrl;
chk.CheckedChanged += new EventHandler(cbTest_CheckedChanged);
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.