0

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

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

这是在一个 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 进行硬编码,否则这些事件不会触发。

4

2 回答 2

0

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

于 2011-11-07T15:10:32.470 回答
0

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

于 2011-11-07T15:11:04.233 回答