2011-09-23 71 views
3

我在页面加载事件中动态地在我的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事件在不触发

代码。

回答

1

这是您添加控件,ViewState和某些生命周期的问题。动态地添加完全参与整个生命周期的控件是一个复杂的主题,没有更多的上下文,最好是阅读Truly Understanding Dynamic Controls系列。

就你而言,我认为你在ViewState初始化之后重新创建了下一页加载的控件,所以在它需要将呼叫排队到你的界限时它不知道绑定事件处理器。

+0

非常感谢你的回复Mufasa,但是我没有完全明白,请告诉我你什么时候需要重新创建这些控件,以便我可以获取ViewState。我试着把它放在Page_Init里也没有用。 – user788312

+0

@ user788312根据你想要做什么,有几种解决方案。要么给我们提供更多的上下文,要么我建议阅读该系列文章,因为它确实是帮助我弄清楚如何正确使用动态控件的唯一方法。而且,为了什么是值得的,我尽量避免在尽可能使用它们的时候使用它们 - 通常比付出更多的努力。例如,尝试使用Repeater或ListView。 –

+0

Mufasa Thannks再次。这是上下文,我有一个JQuery手风琴,它是基于数据库返回的行数动态构建的。我还需要在每个手风琴行中都有一个复选框,因为我需要根据复选框中的选择来填充网格中的数据。但是由于这些复选框是在手风琴内部动态创建的,所以复选框更改了事件,我所触发的事情根本不会被调用。如果该事件被触发,我可以检查checked属性的值并执行我的数据库操作。我希望你知道了,如果不是,请让我知道。感谢和欣赏你的反馈。 – user788312

0

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

+0

我试过这样做..但它也没有工作 – user788312