2012-08-03 145 views
8

sto ricevendo il seguente messaggio di errore dopo un HTTP POST su un modulo ASP.NET ospitata all'interno di un UserControl:Impossibile caricare viewstate. L'albero di controllo in cui viewstate viene caricata

Impossibile caricare viewstate. L'albero di controllo in cui viene caricato lo stato di visualizzazione deve corrispondere all'albero di controllo utilizzato per salvare il viewstate durante la precedente richiesta. Ad esempio, quando si aggiungono controlli dinamicamente, i controlli aggiunti durante un postback devono corrispondere al tipo e alla posizione dei controlli aggiunti durante la richiesta iniziale.

Ecco informazioni aggiuntive:

  • Io corro .NET 4.5 RC
  • E 'un sito Umbraco 4.7 basata
  • Sulla mia macchina dev locale sotto forma funziona perfettamente
  • Questo errore si verifica solo sul server di staging che ha .NET 4.5 (solo), MSSQL 2012 Express, IIS 7.5, Windows 7 (lo so, non è ancora un vero server, forse un giorno ...)
  • Il server non è parte di una web farm (o giardino, tho che dovrebbe essere irrevelant) controllo
  • L'utente fa rendono controlli in modo dinamico

Ho applicato tutti i service pack più recenti. Ora ho esaurito le idee! L'ho persino riavviato e ho anche eseguito un richiamo sul server coinvolgendo una canzone e una danza speciale senza successo.

Grazie per qualsiasi assistenza o idee!

+0

questo post del blog mi ha aiutato con la maggior parte dei miei problemi di viewstate http://weblogs.asp.net/infinitiesloop/archive/2006/08/03/Truly-Understanding-Viewstate.aspx – gsharp

risposta

1

OK, quindi la risposta è letteralmente: "Impostare un nuovo server con lo stesso software come l'ultimo e riprovare" e funziona ora.

+1

NOTA: oh no, il problema è tornato dopo l'installazione di Windows 8/.NET 4.5 RTM. – krisdyson

+1

La causa del problema sembra essere qualcosa a che fare con System.Web.Optimization Bundles come funziona quando lo spengo – krisdyson

+1

OK, posso vedere che aggiungendo System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl alla mia pagina Master impedisce a ViewState di funzionare correttamente. – krisdyson

18

Ciò che è importante quando si aggiungono i controlli dinamicamente è su quale evento li si sta aggiungendo.

Se sono stati aggiunti controlli sugli eventi che si verificano dopo il caricamento, faranno parte del viewstate che si invia al client.

È necessario aggiungere nuovamente questi controlli prima che venga chiamato LoadViewState.

Se si esegue in casi in cui la decisione di quale controlla aggiungere è a sua volta immagazzinate nella ViewState o il valore di un controllo, poi ricordare anche prima della ViewState è caricato, questo dato è disponibile in Request.Params

Suggerire il asp.net page life cycle

Page life cycle

+0

grazie per questo ... tuttavia, visto che funziona sulla mia macchina di sviluppo, è altamente improbabile che si tratti di un bug di codifica, altrimenti tutto si interromperà costantemente quando lo si distribuisce. – krisdyson

+1

Se non riesce per lo stesso test case sul server, sono fuori di idee. Ma questo è di solito un errore di codifica. Non ho mai visto un errore di distribuzione. – nunespascal

+0

Sì esattamente! Posso fare qualcosa per la codifica dei bug, ma questo è solo strano. grazie comunque – krisdyson

16

Ho appena aggiunto EnableViewState="false" al segnaposto della mia pagina ed è andato. Spero che funzioni anche per te.

+2

Sto ricevendo anche questo errore, nella mia pagina è gridview e con 'EnableViewState =" False "' di gridview il problema è risolto. – user618612

3

Questo errore si verifica principalmente durante lo stato di visualizzazione Modifica: da un modello all'altro Modello come nel caso del modello di elemento, Modifica modello di elemento, in Controlli come Vista modulo, Visualizzazioni elenco, Vista dettagli, Vista griglia in ASP.rete (tutti i quadri);

Durante la sostituzione da parte degli Stati di controllo dicono Item Template ---> Edit Template i seguenti stavano andando ad alterare

1) Controls cambierà (il suo ID & Uniti)

2) le sue posizioni cambieranno.

Mentre Trasformazione di vista qualsiasi post, se si verifica di nuovo si otterrà errore come

Impossibile caricare viewstate. L'albero di controllo in cui è viewstate essere caricato ....

se si utilizza il controllo separato per associazione dati come (Button, eventi link_button_Image_button) Otterrete questo errore riportato!

Per evitare questo errore >>>Una volta che lo stato passa da un modello ad un altro all'interno del metodo, si chiama l'associazione dell'origine dati (Non chiamare durante il clic o qualsiasi evento di supporto post).

+0

Grazie amico Giusto motivo che hai dato – Arindam

0

Aggiungo l'attributo "nome" con lo stesso valore di id, quindi questo problema è scomparso.

<input type="button" id="extractBomInfoBtn" name="extractBomInfoBtn" value="Extract" class="button textonly" /> 
0

Verificare se si dispone del metodo di associazione del controllo direttamente nell'evento di caricamento della pagina. Questo può causare questo problema.

0

È possibile aggiungere nuovi PlaceHolder per UserControls

O

È possibile impostare enableviewstate=false sul controllo, se non avete bisogno ViewState

0

Nel mio caso ho avuto una visualizzazione a griglia con (OnPageIndexChanging) evento e quando clicco su una pagina non accadrà nulla finché non lo clicerò due volte!

Stavo aggiornando l'origine dati prima di impostare un nuovo indice di pagina.


Questo è quello che stavo facendo male

grd.DataSource = data; 
grd.DataBind(); 
grd.PageIndex = e.NewPageIndex; 

Questo è il modo giusto

grd.PageIndex = e.NewPageIndex; 
grd.DataSource = data; 
grd.DataBind(); 
0

Ho avuto lo stesso problema. Questo problema era alla fine del client ma non si è verificato nel mio sistema locale. Dopo ore di googling, avevo scritto EnableViewState = "false" sul mio tag table nella pagina aspx che ha tutti i controlli dinamici e quindi ho rimosso tutte le variabili viewstate e invece ho creato alcune caselle di testo nascoste nella pagina aspx e accettato i valori DB in loro nel codice dietro e li ho usati per tutto il mio codice. Quindi ha risolto il mio problema. Ma ancora, non riuscivo a capire quale fosse esattamente il problema.

0

Ciò può accadere se si esegue l'override di SaveViewState nel proprio controllo ma non si esegue l'override di LoadViewState.