cs_prezz
Messages postés71Date d'inscriptionmardi 6 juillet 2004StatutMembreDernière intervention10 octobre 2008
-
10 oct. 2008 à 12:25
ggtry
Messages postés417Date d'inscriptionvendredi 13 juin 2008StatutMembreDernière intervention21 juillet 2010
-
11 oct. 2008 à 00:13
Bonjour à tous,
je possède deux pages. Une première avec une liste paginée qui contient un webcontrol que j'ai créé moi-même. Une deuxième avec un détail.
Lorsque je navigue à l'intérieur de ma liste ma persistance de control est correctement gérée (Tri et pagination conservée).
Par contre lorsque je navigue vers ma seconde page et que je reviens à ma page de liste je perds mes données de pagination.
Pourtant après m'être renseigné sur le control state (notemment ici : http://fredrik.nsquared2.com/viewpost.aspx?PostID=265), j'ai implémenté ce qui était écrit...
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 10 oct. 2008 à 13:52
Bonjour,
je pense que c'est normal.
D'après ce que je comprend voici la séquence des actions quetu fais entre tes pages
1. GET ==> Page1 ==> remplissage du viewstate
2. Post (viewstate) ==> Page1 ==> récuperation du viewstate + reremplissage viewstate
3. GET (pas de viewstate) ==> Page2 ==> remplissage viewstate
4. GET (pas de viewstate) ==> Page1 ==> remplissage viewstate
Quand tu reviens sur ta premiere page, ton viewstate n'existe plus, tu n'as donc plus de persistance. Il n'existe pas de solution simple pour résoudre le problème, il faut revoir la logique de la page, et jouer avec des sessions ...
La solution "la plus simple", serait de n'avoir qu'une seule page ca corrigerais ce problème mais ca complexifierais la page et risque grandement de rajouter d'autres problèmes.
cs_prezz
Messages postés71Date d'inscriptionmardi 6 juillet 2004StatutMembreDernière intervention10 octobre 2008 10 oct. 2008 à 14:35
Au passage je me rends compte que si je suis sur la page 2 et que je rafraichis ma page je retombe sur ma page 1 et quand je récupère mon viewstate et que je le décrypte :
lorsque je suis sur la page 2 j'ai bien dans ce viewstate une donnée qui indique que je suis sur la page 2
Par contre après rafraichissement de la page je n'ai plus l'information sur la page
ggtry
Messages postés417Date d'inscriptionvendredi 13 juin 2008StatutMembreDernière intervention21 juillet 20101 11 oct. 2008 à 00:13
Bonsoir,
La solution la plus immédiate est d'utiliser l'historique client, et donc un simple retour par javascript : évidemment, cela dépend des restrictions éventuelles que le client impose à son historique (à la limite, dans ce cas, je dirais que c'est de sa faute, mais bon...).
JSonline à raison, je pense, dans son explication.
Dans ce cas, si tu ne veux pas passer par l'historique client, tu dois passer le pageindex de ton gridview à ta page de détail.
La session est une possibilité, ou alors, tu peux aussi lire dans ta page de détail le pagindex du gridview de la page précédente, et le mettre par exemple dans un hiddenfield, qui sera à son tour lu lors du retour... Ce ne serait pas d'une élégance folle, mais ça marcherait.
Si tu utilises des "buttonlink", pour qu'il y ait postback, et non pas navigation simple, tu pourras lire dans ta page 2 (détails) le pageindex à l'aide de page.previouspage... et le passer dans un hiddenfield. En mettant un autre buttonlink sur ta page 2, qui renvoie à la page de départ (celle de ta gridview), tu pourras lire cet hiddenfield à l'aide de la même méthode, par exemple, en vb (ici sur l'init de la gridview) :
Protected Sub GridView1_Init(ByVal sender As Object, ByVal e As System.EventArgs)
If Not Page.PreviousPage Is Nothing Then
Dim hf As HiddenField = CType(Page.PreviousPage.FindControl("HiddenField1"), HiddenField)
If Not hf Is Nothing Then
GridView1.PageIndex = hf.Value
End If
End If
End Sub
Evidemment, il faut se méfier dans ce cas de la manière d'accéder à ta page (pour éviter l'ambiguïté éventuelle sur l'hiddenfield). Mais c'est une simple convention de nom à adopter.
Ce n'est pas forcément plus compliqué qu'avec une session, puisqu'il faut prévoir lors des sessions le cas où l'utilisateur ne revient pas directement sur la page précédente... à moins évidemment que tu veuilles conserver de manière plus durable la pagination de ta gridview.