2010-02-11 7 views
8

Sto caricando un controllo utente programatically così:controlli figlio sono nulli durante il caricamento di controllo utente a livello di codice tramite LoadControl (Type, Object []) sovraccarico

 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 questo costruttore:

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

    } 

Il problema che ho è che tutti i controlli nei miei controlli utente sono nulli, c'è qualcos'altro che devo fare per caricare i controlli figlio?

risposta

17

Questo è di progettazione. Un file .ascx eredita effettivamente dalla classe code-behind, quindi l'.ascx è un tipo derivato della classe code-behind.

Ciò significa che quando si carica la classe genitore code-behind utilizzando il metodo LoadControl(Type, object[]), viene istanziata la classe padre definita nel code-behind e non la classe .ascx derivata che contiene i controlli figlio.

Se si utilizza il sovraccarico Page.LoadControl(string), funzionerà come si desidera, in quanto può trovare correttamente il modello, trovare la classe .ascx compilata e caricarla.

L'altra alternativa consiste nell'istanziare tutti i controlli nel file .ascx utilizzando il code-behind anziché il markup.

+0

Questo non ha funzionato per me. Non importa cosa ho fatto, sto ricevendo l'eccezione di riferimento null. –

Problemi correlati