我有一个非常动态的网络应用程序,它是在运行时动态创建的控件。
这是我的代码中第一个需要解决我的问题的部分。
这是一个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进行硬编码,否则这些事件不会触发。
答案 0 :(得分:0)
您是否尝试将复选框的AutoPostBack
属性设置为true
?
答案 1 :(得分:0)
也许您忘记重置sesssion(“ID”),因此当页面回发时,复选框会重新创建新的ID。由于复选框在每次回发时都会重新创建,因此每次都需要具有相同的ID,如果不是,则会将其视为新控件,因此不会调用事件处理程序。