复选框会触发多个事件

时间:2015-08-13 12:02:00

标签: c# checkbox

我有一个动态标签,我有复选框。我在它们上面放了一个事件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();
}

感谢您的帮助:)

1 个答案:

答案 0 :(得分:0)

artlistArticle的每次迭代都会导致事件处理程序被行添加到事件中

  cbox.CheckedChanged += new EventHandler(cbox_CheckedChanged);

每次执行。 (即你多次添加处理程序)

此外,如果页面未被销毁并再次加载,initCatalog的每次运行也会导致此问题。

将上面一行移到一个只能在页面加载后执行一次的地方。

修改

重新读取你的代码,在循环中多次添加可能是你想要的,因为有多个复选框。但是在回发之后,initCatalog()可能会再次执行,从而再次添加事件?