我有一个非常动态的网络应用程序,它是在运行时动态创建的控件。
这是解决我的问题的代码中第一个需要的部分。
这是在一个 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 一起使用!另一个可能有帮助的奇怪信息。如果我将它从循环中取出,并手动添加一个具有不同 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"] 中的值既不为空也不损坏。始终保持值 0 及以上!
感谢您寻找男孩/女孩。我真的坚持这一点!
PS - 对不起。没有错误。除非我对 ID 进行硬编码,否则这些事件不会触发。