使用处理程序创建多个动态事件! (身份证)

时间:2011-11-07 15:02:44

标签: c# asp.net events event-handling dynamic-controls

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

这是我的代码中第一个需要解决我的问题的部分。

这是一个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");
    }

ODD让我感到震惊的事情。如果我改变的话,这是否会完美无缺:

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);

我还调试了我的程序,存储在Session [“id”]中的值不是null也不是腐败。始终保持值0及以上!

感谢您寻找男士/女士们。我真的坚持这个!

PS - 抱歉。没有错误。除非我对ID进行硬编码,否则这些事件不会触发。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

也许您忘记重置sesssion(“ID”),因此当页面回发时,复选框会重新创建新的ID。由于复选框在每次回发时都会重新创建,因此每次都需要具有相同的ID,如果不是,则会将其视为新控件,因此不会调用事件处理程序。