Domanda

Sto passando dall'ASP classico ad ASP.NET e ho riscontrato ciò che molti di voi conoscono già come "viewstate". Potrei saltare la pistola con la mia ipotesi, ma sembra molto ingombrante. Ho sviluppato molte forme ASP in passato e non ho mai avuto problemi con il mantenimento dello stato. C'è un altro modo O dovrò imparare questa cosa Viewstate in ASP.NET? Sto usando Visual Studio 2008, VB.NET come codice dietro il linguaggio e Framework v3.5 con SQL Server 2005.

È stato utile?

Soluzione

Non è necessario. Scopri framework MVC . Elimina ViewState e funziona come vecchio ASP (almeno da questo punto di vista).

Altri suggerimenti

Questa serie di post deve essere letta per comprendere ViewState

Lo disabilito e faccio la maggior parte del mio lavoro in Page_Init anziché in Load (i valori sono ancora mantenuti a causa di ControlState). Questa configurazione ha funzionato bene per me.

ViewState è facoltativo, ma utile. Che cos'è ViewState, sono tutte le modifiche che si verificano su un controllo sul SERVER SIDE. Quindi, se stai assegnando del testo a un'etichetta e vuoi che il testo persista senza la necessità di riassegnarlo su ogni postback, ti ??consigliamo di mantenerlo. Un altro esempio in cui lascio sempre ViewState attivo è qualcosa di databound.

Detto questo, ci sono momenti in cui è utile disattivare ViewState per lo stesso motivo. Ad esempio, l'unico posto in cui sempre spengo ViewState è un'etichetta MESSAGGIO. In questo modo, quando devo stampare un messaggio per l'utente (che dovrebbe apparire solo una volta e poi andare via) aggiungo semplicemente il testo all'etichetta e poi me ne dimentico. Durante il successivo PostBack, l'etichetta tornerà automaticamente al testo che si trova nella dichiarazione ASPX per quel controllo (in questo caso una stringa vuota).

Ora, nota che questo non ha nulla a che fare con la collezione di moduli, che sono i valori inviati a IIS durante il PostBack. La raccolta di moduli invia i valori immessi dall'utente negli elementi del modulo (caselle di testo, caselle di controllo, elenchi a discesa, ecc.). Questi .NET verranno inseriti nella posizione appropriata e ciò si verifica DOPO ViewState è stato elaborato.

In questo modo, se invii una casella di testo con la frase "ciao" " al cliente, l'utente lo cambia in " Vedi ya " e quindi invia il modulo, che cosa avrà la casella di testo quando verrà generato l'evento Page_Load è una casella di testo con " Vedi ya " nell'attributo TEXT.

Nel classico ASP abbiamo sempre usato un campo NASCOSTO per fare il lavoro. Viewstate è solo un modo per farlo automaticamente per te. Fidati di me, la curva di apprendimento non è così alta come potresti pensare.

Alcuni controlli sono profondamente paralizzati quando si spegne ViewState, quindi preparatevi a risolvere questi problemi. È più semplice essere pigri e lasciarlo acceso, ma lasciato deselezionato, ViewState può facilmente rappresentare il 30% delle dimensioni del tuo HTML.

Ad esempio, supponi di avere un DropDown e lo associ a un elenco di frutti. Lo associ nel blocco if (! IsPostBack) {} nel caricamento della pagina. Se disattivi ViewState, perderai gli oggetti quando fai clic su un pulsante. Devono essere associati ad ogni caricamento della pagina. Perderai anche l'indice selezionato, quindi dovrai estrarlo dalle variabili Request.Form [].

Viewstate fa parte del pacchetto quando si lavora con ASP.NET. Per una pagina / sito Web di base non dovresti "sapere" come utilizzare Viewstate. Viene semplicemente utilizzato quando si inseriscono i controlli nelle pagine.

È abbastanza difficile evitare Viewstate con ASP.NET perché anche se lo si spegne a livello di progetto, alcuni controlli individuali usano ancora Viewstate per conservare le proprie informazioni.

Se non si desidera gestire Viewstate, considerare l'utilizzo del framework MVC ASP.NET. Probabilmente ti sentirai più a tuo agio con il framework MVC proveniente dall'ASP classico.

ViewState è completamente opzionale in quasi tutti, se non in tutti i casi. ASP.NET popola nuovamente i campi automaticamente anche se ViewStateEnabled = false. Uso ASP.NET da 5 o 6 anni e non ho mai dovuto dipendere da ViewState. Lo disabilito anche quando posso.

ViewState funziona automaticamente per la maggior parte. È proprio come ASP.NET tiene traccia dello stato corrente di tutti i suoi controlli.

Puoi anche usare manualmente viewstate, se vuoi archiviare alcuni dati extra. È semplice come:

Viewstate["Key"] = value;

L'unica avvertenza è che qualsiasi oggetto memorizzato in viewstate deve essere serializzabile.

Posso assolutamente consigliare di evitare ViewState in DataGrids e DropDownLists perché di recente ho iniziato a farlo da solo. Non l'ho fatto per divertimento, ho dovuto riparare una pagina che era diventata così grande da causare altri problemi. Ma questo si è rivelato facile e i risultati sono stati così drammatici che mi fa molto piacere. Ovviamente per una piccola app semplice o per piccole quantità di dati questo non sarà necessario, ma d'altra parte è bene essere coerenti (passare sempre dal noto al noto in modo da poter migliorare continuamente il processo ...), e perché portare con sé un bagaglio extra, mai?

Ciò richiederà un piccolo intervento manuale da parte tua. Ad esempio, se si disattiva viewstate per gli elenchi a discesa, è necessario ricollegarli su ciascun postback e quindi ripristinare SelectedValue dall'oggetto Request. Dovrai leggere questo, ma google ha molte informazioni prontamente disponibili.

Viewstate viene mantenuto automaticamente per i controlli asp.net " rooted " alla pagina. C'è poco da fare, i valori e alcune altre informazioni vengono passati in un input nascosto codificato B64. Puoi guardarlo se vuoi, ma non importa, è tutto gestito automagicamente per te.

Se stai scrivendo codice per il tuo consumo, puoi semplicemente disattivarlo e non preoccuparti.

Presumibilmente manterrai il codice dei moduli Web scritto da altre persone, quindi dovresti sapere quali sono le opzioni di configurazione e i punti deboli. I primi che mi vengono in mente

  • come disabilitarlo su sito, pagina e livello di controllo
  • perché MachineKey è rilevante nelle web farm
  • perché il registro eventi è pieno di errori ViewStateAuthentication
  • cos'è ViewStateUserKey

In termini di curva di apprendimento effettiva, questa è probabilmente una lettura approfondita di un paio di articoli MSDN.

ViewState è un male necessario inerente alla metafora dei moduli web. Personalmente trovo questa metodologia obsoleta, gonfia e generalmente non adatta al web. Meglio dare un'occhiata al framework MVC come suggerito sopra.

Ti suggerisco di evitare la tentazione di usare ViewState come "cache" per passare i dati avanti e indietro (ho visto siti Web fare questo a causa della configurazione in cluster e nessuno stato della sessione supportato da SQL). I dati sono serializzati e aggiunti alla pagina e devono fare il viaggio di andata e ritorno per ogni richiesta, aggiungendo alla dimensione totale della pagina e rallentando il caricamento del sito.

'<%@ Control Language="C#" AutoEventWireup="true" CodeFile="HomePage.ascx.cs" Inherits="HomePage" %>
<script runat="server">
  void testHF_ValueChanged(object sender, EventArgs e)
    {
       this.HFvalue.Text = this.testHF.Value ;

    }
</script>
<asp:Label ID="UserNamelbl" runat="server" Text="User Name : " Visible="false"></asp:Label>
<asp:TextBox ID="UserNametxt" runat="server" Visible="false" ></asp:TextBox>
 <asp:Label ID="HFvalue" Text="......" runat="server"></asp:Label>
 <asp:HiddenField ID="testHF"
OnValueChanged="testHF_ValueChanged"
value="" 
runat="server" ></asp:HiddenField>
<input type="submit" name="SubmitButton" value="Submit" onclick="CL()" />

<script type="text/javascript">
    function CL() 
    {
        this.testHF.Value = this.UserNametxt.Text;  
    }
</script>
'
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top