我在页面加载事件中动态地在我的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事件未触发。
答案 0 :(得分:1)
这是一个添加控件,ViewState和一些生命周期的问题。动态添加完全参与整个生命周期的控件是一个复杂的主题,如果没有更多的上下文,最好阅读Truly Understanding Dynamic Controls系列。
在你的情况下,我认为你是在ViewState初始化之后重新创建下一页加载的控件,因此它不需要知道绑定时需要将调用排队到绑定事件处理程序。
答案 1 :(得分:0)
尝试在Page_Init()
事件中添加控件(在Page_Load()
事件之前触发)。