我正在使用更新面板向我的网页添加动态控件。我也为这个动态控件创建了一个事件处理程序。因此,虽然控件已添加到网页中,但此控件的事件处理程序不起作用。
我的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>
单击按钮时会发生什么,复选框已创建。但是,当我选中复选框时,面板只是刷新,文本框没有更新,文本“是的。它工作!!!”。
答案 0 :(得分:0)
首先,为什么要将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);
}
}
}