Control de usuario personalizado ASP.NET para agregar dinámicamente

Tengo dificultades para modificar una página que tenía un control de usuario personalizado directamente en la página ASPX y ahora necesito que se cargue dinámicamente solo cuando sea necesario. El Control de usuario tiene html y otros controles a través del archivo ASCX y tiene código en el código subyacente.

He leído varias páginas y he descubierto que no puedo instanciar directamente el Control de usuario, pero debería usar Page.LoadControl(...) . El problema no es la comstackción, sino que cuando la página carga el control ocurre que todos los controles dentro de ASCX son nulos y luego se bloquean.

¿Cómo puedo usar un Control de usuario que tenga código en ASCX y en código subyacente de forma dinámica?

Editar:

Ejemplo de lo que estoy haciendo en (PageLoad o PagePreRender o PagePreInit)

  Control c = LoadControl(typeof(MyControl), null); myControl= (MyControl)c; myControl.ID = "123"; myControl.Visible = false; Controls.Add(myControl); 

MyControl tiene, por ejemplo,

… y dentro de MyControl establece la visibilidad en True o False … pero cuando lo hace, ahora se cuelga porque el “lo que sea” div es NULL.

Lo que he hecho es utilizar el método Page.LoadControl en la página_Inicio para agregar el control de usuario personalizado a un marcador de posición en la página.

  protected void Page_Init(object sender, EventArgs e) { //MyControl is the Custom User Control with a code behind file MyControl myControl = (MyControl)Page.LoadControl("~/MyControl.ascx"); //UserControlHolder is a place holder on the aspx page where I want to load the //user control to. UserControlHolder.Controls.Add(myControl); } 

Esto funciona bien para mi.

Aquí está el código para el control de usuario cargado dinámicamente:

MyControl.ascx.cs

 public partial class MyControl : System.Web.UI.UserControl { protected void Page_Init(object sender, EventArgs e) { LiteralControl lit = new LiteralControl("Test Literal Control"); Page.Controls.Add(lit); } protected void Page_Load(object sender, EventArgs e) { whatever.Visible = true; if (IsPostBack) { whatever.Visible = false; } } }