OVH Cloud OVH Cloud

accéder au viewstate à partir d'une classe

6 réponses
Avatar
Pierre
Bonjour,

Est-il possible d'accéder au viewstate à partir d'une classe qui n'est pas
dans la page ?
Si oui, comment....

J'ai essayé
> Dim control As System.Web.UI.Control
> control.viewstate(....

mais comme viewstate est protected, il n'est pas accessible dans ce
contexte.


Merci d'avance.

Pierre.

6 réponses

Avatar
Patrice
"Protected" donc non (classe ou classe dérivée).

Décrire ce que tu veux faire peux aider à faire des suggestions. Sur le plan
du principe, l'idée serait que le contrôle est responsable de son état et
non pas de laisser quelqu'un manipuler son état persisté de l'extérieur.

Je suis même un peu surpris que cela compile. Pour moi "Control" serait
plutôt à hériter...

Patrice

--

"Pierre" a écrit dans le message de
news:
Bonjour,

Est-il possible d'accéder au viewstate à partir d'une classe qui n'est pas
dans la page ?
Si oui, comment....

J'ai essayé
> Dim control As System.Web.UI.Control
> control.viewstate(....

mais comme viewstate est protected, il n'est pas accessible dans ce
contexte.


Merci d'avance.

Pierre.





Avatar
Pierre
rien compris....


"Patrice" a écrit dans le message de
news:
"Protected" donc non (classe ou classe dérivée).

Décrire ce que tu veux faire peux aider à faire des suggestions. Sur le


plan
du principe, l'idée serait que le contrôle est responsable de son état et
non pas de laisser quelqu'un manipuler son état persisté de l'extérieur.

Je suis même un peu surpris que cela compile. Pour moi "Control" serait
plutôt à hériter...

Patrice

--

"Pierre" a écrit dans le message de
news:
> Bonjour,
>
> Est-il possible d'accéder au viewstate à partir d'une classe qui n'est


pas
> dans la page ?
> Si oui, comment....
>
> J'ai essayé
> > Dim control As System.Web.UI.Control
> > control.viewstate(....
>
> mais comme viewstate est protected, il n'est pas accessible dans ce
> contexte.
>
>
> Merci d'avance.
>
> Pierre.
>
>
>




Avatar
Patrice
Je vais essayer d'être plus clair. La portée du viewstate est "protected"
comme tu le vois. Cela veut dire que cette propriété n'est accessible qu'à
cette classe ou aux classes qui héritent de cette classe.
Donc tu ne peux pas y accéder de l'extérieur.

Je ne sais pas ce que tu cherches à faire. Cherche tu par exemple à créer un
nouveau contrôle ?

Dans ce cas au lieu de créer directement un "System.Web.UI.Control" tu
pourrais créer une classe qui hérite de "System.Web.UI.Control". Cette
classe devient alors elle-même un contrôle auquel tu pourras ajouter les
fonctionnalités que tu veux. Elle pourra également accéder à son propre
"viewstate" (car elle hérite de System.Web.UI.Control).

Par exemple :
Private Class MonControl

Inherits System.web.UI.Control

Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)

writer.Write("ViewState.Count: " & Me.ViewState.Count)

End Sub

End Class


Sinon indiquer ce que tu cherches à faire pourras sans doute susciter des
conseils plus précis (pour l'instant je ne vois ce que tu veux faire de ce
System.Web.UI.Control, l'intérêt principal me semble être d'en hériter pour
créer de nouveaux contrôles. Comme ci-dessus ces nouveaux contrôles peuvent
alors accéder à leur propre viewstate).

Patrice



--

"Pierre" a écrit dans le message de
news:%
rien compris....




Avatar
Pierre
Re-,

Le but est simplement d'automatiser un traitement et au lieu de le répéter
dans chaque page_load, je souhaitais l'externaliser dans une classe vb et y
faire appel à partir de page_load.

Donc, le seul moyen pour accéder au viewstate est que la classe vb hérite de
web.ui.control.
Je pourrais aussi passer le viewstate en paramètre, peut-être.

Je vais tester tout cela.

Merci de ton intervention.

A plus.

Pierre.

"Patrice" a écrit dans le message de
news:
Je vais essayer d'être plus clair. La portée du viewstate est "protected"
comme tu le vois. Cela veut dire que cette propriété n'est accessible qu'à
cette classe ou aux classes qui héritent de cette classe.
Donc tu ne peux pas y accéder de l'extérieur.

Je ne sais pas ce que tu cherches à faire. Cherche tu par exemple à créer


un
nouveau contrôle ?

Dans ce cas au lieu de créer directement un "System.Web.UI.Control" tu
pourrais créer une classe qui hérite de "System.Web.UI.Control". Cette
classe devient alors elle-même un contrôle auquel tu pourras ajouter les
fonctionnalités que tu veux. Elle pourra également accéder à son propre
"viewstate" (car elle hérite de System.Web.UI.Control).

Par exemple :
Private Class MonControl

Inherits System.web.UI.Control

Protected Overrides Sub Render(ByVal writer As


System.Web.UI.HtmlTextWriter)

writer.Write("ViewState.Count: " & Me.ViewState.Count)

End Sub

End Class


Sinon indiquer ce que tu cherches à faire pourras sans doute susciter des
conseils plus précis (pour l'instant je ne vois ce que tu veux faire de ce
System.Web.UI.Control, l'intérêt principal me semble être d'en hériter


pour
créer de nouveaux contrôles. Comme ci-dessus ces nouveaux contrôles


peuvent
alors accéder à leur propre viewstate).

Patrice



--

"Pierre" a écrit dans le message de
news:%
> rien compris....
>
>




Avatar
Patrice
Oui mais un traitement sur quoi, une page ? un contrôle ?

Si c'est une page tu pourrais aussi créer ta propre propriété qui se
contente d'exposer publiquement le viewstate sous un autre nom. Sur le plan
du principe ce qui me gêne un peu, c'est que normalement le "viewtstate" est
"protected" car l'état du contrôle est censé être sous la seule
responsabilité du contrôle (chaque contrôle se charge lui même de sauver son
état puis de le restaurer).

Ici on dirait que tu veux stocker de l'extérieur dans le viewstate d'un
contrôle une donnée dont le contrôle n'a que faire. Le "viewstate" est-il
bien approprié ?

Patrice

--

"Pierre" a écrit dans le message de
news:
Re-,

Le but est simplement d'automatiser un traitement et au lieu de le répéter
dans chaque page_load, je souhaitais l'externaliser dans une classe vb et


y
faire appel à partir de page_load.

Donc, le seul moyen pour accéder au viewstate est que la classe vb hérite


de
web.ui.control.
Je pourrais aussi passer le viewstate en paramètre, peut-être.

Je vais tester tout cela.

Merci de ton intervention.

A plus.

Pierre.

"Patrice" a écrit dans le message de
news:
> Je vais essayer d'être plus clair. La portée du viewstate est


"protected"
> comme tu le vois. Cela veut dire que cette propriété n'est accessible


qu'à
> cette classe ou aux classes qui héritent de cette classe.
> Donc tu ne peux pas y accéder de l'extérieur.
>
> Je ne sais pas ce que tu cherches à faire. Cherche tu par exemple à


créer
un
> nouveau contrôle ?
>
> Dans ce cas au lieu de créer directement un "System.Web.UI.Control" tu
> pourrais créer une classe qui hérite de "System.Web.UI.Control". Cette
> classe devient alors elle-même un contrôle auquel tu pourras ajouter les
> fonctionnalités que tu veux. Elle pourra également accéder à son propre
> "viewstate" (car elle hérite de System.Web.UI.Control).
>
> Par exemple :
> Private Class MonControl
>
> Inherits System.web.UI.Control
>
> Protected Overrides Sub Render(ByVal writer As
System.Web.UI.HtmlTextWriter)
>
> writer.Write("ViewState.Count: " & Me.ViewState.Count)
>
> End Sub
>
> End Class
>
>
> Sinon indiquer ce que tu cherches à faire pourras sans doute susciter


des
> conseils plus précis (pour l'instant je ne vois ce que tu veux faire de


ce
> System.Web.UI.Control, l'intérêt principal me semble être d'en hériter
pour
> créer de nouveaux contrôles. Comme ci-dessus ces nouveaux contrôles
peuvent
> alors accéder à leur propre viewstate).
>
> Patrice
>
>
>
> --
>
> "Pierre" a écrit dans le message de
> news:%
> > rien compris....
> >
> >
>
>




Avatar
loko007
Le mardi 12 Octobre 2004 à 19:16 par Pierre :
Bonjour,

Est-il possible d'accéder au viewstate à partir d'une classe qui
n'est pas
dans la page ?
Si oui, comment....

J'ai essayé
> Dim control As System.Web.UI.Control
> control.viewstate(....

mais comme viewstate est protected, il n'est pas accessible dans ce
contexte.


Merci d'avance.

Pierre.


"Ici on dirait que tu veux stocker de l'extérieur dans le viewstate d'un
contrôle une donnée dont le contrôle n'a que faire. Le "viewstate" est-il
bien approprié ?"

je pense qu'il ne faut pas chercher à contredire ce qu'on souhaite faire mais plutot répondre au pb, sinon ca aide personne.
par ex dans mon cas, je suis obligé de gerer le viewstate de l'ext de la page car c'est pour automatiser le traitement du tri dans un gridview (je vais pas me taper à chaque fois 10 lignes de code)

il faut par ex rendre générique ceci:

Dim SortDirection As String, SortExpression As String
SortExpression = e.SortExpression
If (SortExpression = ViewState("SortExpression") And ViewState("SortDirection") = "asc") Then
SortDirection = "desc"
Else
SortDirection = "asc"
End If
ViewState("SortDirection") = SortDirection
ViewState("SortExpression") = SortExpression

Return SortExpression & " " & SortDirection

et pour ca il faut bien que je puise mémoriser les infos dans le viewstate de la page qui utilise la classe generique. utiliser la session, c'est pas idéal