在ASP.Net中动态添加用户控件

时间:2012-09-08 16:11:13

标签: asp.net

每次在ASP.Net页面中单击按钮时,我都会尝试添加 MyWUCtr.ascx

页面加载代码:

if (!Page.IsPostBack)
            {
                Session["ctrid"] = "0";
            }
            if (Session["myctrs"] != null)
            {
                Panel1.Controls.Clear();
                Panel p = ((Panel)Session["myctrs"]);
                foreach (Control c in p.Controls)
                {
                    if (c is UserControl)
                        Panel1.Controls.Add(c);
                }
            }

按钮点击代码:

int x = Convert.ToInt32(Session["ctrid"].ToString());

MyWUCtr ctr = LoadControl("~/MyWUCtr.ascx") as MyWUCtr;
ctr.ID = "myctr" + x.ToString();

x++;
Panel1.Controls.Add(ctr);
Session["myctrs"] = Panel1;
Session["ctrid"] = x.ToString();

此控件只有一个文本框和一个按钮

1 个答案:

答案 0 :(得分:0)

您的问题并不能说明您遇到的问题。

但是,如果要在事件处理程序中动态添加控件,则每次加载页面时,都需要以相同的顺序和相同的ID重新创建和重新添加控件。这将要求你保持跟踪 - 在某些持久性的地方,比如在ViewState中 - 你添加了多少控件,以及(如果它可以改变)你在哪个控件的Controls集合中添加它们。

ViewState可以恢复其状态,但它们必须已经存在于页面的控制树中才能实现。因此需要重新创建它们。微软提供的控件如GridView在内部执行(这就是为什么,即使你不重新绑定它们,它们引发DataItemCreated事件),但如果你是创建并添加它们以响应事件的那个,你是负责在回发后重新创建它们。

要记住的是,页面加载时自动创建的唯一控件是声明为标记的控件。每一件事,你都需要每次都添加。