2009-05-14 16 views
5

Quando è possibile disabilitare safe viewstate? Per quali controlli? Sotto quali circonstanze?Quando è possibile disabilitare safe viewstate?

in un controllo utente devo ViewState disabile, ma se tento di fare clic in questo controllo

<asp:LinkButton ID="LinkButton1" runat="server" 
    CommandName="Delete" 
    OnClientClick="return confirm('¿Está seguro que desea eliminar el mensaje?');" 
    EnableViewState="true"> 
    <asp:Image ID="ImageButton1" runat="server" ImageUrl="~/Content/Images/delete.png" 
     ToolTip="Eliminar mensaje" /> Eliminar 
</asp:LinkButton> 

ottengo un'eccezione System.InvalidOperationException. È all'interno di un ListView.

risposta

3

La maggior parte dei controlli si comporta come ci si aspetterebbe dal viewstate disabilitato. I controlli più "dinamici" con funzionalità incorporate come Gridviews tendono a non giocare bene senza viewstate.

Sei sicuro che l'eccezione sia correlata al viewstate dato che hai la proprietà enableviewstate impostata su true sul tuo controllo?

+0

bene, l'eccezione era perché non ho impostato il propertie DataKeyNames. Ma la domanda è ugualmente valida, non è vero? – eKek0

0

È sempre possibile disabilitare lo stato di visualizzazione. Se lo fai devi trovare altri modi per mantenere lo stato per la pagina se è necessario. Il modo è utilizzare i metodi antiquati dei campi di moduli nascosti.

Finché non vengono inseriti oggetti grandi e complessi in viewstate, in genere non è necessario disattivarlo.

8

Si riduce alla necessità o meno che la pagina ricordi le cose attraverso i postback. Se si sta ricreando o l'assegnazione di valori su ciascuna ViewState postback non è necessario

Here's un paio di buoni spunti

valore in modo dinamico inseriti sui controlli (Legandosi o programmazione assegnazione) - I valori di questo controllo non verrà mantenuto quando è rerenderizzato, ad es. Passaggio da view1 a view2. Ma si bisogna considerare due cose, se si pensa ripopolare i valori per ogni rendering è troppo pesante per implementare allora non disattivare il ViewState, se poi non si può disattivare e reinizializzare i controlli sul rendere evento. Perché sto suggerendo questo? È perché l'elaborazione del codice server è molto più veloce del trasferimento di una grande quantità di dati di rifiuti al server e al cliente durante i viaggi di andata e ritorno.

Su Datalist e DropDownList: se non si utilizza l'evento di modifica di OnSelectedIndex , è possibile disabilitare lo stato di visualizzazione .

Su Gridviews - Questa è la parte più difficile da decidere se disabilitare lo stato di visualizzazione o conservarlo. Se si è solo visualizzando i dati su di esso o anche utilizzandolo solo per la selezione, quindi disabilitare il viewstate. Se si è utilizzando la funzionalità di paging, modificare o eliminare la funzionalità , non farlo. Gridview ha la più grande capacità di visualizzazione dello stato, quindi è necessario utilizzarlo con saggezza nello . Se devi aggiornare fino a 5 colonne, allora perché non basta aprire un'altra vista quindi impostare i valori che devono essere aggiornati piuttosto piuttosto che aggiornarlo direttamente sul gridview .

0

Se si utilizza quindi .net framework 2.0 o versione successiva del framework, è possibile utilizzare una nuova funzionalità denominata stato di controllo anziché stato di visualizzazione. È molto più veloce in termini di prestazioni rispetto al viewstate.

Per maggiori dettagli vedi sotto siti ...

http://www.pluralsight.com/community/blogs/fritz/archive/2004/07/01/472.aspx

http://msdn.microsoft.com/en-us/magazine/cc163901.aspx

http://www.codeproject.com/KB/user-controls/TestControlStateEx.aspx