0

每次在 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();

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

4

1 回答 1

0

您的问题并不清楚您遇到了什么问题。

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

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

要记住的是,在页面加载时自动创建的唯一控件是那些声明为标记的控件。其他所有内容,您每次都需要添加。

于 2012-09-09T01:06:38.237 回答