route - Control de usuario personalizado de ASP.NET para agregar dinĂ¡micamente.
asp-for select (1)
Tengo dificultades para modificar una página que tenía un Control de usuario personalizado directamente a 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 un código en el código subyacente.
He leído varias páginas y he descubierto que no puedo crear una instancia directamente del Control de usuario, pero debería usar el Page.LoadControl(...)
. El problema no es la compilación, pero cuando la página carga el control, sucede que todos los controles dentro del ASCX son nulos y luego se bloquean.
¿Cómo puedo usar un Control de usuario que tiene código en el ASCX y en el código subyacente dinámicamente?
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, <div id="whatever" runat="server">
... y dentro de MyControl establece la visibilidad en Verdadero o Falso ... pero cuando lo hace, ahora se bloquea porque "lo que sea" div es NULL.
Lo que he hecho es usar el método Page.LoadControl en Page_Init 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;
}
}
}