使用处理程序创建多个动态事件!(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,则它们将被视为新控件,因此不会调用事件处理程序。
您是否尝试将复选框的AutoPostBack
属性设置为true
?