2010-02-11 11 views
8

Estoy cargando un control de usuario mediante programación como esto:controles secundarios son nulas cuando se carga control de usuario mediante programación a través de LoadControl (Tipo, objeto []) sobrecarga

 protected void Page_Load(object sender, EventArgs e) 
    { 
     // LinqDataSource1.TableName = string.Format("{0}s", _table.Context.Mapping.GetMetaType(_type).Name); 
     _control = Page.LoadControl(typeof(CatalogoGenerico), new object[] { typeof(CTG_ENT_ENTIDAD) }) as CatalogoGenerico; 
     PlaceHolder1.Controls.Add(_control); 
    } 

con este constructor:

 public CatalogoGenerico(Type type):this() 
    { 
     _db = new DataClasses1DataContext(); 
     _type = type; 

    } 

El problema que tengo es que todos los controles en mis controles de usuario son nulos, ¿hay algo más que deba hacer para cargar los controles secundarios?

Respuesta

17

Esto es por diseño. Un archivo .ascx realmente hereda de la clase de código subyacente, por lo que .ascx es un tipo derivado de la clase de código subyacente.

Esto significa que cuando carga la clase principal de código subyacente utilizando el método LoadControl(Type, object[]), crea una instancia de la clase primaria definida en el código subyacente y no de la clase derivada .ascx que contiene los controles secundarios.

Si usa la sobrecarga Page.LoadControl(string), funcionará como lo desee, ya que puede encontrar la plantilla correctamente, buscar la clase compilada .ascx y cargarla.

La otra alternativa es crear una instancia de todos los controles en su archivo .ascx utilizando el código subyacente en lugar del marcado.

+0

Esto no funcionó para mí. No importa lo que hice, obtengo la excepción de referencia nula. –

Cuestiones relacionadas