复选框更改了动态添加控件的事件未触发

本文关键字:事件 控件 添加 动态 复选框 | 更新日期: 2023-09-27 18:09:25

我已经在我的jQuery手风琴控件的页面加载事件中动态创建了3个复选框,我也为文本框关联了CheckedChanged事件。但事件根本没有发生。我不知道这里发生了什么。请帮帮我。谢谢你的反馈。

我用来生成动态控件和关联事件的代码
protected void Page_Load(object sender, EventArgs e)
{
    dvAccordion.Controls.Clear();
    foreach (DataRow row in dataSetIP.Tables[0].Rows)
    {
        HtmlGenericControl tt= new HtmlGenericControl("H3");
        HtmlAnchor anc= new HtmlAnchor();
        HtmlGenericControl dvP= new HtmlGenericControl("DIV");
        dvP.InnerHtml = row["LD"].ToString();
        CheckBox chkTest = new CheckBox();
        if (!Page.IsPostBack) chkTest .ID = "chk" + row["SD"].ToString();
        else
        {
            string uniqueID = System.Guid.NewGuid().ToString().Substring(0, 5);
            chkTest .ID = "chk" + uniqueID + row["SD"].ToString();
        }
        chkTest.Text = row["SD"].ToString();
        chkTest.AutoPostBack = true;
        chkTest.CheckedChanged += new EventHandler(chkTest _CheckedChanged);
        chkTest.InputAttributes.Add("Value", row["ID"].ToString());
        anc.Controls.Add(chkTest);
        tt.Controls.Add(anc);
        dvAccordion.Controls.Add(tt);
        dvAccordion.Controls.Add(dvP);           
    }  
}

但是CheckboxChanged事件没有触发

复选框更改了动态添加控件的事件未触发

这是一个何时添加控件、ViewState和一些生命周期的问题。动态添加完全参与整个生命周期的控件是一个复杂的主题,如果没有更多的背景,您最好阅读真正理解动态控件系列。

在你的情况下,我认为你是在ViewState初始化后的下一个页面加载上重新创建控件,所以它不知道绑定的时候,它需要排队调用你的绑定事件处理程序

尝试在Page_Init()事件(在Page_Load()事件之前触发)中添加控件。