单击时,动态创建的控件将消失

时间:2010-09-03 07:46:10

标签: c# visual-studio-2008 dynamic

动态控件在点击后立即丢失,为什么会发生这种情况,以及如何解决它。

protected void Page_Load(object sender, EventArgs e)
{
    /*DropDownList1_SelectedIndexChanged(sender, e);
    Label1.Text += "<br/>huh?";
    Label1.Text = MapPath("dawd");*/
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
    //PlaceHolder1.Controls.Clear();
    for (int i = 0; i < DropDownList1.SelectedIndex + 1; i++)
    {
        CheckBox cb = new CheckBox();
        cb.AutoPostBack = true;
        cb.CheckedChanged += new EventHandler(cb_CheckedChanged);
        PlaceHolder1.Controls.Add(cb);
        PlaceHolder1.Controls.Add(new LiteralControl("<br/>"));
    }
}

void cb_CheckedChanged(object sender, EventArgs e)
{
    //DropDownList1_SelectedIndexChanged(sender, e);
    Label1.Text += "<br/>adsd";
    //throw new NotImplementedException();
}
欢呼,Jaf

2 个答案:

答案 0 :(得分:7)

必须在每次回发中重新创建动态创建的控件,否则它们将不可用,并且不会触发其事件。

您只需在下拉列表更改时添加复选框,因此任何其他回发都不会添加它们。

最好在页面OnInit事件上创建动态控件。

了解页面生命周期here

答案 1 :(得分:0)

  • 创建面板
  • 不要在page_load上创建

添加此代码

protected override void CreateChildControls()
{
    base.CreateChildControls();
    loadCheckbox();
}

public void loadCheckbox()
{
    int checkCount = 10;
    CheckBox[] chk = new CheckBox[checkCount];

    for(int i == 0; i<=10; i++)
    {
        chk[i] = new CheckBox();
        chk[i].ID = rCmt.cmtkey;
        chk[i].Text = rCmt.rootcommitteename;
        Panel1.Controls.Add(chk[i]);          
    }
}