Quando si estende un controllo Web asp.net, a quale evento devono essere iniettati controlli Web aggiuntivi?
-
08-07-2019 - |
Domanda
Sto cercando di evitare un controllo composito o usando e ASCX estendendo un controllo esistente. Tuttavia, ho problemi con l'aggiunta dei controlli al controllo ereditato e mantengo la loro integrità di visualizzazione / post-back. Ogni volta che aggiungo i controlli durante il pre-rendering, i controlli vengono visualizzati, ma il post-back genera un'eccezione viewstate. Ho provato ad aggiungerli sia lì che durante LoadViewState (che ovviamente era uno sciocco da lungo tempo). Init non è disponibile dal controllo che sto estendendo.
L'eccezione è Sys.WebForms.PageRequestManagerServerErrorException: Caricamento viewstate non riuscito. Il controllo albero in cui si trova il viewstate caricato deve corrispondere all'albero di controllo che è stato usato per salvare viewstate durante la richiesta precedente. Per esempio, quando si aggiungono i controlli in modo dinamico, il controlli aggiunti durante un post-back devono corrisponde al tipo e alla posizione del file controlli aggiunti durante l'iniziale Richiesta ??p>
Soluzione
In realtà, microsoft dice che dovresti scavalcare Metodo CreateChildControls .
Puoi chiamare il metodo della classe base prima o dopo aver aggiunto i controlli, non sono sicuro che ci sia una convenzione lì.
protected override void CreateChildControls(){
Controls.Add(someControl);
base.CreateChildControls();
}
Spero che ti aiuti!
Altri suggerimenti
Dovresti aggiungerli in OnInit o in CreateChildControls. Ad ogni modo, per evitare problemi con ViewState, leggi questo GRANDE articolo . Eventualmente, campiona "4. Inizializzazione dei controlli figlio a livello di codice " è il tuo caso.