![](/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.