C# 复选框已更改事件未为动态添加的控件触发

C# 复选框已更改事件未为动态添加的控件触发,c#,.net,asp.net,checkbox,C#,.net,Asp.net,Checkbox,我在页面加载事件中动态地在jQuery accordion控件中创建了3个复选框,并且还将CheckedChanged事件与文本框相关联。但事件根本没有发生。我不确定这里发生了什么。请帮帮我。感谢并感谢您的反馈 用于生成动态控件和关联事件的代码 protected void Page_Load(object sender, EventArgs e) { dvAccordion.Controls.Clear(); foreach (DataRow row in dataSetIP.

我在页面加载事件中动态地在jQuery accordion控件中创建了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初始化后的下一个页面加载上创建控件,因此它在需要排队调用绑定事件处理程序时不知道绑定情况。

尝试在
页面初始化()
事件中添加控件(在
页面加载()
事件之前触发).

非常感谢您的回复Mufasa,但我没有完全了解,请告诉我您希望我何时重新创建这些控件,以便我可以获取ViewState。我试着把它放在页面上,但它也不起作用。@user788312根据你想做什么,有几种解决方案。要么给我们提供更多的上下文,要么我建议通读该系列文章,因为它确实是帮助我找到如何正确使用动态控件的唯一方法。为了它的价值,我尽可能避免使用它们——这通常比它的价值更费劲。例如,再次尝试使用Repeater或ListView.Mufasa Thanks。这就是上下文,我有一个JQuery accordion,它是根据DB返回的行数动态构造的。我还需要在每个accordion行中都有一个复选框,因为我需要根据复选框中的选择填充网格中的数据。但由于这些复选框是在accordion中动态创建的,复选框更改事件,我触发的任何事件都不会被调用。如果触发该事件,我可以检查checked属性的值并执行我的DB操作。我希望你得到了它,如果没有,请告诉我。谢谢并感谢您的反馈。@user788312:听起来使用Repeater或ListView会更容易。从您的描述中,我看不出动态创建它们有什么特别之处。让Repeater或ListView行命令处理事件要容易得多。请参阅类似或的答案,以获取有关如何操作的帮助。