使用处理程序创建多个动态事件!(ID)问题

本文关键字:事件 ID 问题 动态 处理 程序 创建 | 更新日期: 2023-09-27 18:13:38

我有一个非常动态的web应用程序,在运行时动态创建控件。

这是解决问题所需的第一部分代码。

这是一个for循环,本质上它创建了多个带有ID和事件处理程序的复选框。

// All I am doing here is incrementing our session counter so we can increment our ID
int id = Convert.ToInt32(Session["id"]);
id++;
Session["id"] = id;
// Now I create my checkbox
chkDynamic = new CheckBox();
chkDynamic.Text = "hey";
string chk = "chk" + id.ToString();
chkDynamic.ID = chk;
chkDynamic.CheckedChanged += new EventHandler(chkDynamic_CheckedChanged);
Panel1.Controls.Add(chkDynamic);

下一节是我们自定义的偶数处理程序

protected void chkDynamic_CheckedChanged(object sender, EventArgs e)
    {
        if (((CheckBox)sender).Checked)
            Response.Write("you checked the checkbox :" + this.chkDynamic.ID);
        else
            Response.Write("checkbox is not checked");
    }

让我觉得奇怪的事。如果我更改

,这将工作得很好。
string chk = "chk" + id.ToString();

:

string chk = "chk";

但是,当然,我们遇到了"多个控件具有相同的ID"

我的问题是让这个工作与唯一的ID !另一个可能有用的ODD信息。如果我将它从循环中取出,并手动添加一个具有不同ID的复选框,它也可以工作。这真是令人难以置信:

    chkDynamic = new CheckBox();
    chkDynamic.Text = "hey";
   // string chk = "chk" + id.ToString();
    chkDynamic.ID = "hey1";
    chkDynamic.CheckedChanged += new EventHandler(chkDynamic_CheckedChanged);
    Panel1.Controls.Add(chkDynamic);
    chkDynamic = new CheckBox();
    chkDynamic.Text = "hey";
   // string chk = "chk" + id.ToString();
    chkDynamic.ID = "hey2";
    chkDynamic.CheckedChanged += new EventHandler(chkDynamic_CheckedChanged);
    Panel1.Controls.Add(chkDynamic);

我还调试了我的程序,并且存储在会话["id"]中的值不是空的也不是损坏的。总是保持0和更高的值!

谢谢你找的家伙/女孩。我真的被困住了!

PS -对不起。没有错误。事件只是不触发,除非我硬编码ID。

使用处理程序创建多个动态事件!(ID)问题

也许您忘记重置会话("ID"),所以当页面返回时,复选框将使用新的ID重新创建。因为复选框是在每次回发时重新创建的,所以它们每次都需要具有相同的ID,如果它们不具有相同的ID,则它们将被视为新控件,因此不会调用事件处理程序。

您是否尝试将复选框的AutoPostBack属性设置为true ?