Controlli server Web dinamici e stato di visualizzazione

Aggiornamento: novembre 2007

Quando un controllo server Web viene creato dinamicamente in fase di esecuzione, alcune informazioni relative al controllo vengono memorizzate nello stato di visualizzazione di cui viene eseguito il rendering con la pagina. Quando tuttavia la pagina viene rinviata al server, nell'evento Init viene creata un'istanza dei controlli non dinamici definiti nella pagina e le informazioni sullo stato di visualizzazione vengono caricate prima che i controlli dinamici possano essere ricreati, in genere nel gestore Page_Load. In realtà, prima che i controlli dinamici vengano ricreati, lo stato di visualizzazione risulta temporaneamente non sincronizzato con i controlli della pagina. Una volta eseguito l'evento Page_Load, ma prima della chiamata dei metodi di gestione degli eventi di controllo, le rimanenti informazioni sullo stato di visualizzazione vengono caricate nei controlli creati dinamicamente.

Tale modello di elaborazione dello stato di visualizzazione risulta appropriato per la maggior parte degli scenari. I controlli dinamici vengono in genere aggiunti alla fine di un insieme di controlli di un contenitore. Le informazioni sullo stato di visualizzazione memorizzate per i controlli dinamici risultano pertanto aggiuntive e inserite alla fine della struttura dello stato di visualizzazione per il contenitore appropriato e possono essere ignorate dalla pagina fino al momento della creazione dei controlli.

Le informazioni sullo stato di visualizzazione per controlli creati dinamicamente possono tuttavia rivelarsi problematiche in due scenari:

  • Se i controlli dinamici vengono inseriti tra controlli esistenti

  • Se i controlli vengono inseriti in modo dinamico e quindi reinseriti durante un percorso di andata e ritorno, ma con valori diversi

Se i controlli dinamici vengono inseriti tra controlli esistenti, le informazioni sullo stato di visualizzazione del controllo dinamico vengono inserite nella posizione corrispondente della struttura dello stato di visualizzazione. Quando la pagina viene inviata e lo stato di visualizzazione viene caricato, il controllo non esiste ancora, pertanto le informazioni aggiuntive nello stato di visualizzazione non sono riferite al controllo corretto. Ne risulta in genere un errore che indica un cast non valido.

Se i controlli vengono reinseriti a ogni percorso di andata e ritorno, ogni volta che verranno generati i controlli creati dinamicamente, i valori delle proprietà verranno ottenuti dallo stato di visualizzazione dell'insieme di controlli precedenti. In molti casi è possibile ovviare al problema impostando la proprietà EnableViewState del controllo contenitore su false. In tal caso non verranno salvate informazioni sui controlli dinamici e non esisterà alcun conflitto con le successive versioni dei controlli.

Per informazioni dettagliate sullo stato di visualizzazione, vedere

Cenni preliminari sul ciclo di vita di una pagina ASP.NET

Cenni preliminari sulla gestione dello stato ASP.NET e ViewState.

Vedere anche

Altre risorse

Aggiunta di controlli ASP.NET a livello di codice

Impostazione delle proprietà dei controlli server ASP.NET a livello di codice