Ho una casella di testo e un pulsante sulla mia pagina .aspx. La proprietà EnableViewState della casella di testo è impostata su false. Ma quando inserisco del testo nella casella di testo e clicco sul pulsante il testo inserito è ancora presente nella casella di testo. Mi aspetto che la casella di testo sia vuota poiché EnableViewState è impostato su false. Mi sto perdendo qualcosa?ASP.NET Come funziona ViewState
risposta
Controllare this Code Project article per comprendere meglio i dati di ViewState e Postback.
Si tratta di qualcosa di simile a:
Perché alcuni controlli mantengono valori anche dopo la disattivazione del ViewState , mentre altri non lo fanno?
La risposta è Controls che implementa
IPostBackEventHandlerIPostBackDataHandler come Textbox, Casella, ecc manterrà stato anche dopo aver disattivato il viewstate . Il motivo è durante la fase di caricamento dei dati di post-produzione , questi controlli riceveranno informazioni di stato dal modulo di reso.Ma controlli come etichetta che non attuare
IPostBackEventHandlerIPostBackDataHandler saranno non ottenere qualsiasi informazione di stato da inviato indietro dati e quindi dipendono interamente viewstate per mantenere lo stato .
Di seguito è riportato il relativo paragrafo alla domanda.
Nel ciclo di vita della pagina, due eventi sono associati con ViewState:
carico dello stato di visualizzazione: Questa fase segue la fase di inizializzazione del ciclo di vita pagina. Durante questa fase, le informazioni relative a ViewState salvate nel postback precedente vengono caricate nei controlli . Poiché non è necessario controllare e caricare i dati precedenti, quando la pagina viene caricata per la prima volta questo stage non si verifica. Sul successivo postback della pagina in quanto potrebbero esserci dati precedenti per i controlli, la pagina passerà attraverso questa fase.
Salva stato vista: questa fase precede la fase di rendering della pagina. Durante questa fase, lo stato corrente (valore) dei controlli viene serializzato nella stringa codificata a 64 bit e mantenuto in il controllo nascosto (__ViewState) nella pagina .
carico fase Postback dati: Anche se questa fase non ha nulla a che fare con ViewState, che provoca la maggior parte del malinteso tra gli sviluppatori. Questo stage si verifica solo quando la pagina è stata rinviata a . ASP.Controlli NET che implementano
IPostBackEventHandlerIPostBackDataHandler aggiornerà il suo valore (stato) dai dati di postback appropriati . I cose importanti da notare in questo fase sono i seguenti:
- Stato (valore) di controlli non vengono recuperati da ViewState ma da postback modulo.
- La classe di pagina trasferirà i dati back registrati solo ai controlli che implementano
IPostBackEventHandlerIPostBackDataHandler.- Questa fase segue la fase di visualizzazione dello stato di caricamento, in altre parole lo stato dei controlli impostati durante la fase di caricamento dello stato viene sovrascritto in in questa fase.
Questo legato alla progettazione
i seguenti controlli server persistono le loro informazioni attraverso le richieste anche quando il ViewState di controllo (l'attributo EnableViewState) è impostato su False:
* The TextBox control.
* The CheckBox control.
* The RadioButton control.
Questo comportamento si verifica perché il ViewState di un controllo è solo uno dei metodi utilizzati per mantenere gli attributi di un controllo tra le richieste. Nei controlli server menzionati nella sezione "Sintomi", gli attributi che non vengono normalmente inviati al server tramite form-get o form-post vengono gestiti da ViewState. Questi valori includono gli attributi del controllo, ad esempio BackColor. Gli attributi normalmente inviati al server sono gestiti dall'interfaccia IPostBackDataHandler. Un esempio di tale attributo è l'attributo controllato del controllo CheckBox.
Anche leggere questo articolo
ASP.NET: TextBox and EnableViewState="False"
Per comprendere ViewState non credo che ci sia un articolo di meglio di MSDN
Date un'occhiata a Server controls persist their state when EnableViewState is set to False
Il seguenti controlli server persistono le loro informazioni attraverso le richieste anche quando il ViewState di controllo (l'attributo EnableViewState) è impostato su False:
- Il controllo TextBox.
- Il controllo CheckBox.
- Il controllo RadioButton.
Questo comportamento si verifica perché il ViewState di un controllo è solo uno dei metodi che vengono utilizzati a persistere attributi di un controllo in tutta richieste.Nei controlli server menzionati, gli attributi che sono non normalmente inviati al server tramite form-get o il modulo di posta vengono gestiti da ViewState. Questi valori includono gli attributi del controllo, ad esempio BackColor.
Gli attributi normalmente inviati al server vengono gestiti dall'interfaccia IPostBackDataHandler. Un esempio di tale attributo è l'attributo controllato del controllo CheckBox.
Esempio: Prendere in considerazione l'impostazione del backcolor a livello di codice. Nel postback, se viewstate è disattivato, il background color
del controllo Textbox viene perso. Tuttavia, viene mantenuto il valore di testo del controllo.
Nota: se il backcolor è stato impostato direttamente in markup anziché in code behind, sarebbe rimasto invariato.
<form id="form1" runat="server">
<asp:TextBox ID="Textbox1" runat="server" EnableViewState="false"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Button" EnableViewState="false" />
</form>
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
this.Textbox1.BackColor = Color.Yellow;
}
}
seguito da Understanding ASP.NET View State:
Si tratta di un malinteso comune tra gli sviluppatori che lo stato di visualizzazione sia in qualche modo responsabile di aver TextBoxes, caselle di controllo, DropDownList, e altri controlli Web ricordano i loro valori attraverso postback. Questo non è il caso, poiché i valori vengono identificati tramite i valori dei campi del modulo back pubblicati e assegnati nel metodo LoadPostData() per quei controlli che implementano IPostBackDataHandler.
Un controllo server può indicare che è interessato all'esame dei dati di backback implementando lo
IPostBackDataHandler interface
. In questa fase del ciclo di vita della pagina, la classe Page enumera il numeroposted back form fields
e cerca il controllo server corrispondente. Se trova il controllo, controlla se il controllo implementa l'interfaccia IPostBackDataHandler. In tal caso, trasferisce i dati di postback appropriati al controllo server chiamando il metodo LoadPostData() del controllo. Il controllo server aggiornerebbe quindi il suo stato in base a questi dati di postback.
si riferiscono anche a seguito
@phoenix - un'occhiata a ViewState verità intesa - http://weblogs.asp.net/ infinitiesloop/archive/2006/08/03/veramente-comprensione-viewstate.aspx –