Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

TextBox et ViewState

2 réponses
Avatar
Fabrice
Bonjour =E0 tous,

J'ai une page .aspx qui contient simplement un bouton et=20
un TextBox. Je ne comprends pas pourquoi lorsque je=20
d=E9finie le propri=E9t=E9 EnableViewState =E0 false pour le=20
TextBox, la valeur de la propri=E9t=E9 Text de ce contr=F4le est=20
conserv=E9e apr=E8s le clique sur le bouton ??? Pourquoi cet=20
=E9tat est conserv=E9 alors qu'une liste de valeur=20
DropDownList aurait perdu ces valeurs ???

Merci =E0 tous

Fabrice

2 réponses

Avatar
Frederic Melantois
Bonjour,

En mettant à EnableViewState = false pour votre TextBox, et en n'employant
aucun mécanisme viewstate pour les autres contrôles, votre page étant aussi
à EnableViewState="False", Regardez la source de votre browser avant le
submit et après le submit.

Vous vous apercevrez que :

<input type="hidden" name="__VIEWSTATE" a la même valeur avant et après le
submit.

Donc le mécanisme de viewState n'intervient pas. En fait, c'est le serveur
qui renvoie lors du retour postback les champs input avec leurs valeurs...

Et si, on met EnableViewState = true pour la textbox, les valeurs sont
toujours retournés et le champ <input type="hidden" name="__VIEWSTATE" ne
grossit toujours pas.

C'est que la Value du control n'est pas stocké en viewstate (voir docs sur
les créations de contrôle serveur pour bien comprendre).

Si vous utilisez <input type="text" id="montexte" runat=server>, vous aurez
le même phénomène (la propriété EnableViewState n'est pas disponible pour ce
HtmlControl dans les propriétés design mais existe bien pour le code. Le
serveur renvoie la page avec l'input et sa valeur après un postback.

En fait, comme HtmlInputText et TextBox dérive de Control qui possède la
propriété EnableViewState, on explique l'existance de cette propriété qui
est sans effet ici pour la value, pas pour d'autres propriétés du
HtmlInputText ou du TextBox ...

Ce que je pense, mais je peux me tromper, c'est qu'il a été décidé de
renvoyer l'input et sa valeur chez le client lors d'un postback. Comme on
utilise souvent des input type text dans nos formulaires et que la plupart
du temps, les développeurs allaient rendre disponible l'EnableViewState (et
d'ailleurs c'est la valeur par défaut pour les controls), il apparaissait
alors coûteux de "doubler" l'information dans le code : dans le champ input
type=text et dans le champ <input type="hidden" name="__VIEWSTATE".
L'usage du ViewState aurait perdu de sa crédibilité (et donc de son
utilité) à cause d'une taille encore plus importante.

Frédéric Mélantois


"Fabrice" a écrit dans le message de
news:1de0801c45516$ec7be300$
Bonjour à tous,

J'ai une page .aspx qui contient simplement un bouton et
un TextBox. Je ne comprends pas pourquoi lorsque je
définie le propriété EnableViewState à false pour le
TextBox, la valeur de la propriété Text de ce contrôle est
conservée après le clique sur le bouton ??? Pourquoi cet
état est conservé alors qu'une liste de valeur
DropDownList aurait perdu ces valeurs ???

Merci à tous

Fabrice
Avatar
Fabrice
Merci, c'est très clair.

A bientôt,

Fabrice

-----Message d'origine-----
Bonjour,

En mettant à EnableViewState = false pour votre TextBox,


et en n'employant
aucun mécanisme viewstate pour les autres contrôles,


votre page étant aussi
à EnableViewState="False", Regardez la source de votre


browser avant le
submit et après le submit.

Vous vous apercevrez que :

<input type="hidden" name="__VIEWSTATE" a la même valeur


avant et après le
submit.

Donc le mécanisme de viewState n'intervient pas. En fait,


c'est le serveur
qui renvoie lors du retour postback les champs input avec


leurs valeurs...

Et si, on met EnableViewState = true pour la textbox, les


valeurs sont
toujours retournés et le champ <input type="hidden"


name="__VIEWSTATE" ne
grossit toujours pas.

C'est que la Value du control n'est pas stocké en


viewstate (voir docs sur
les créations de contrôle serveur pour bien comprendre).

Si vous utilisez <input type="text" id="montexte"


runat=server>, vous aurez
le même phénomène (la propriété EnableViewState n'est pas


disponible pour ce
HtmlControl dans les propriétés design mais existe bien


pour le code. Le
serveur renvoie la page avec l'input et sa valeur après


un postback.

En fait, comme HtmlInputText et TextBox dérive de Control


qui possède la
propriété EnableViewState, on explique l'existance de


cette propriété qui
est sans effet ici pour la value, pas pour d'autres


propriétés du
HtmlInputText ou du TextBox ...

Ce que je pense, mais je peux me tromper, c'est qu'il a


été décidé de
renvoyer l'input et sa valeur chez le client lors d'un


postback. Comme on
utilise souvent des input type text dans nos formulaires


et que la plupart
du temps, les développeurs allaient rendre disponible


l'EnableViewState (et
d'ailleurs c'est la valeur par défaut pour les controls),


il apparaissait
alors coûteux de "doubler" l'information dans le code :


dans le champ input
type=text et dans le champ <input type="hidden"


name="__VIEWSTATE".
L'usage du ViewState aurait perdu de sa crédibilité (et


donc de son
utilité) à cause d'une taille encore plus importante.

Frédéric Mélantois


"Fabrice" a écrit


dans le message de
news:1de0801c45516$ec7be300$
Bonjour à tous,

J'ai une page .aspx qui contient simplement un bouton et
un TextBox. Je ne comprends pas pourquoi lorsque je
définie le propriété EnableViewState à false pour le
TextBox, la valeur de la propriété Text de ce contrôle est
conservée après le clique sur le bouton ??? Pourquoi cet
état est conservé alors qu'une liste de valeur
DropDownList aurait perdu ces valeurs ???

Merci à tous

Fabrice


.