ASP.net ViewState - Anche se disabilitato, esiste un certo viewstate. Perché?

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

  •  03-07-2019
  •  | 
  •  

Domanda

Anche quando nella pagina, la proprietà EnableViewState è disabilitata, vedo ancora alcuni viewstate esistenti sulla pagina:

"<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="VkBAB3n5LZYtY+nTzk1vEu1P/6QLf4qzFIKzpFRJe3DMf8UseUA/1RsO409HJX4QhkROSP0umoJvatjK/q+jXA==" />"

La mia domanda è: perché?

È stato utile?

Soluzione

Potrebbe trattarsi di controlli che utilizzano ControlState. Qualsiasi controllo con stato di controllo ignorerà le impostazioni di ViewState.

Altri suggerimenti

È lo stato di controllo.

Se vuoi davvero sbarazzarti di viewstate e controlstate puoi usare questo codice nel code-behind per la pagina, o in qualsiasi classe da cui deriva il code-behind

class MyPage : Page {
    private class DummyPageStatePersister : PageStatePersister {
        public DummyPageStatePersister(Page p) : base(p) {}
        public override void Load() {}
        public override void Save() {}
    }
    private DummyPageStatePersister _PageStatePersister;
    protected override PageStatePersister PageStatePersister {
        get {
            if (_PageStatePersister == null)
                _PageStatePersister = new DummyPageStatePersister(this);
            return _PageStatePersister;
        }
    }

    // other stuff comes here
}

Stai molto attento quando fai questo, poiché stai violando il contratto con i controlli. MSDN afferma esplicitamente che lo stato di controllo è sempre disponibile. In pratica, tuttavia, ha funzionato per me.

Modifica Da quando sono stato sottoposto a downgrade, mi piace sottolineare ancora: non farlo a meno che tu non sappia esattamente cosa stai facendo. Nel mio caso, quasi l'intera applicazione è stata scritta in javascript sul lato client e in quelle poche occasioni in cui si sono verificati i postback, ho sempre usato la raccolta Request.Form per recuperare i valori. Non utilizzare i controlli sul lato server se non per un semplice rendering.

Questo articolo è un po 'vecchio ma a mio avviso la maggior parte dei punti sono ancora validi:

  1. È necessario disporre di un tag modulo lato server () nella pagina ASPX se si desidera utilizzare ViewState. È richiesto un campo modulo in modo che il campo nascosto che contiene le informazioni di ViewState possa essere postato sul server. Inoltre, deve essere un modulo sul lato server in modo che il framework di pagine ASP.NET possa aggiungere il campo nascosto quando la pagina viene eseguita sul server.
  2. La pagina stessa salva circa 20 byte di informazioni in ViewState, che utilizza per distribuire i dati PostBack e i valori ViewState ai controlli corretti al postback. Pertanto, anche se ViewState è disabilitato per la pagina o l'applicazione, è possibile che vengano visualizzati alcuni byte rimanenti in ViewState.
  3. Nei casi in cui la pagina non viene pubblicata, è possibile eliminare ViewState da una pagina omettendo il tag lato server.

http://msdn.microsoft.com/en-us/library /ms972427.aspx

Questo è un articolo assolutamente fantastico su ViewState se sviluppi in ASP.NET leggilo!

ASP.NET ViewState Helper è anche uno strumento utile per vedere cosa sta succedendo nel ViewState

Controlstate può essere la causa. Lo stato di controllo non può essere disabilitato. In ASP.NET 2.0 esiste una distinzione tra i dati necessari per far funzionare un controllo (controlstate) e altri dati (viewstate)

E sì, alcuni dei controlli non funzionano senza controlstate. Se vuoi sapere quale lo sta causando o cosa contiene il viewstate controlla un visualizzatore viewstate

I controlli che implementano IPostBackEventHandler come Casella di testo, Casella di controllo, ecc. . manterrà lo stato anche dopo aver disabilitato viewstate. Il motivo è durante la fase di caricamento dei dati di postback, questi controlli otterranno informazioni sullo stato dal modulo inviato indietro

Ma controlli come etichetta che non implementano IPostBackEventHandler non otterranno alcuna informazione sullo stato dai dati postati e quindi dipenderanno interamente da viewstate per mantenere lo stato.

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