我有一个动态标签,我有复选框。我在它们上面放了一个事件onCheckedChanged
。它第一次工作,但在回发后,我的选项卡被重新创建,当我点击另一个复选框时,我会触发多个事件。
以下是创建标签的代码:
private void initCatalog()
{
foreach (Article art in listArticle)
{
TableRow ligne = new TableRow();
ligne.Width = Unit.Percentage(100);
TableCell celluleITMREF = new TableCell();
celluleITMREF.Width = Unit.Percentage(10);
celluleITMREF.Text = art._ITMREF;
TableCell celluleCBOX = new TableCell();
celluleCBOX.Width = Unit.Percentage(8);
CheckBox cbox = new CheckBox();
cbox.ID = "cbox." + f._FOURNISSEUR + "." + art._ITMREF;
cbox.Checked = hfArticlesPaniers.Value.Contains(cbox.ID);
//cbox.Enabled = !(hfArticlesPaniers.Value.Contains(cbox.ID));
cbox.CheckedChanged += new EventHandler(cbox_CheckedChanged);
cbox.AutoPostBack = true;
cbox.CssClass = "c";
celluleCBOX.Controls.Add(cbox);
ligne.Cells.Add(celluleITMREF);
ligne.Cells.Add(celluleCBOX);
tabArticle.Rows.Add(ligne);
}
}
以下是复选框的事件:
protected void cbox_CheckedChanged(object sender, EventArgs e)
{
CheckBox c = sender as CheckBox;
Response.Write("<script>alert(\"" + c.ID + "\");</script>");
}
这是page_Load事件:
protected void page_Load(object sender, EventArgs e){
this.initCatalog();
}
感谢您的帮助:)
答案 0 :(得分:0)
art
中listArticle
的每次迭代都会导致事件处理程序被行添加到事件中
cbox.CheckedChanged += new EventHandler(cbox_CheckedChanged);
每次执行。 (即你多次添加处理程序)
此外,如果页面未被销毁并再次加载,initCatalog
的每次运行也会导致此问题。
将上面一行移到一个只能在页面加载后执行一次的地方。
修改强>
重新读取你的代码,在循环中多次添加可能是你想要的,因为有多个复选框。但是在回发之后,initCatalog()
可能会再次执行,从而再次添加事件?