簡體   English   中英

動態添加控件的事件處理程序不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM