2010-07-01 14 views
7

Come ottenere il controllo nell'evento PreInit ASP.NET? I puntatori sono nulli e il metodo FindControl restituisce null.Come ottenere il controllo nell'evento PreInit ASP.NET?

Sto utilizzando le pagine principale e di contenuto. Markup della pagina di contenuto simile a questo:

<asp:Content ID="Content2" ContentPlaceHolderID="ContentBody" runat="server"> 
    <asp:Table ID="Table1" runat="server" Width="100%"> 
     ..... 
    </asp:Table> 
</asp:Content> 

E codice come questo:

private void Page_PreInit(object sender, EventArgs e) 
{ 
    Control table = this.FindControl("Table1"); 
    //table is null here 
} 

Così tavolo è ancora nulla dopo this.FindControl ("Table1"). Anche NamingContainer della pagina è nullo. Che cosa sto facendo di sbagliato?

UPDATE Devo utilizzare questo evento per creare controlli. Come detto nello ASP.NET Page Life Cycle Overview, questo evento dovrebbe essere usato per la creazione del controllo dinamico. Devo creare un elenco di collegamenti nella mia tabella. Potrebbe esserci un altro modo per farlo?

+0

Non sono sicuro di quello che stai facendo male. Devi usare l'evento PreInit? Puoi usare un evento successivo come Init? –

+0

Come Matthew dice che un evento successivo potrebbe adattarsi meglio a te. Sospetto che sia in init che un sacco di controlli vengono messi insieme quindi se provi ad accedere a cose troppo presto nel ciclo di vita, tutto va in pezzi. http://msdn.microsoft.com/en-us/library/ms178472.aspx potrebbe essere utile se non lo hai già visto. – Chris

+0

Dopo aver letto la modifica, in genere aggiungo elementi all'albero di controllo nell'evento page_load. Non sono sicuro di quale sia la parte che hai citato si riferisce ad essere onesto, ma non credo che significhi solo aggiungere un link a una pagina ... – Chris

risposta

4

PreInit viene generato prima dell'inizializzazione dei controlli. Leggi su ASP.NET Page Life Cycle per informazioni più dettagliate.

Init
Cresciuto dopo tutti i controlli sono stati inizializzati e sono state applicate tutte le impostazioni della pelle . L'evento Init dei singoli controlli avviene prima dell'evento Init della pagina.

Utilizzare questo evento per leggere o inizializzare le proprietà di controllo .

+0

Vedere il mio aggiornamento. –

0

In caso PreInit(), standard di controlli (definiti) non sono stati ancora creato in quella fase, quindi non è possibile ottenere qualsiasi riferimento ad eventuali controlli.

Utilizzare l'evento Page_Load() per creare controlli dinamici. Durante questo evento, puoi aggiungere eventuali controlli dinamici ai controlli esistenti.

Dopo aver creato i controlli dinamici in Page_Load(), utilizzare PreRender() per apportare eventuali modifiche/aggiornamenti.

Personalmente, utilizzo PreInit per definire gli oggetti a larghezza di pagina (ad esempio, le connessioni di database, gli oggetti di sessione utente) e anche dove eseguo solo i controlli di autenticazione di sicurezza (e reindirizzamenti se non autorizzati).

1

L'evento PreInit della pagina viene attivato prima dell'inizializzazione dei controlli, quindi i controlli non esistono ancora. Dovrai accedere al controllo in un evento successivo, come l'evento Load della pagina. Si prega di vedere http://msdn.microsoft.com/en-us/library/ms178472.aspx.

Problemi correlati