Quando si estende un controllo Web asp.net, a quale evento devono essere iniettati controlli Web aggiuntivi?

StackOverflow https://stackoverflow.com/questions/296609

  •  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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top