如何通过单击按钮从UpdatePanel删除动态控件?

时间:2016-03-09 14:34:01

标签: asp.net updatepanel

我有一个ASP.NET UpdatePanel,我在其中动态添加其他面板。这些较小的面板中的每一个都有自己的"删除"按钮。 当我点击其中一个"删除"按钮,我希望删除相应的面板。相反,会发生的事情是:我按"删除",没有任何反应,然后当我执行导致PostBack的其他操作时,面板将被删除。 (太晚了)

我在PostBack上绘制每个动态控件,当我单击“删除”按钮时,它的处理程序(删除我想要的面板)仅在我绘制每个控件后发生,所以我没有看到任何更改立即

这里是每次回发时调用的代码:

private void drawForm()
    {
 if (Session["controls"] != null)
        {
            PlaceHolder1.Controls.Clear();
            Ccontrols = (Dictionary<Label, Control>)Session["controls"];
            int index = 1;
            foreach (var entry in Ccontrols)
            {
                Panel cPanel = new Panel();
                cPanel.CssClass = "controldiv";
                cPanel.ID = "cpanel" + index;
                Button closebtn = new Button();
                closebtn.Text = "Delete";
                closebtn.ID = "closebtn" + index++;
                closebtn.Click += new EventHandler(closeControl);
                cPanel.Controls.Add(entry.Key);
                cPanel.Controls.Add(entry.Value);
                cPanel.Controls.Add(closebtn);
                cPanel.Controls.Add(new LiteralControl("<br />"));
                cPanel.Controls.Add(new LiteralControl("<br />"));
                closebtn.CssClass = "closebutton";
                PlaceHolder1.Controls.Add(cPanel);

            }

            FormPanel.Update();
        }
        else
        {
            FormPanel.ContentTemplateContainer.Controls.Clear();
        }

这是DeleteButton处理程序:

 private void closeControl(object sender, EventArgs e)
    {
        String id = (sender as Button).ID;
        PlaceHolder1.Controls.Remove(PlaceHolder1.FindControl("cpanel" + id));
        foreach (Control c in (sender as Button).Parent.Controls)
        {
            if (c is Label)
            {
                Ccontrols.Remove((Label)c);
            }
        }
        Session["controls"] = Ccontrols;
        drawForm();

    }

提前致谢

1 个答案:

答案 0 :(得分:0)

我认为UpdatePanel中的触发器存在一些问题。 如果您要在创建UpdatePanel的地方发布html代码,我将能够更好地帮助您。