每次在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();
此控件只有一个文本框和一个按钮。
答案 0 :(得分:0)
您的问题并不能说明您遇到的问题。
但是,如果要在事件处理程序中动态添加控件,则每次加载页面时,都需要以相同的顺序和相同的ID重新创建和重新添加控件。这将要求你保持跟踪 - 在某些持久性的地方,比如在ViewState中 - 你添加了多少控件,以及(如果它可以改变)你在哪个控件的Controls集合中添加它们。
ViewState可以恢复其状态,但它们必须已经存在于页面的控制树中才能实现。因此需要重新创建它们。微软提供的控件如GridView在内部执行(这就是为什么,即使你不重新绑定它们,它们引发DataItemCreated事件),但如果你是创建并添加它们以响应事件的那个,你是负责在回发后重新创建它们。
要记住的是,页面加载时自动创建的唯一控件是声明为标记的控件。每一件事,你都需要每次都添加。