C# 以编程方式添加的用户控件不会创建其子控件

C# 以编程方式添加的用户控件不会创建其子控件,c#,asp.net,user-controls,C#,Asp.net,User Controls,我在项目中有一个用户控件(.ascx),我正在以编程方式将其添加到页面的page_Load事件处理程序中的页面中,如下所示: Controls.Add(new MyProject.Controls.ControlWidget()); Databind(); 当我试图从控件本身访问控件的子控件时,它们不存在 public override void DataBind() { myrepeater.DataSource = GetDataSource(); // throws an ex

我在项目中有一个用户控件(.ascx),我正在以编程方式将其添加到页面的page_Load事件处理程序中的页面中,如下所示:

Controls.Add(new MyProject.Controls.ControlWidget());
Databind();
当我试图从控件本身访问控件的子控件时,它们不存在

public override void DataBind()
{
  myrepeater.DataSource = GetDataSource(); 
  // throws an exception because myrepeater is null

  base.DataBind();
}

如何访问用户控件的子控件?我尝试将EnsureChildControl()的调用添加到我的DataBind()覆盖中,但这似乎没有什么区别。

您需要使用LoadControl来加载它,而不仅仅是实例化类。LoadControl在幕后发挥“魔力”,将所有内容捆绑起来并实例化前端。

编辑:我不理解你的问题

尝试将UserControl添加到页面:

UserControl uc = new UserControl();
uc.LoadControl(Server.MapPath("MyUserControl.ascx");
this.Controls.Add(uc);

只需在页面上使用LoadControl。