TextBox et ViewState

Le
Fabrice
Bonjour tous,

J'ai une page .aspx qui contient simplement un bouton et
un TextBox. Je ne comprends pas pourquoi lorsque je
dfinie le proprit EnableViewState false pour le
TextBox, la valeur de la proprit Text de ce contrle est
conserve aprs le clique sur le bouton ??? Pourquoi cet
tat est conserv alors qu'une liste de valeur
DropDownList aurait perdu ces valeurs ???

Merci tous

Fabrice

  • Partager ce contenu :
Vos réponses
Trier par : date / pertinence
Frederic Melantois
Le #12514151
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" 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
Fabrice
Le #12514141
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"

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


.



Poster une réponse
Anonyme