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

Pb avec IsPostBack

7 réponses
Avatar
Emilie
Bonjour

Je n'arrive pas à comprendre le fonctionnement de Not IsPostBack

J'ai une appli web en Vb.net avec
plusieurs images affichées (et remplis par une requete sur une table access)
et dropdownlist (rempli également par une requete sur une table access)
quand je lance l'appli tout s'affiche
par contre si je fais une sélection sur le dropdownlist mes images
disparaisent
et si j'ajoute un if not IsPostBack sur mon page_load, les image restent
affichées, mais je n'ai pas de sélection sur le dropdownlist

Pouvez-vous m'indiquer la correction à faire à mon code
merci par avance
Emilie

7 réponses

Avatar
Jérémy Jeanson
Bonjour Emilie,

Page.IsPostBack permet de savoir si ta page a déjà été posté... donc en
gros, de savoir si elle a déjà été chargée une fois. Il y courant de
faire un test "Not IsPostBack" afin d'effectuer le chargement des
données de chaque control une et une seule foie : au premier chargement
de la page.

Il est même conseillé (pour éviter de parasiter le Binding des autres
contrôles de ne pas utiliser la méthode DataBind de la Page, mais celle
du ou des contrôles dont du charges des données.

Par exemple dans ton Page_Load:

If Not Me.IsPostBack Then
Me.DropDownList.DataSource = ...' ta première requete
Me.DropDownList.DataBind()

Me.GridView.DataSource = ...' ta seconde requete
Me.GridView.DataBind()
End If

Mais quand tu dis que tu n'as pas de selection sur le DropDown, tu
parles de quoi? tu ne pas mis l'attribut EnableViewState="false" sur ton
DropDown par hasard?

--
Jérémy JEANSON
MCP
http://www.jjeanson.fr
Avatar
Emilie
Bonjour Jérémy
J'ai mon Page_load avec

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)

If Not Me.IsPostBack Then

ControleNbre()

End If

End Sub


la procédure ControleNbre()exécute une requete pour vérifier si le produit
recherché existe dans ma table

dans cette requete j'ai intégré une condition If Endif :

If DSPageData.Tables("NbProduits").Rows.Count = 0 Then

LblRien.Text = "Désolé, aucun produit"

Else

Dim NbProduits As Integer = DSPageData.Tables("NbProduits").Rows.Count

Session("NbRef") = DSPageData.Tables("NbProduits").Rows.Count

VoirProduit()

AfficheGamme()

AfficheTaille()

End If


VoirProduit affiche le produit avec son descriptif
AfficheGamme affiche les variantes du produit en images dans une table créée
dynamiquement
et AfficheTaille, affiche les tailles du produit dans DropDownList

tout cela fonctionne, par contre si je fais une sélection sur le
DropDownList, il me reste à l'écran uniquement le résultat de la procédure
VoirProduit(), le reste à disparu
Tu vois pourquoi ?
Merci pour ton aide
Emilie

"Jérémy Jeanson" a écrit dans le message de news:
%
Bonjour Emilie,

Page.IsPostBack permet de savoir si ta page a déjà été posté... donc en
gros, de savoir si elle a déjà été chargée une fois. Il y courant de
faire un test "Not IsPostBack" afin d'effectuer le chargement des données
de chaque control une et une seule foie : au premier chargement de la
page.

Il est même conseillé (pour éviter de parasiter le Binding des autres
contrôles de ne pas utiliser la méthode DataBind de la Page, mais celle du
ou des contrôles dont du charges des données.

Par exemple dans ton Page_Load:

If Not Me.IsPostBack Then
Me.DropDownList.DataSource = ...' ta première requete
Me.DropDownList.DataBind()

Me.GridView.DataSource = ...' ta seconde requete
Me.GridView.DataBind()
End If

Mais quand tu dis que tu n'as pas de selection sur le DropDown, tu parles
de quoi? tu ne pas mis l'attribut EnableViewState="false" sur ton DropDown
par hasard?

--
Jérémy JEANSON
MCP
http://www.jjeanson.fr


Avatar
Jérémy Jeanson
Bonjour Emilie,

Au vu de ce que tu as écrit, il doit y avoir une différence entre le
chargement des données de ta première méthode et les deux autres.

Les contrôles serveur utilisent le ViewState afin de garder un état des
contrôles après PostBack. Il se peut que la différence entre tes 3
méthodes soit au niveau :
- du chargement de leurs DataSource respectives.
- du ViewState de chaque contrôle si il est altéré.
- de l'appel ou non de la méthode DataBind de chaque contrôles après
recherche des données.
- d'un appel parasites des méthodes à un moment inopportun (appel de tes
deux dernières méthodes par d'autres events et chargement d'autre
données ou dans ton cas chargement de données vides) pour tester cela
rien de tel que des points d'arrêt sur chaque méthode.

Peux tu montrer une partie du code incriminé?... différence entre tes 3
méthodes?
--
Jérémy JEANSON
MCP
http://www.jjeanson.fr
Avatar
Emilie
Bonjour Jérémy

Tu veux le code de chaque procédure ?

Emilie
"Jérémy Jeanson" a écrit dans le message de news:

Bonjour Emilie,

Au vu de ce que tu as écrit, il doit y avoir une différence entre le
chargement des données de ta première méthode et les deux autres.

Les contrôles serveur utilisent le ViewState afin de garder un état des
contrôles après PostBack. Il se peut que la différence entre tes 3
méthodes soit au niveau :
- du chargement de leurs DataSource respectives.
- du ViewState de chaque contrôle si il est altéré.
- de l'appel ou non de la méthode DataBind de chaque contrôles après
recherche des données.
- d'un appel parasites des méthodes à un moment inopportun (appel de tes
deux dernières méthodes par d'autres events et chargement d'autre données
ou dans ton cas chargement de données vides) pour tester cela rien de tel
que des points d'arrêt sur chaque méthode.

Peux tu montrer une partie du code incriminé?... différence entre tes 3
méthodes?
--
Jérémy JEANSON
MCP
http://www.jjeanson.fr


Avatar
Jérémy Jeanson
Bonjour Amilie,

oui tant qu'à faire,

le plus important n'étant pas tes requêtes, mais les appels que tu fais
sur les controls (chargement de données, accès à une propriété...)
--
Jérémy JEANSON
MCP
http://www.jjeanson.fr
Avatar
Emilie
Bonjour Jérémy

Voici mon code

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)

If Not Page.IsPostBack Then

Page.EnableViewState = True

Session("PathSite") = "E:BaseOWBaseJulie.mdb"

TdDetail.Visible = False

Session("Taille") = "Choisissez"

Session("ChoixRayon") = "Tuniques"

Session("IDrayon") = "TU"

TbProduit.Visible = False

TbAutresVues.Visible = False

ControleNbre()

VoirRayon()

AfficheGamme()

AfficheTaille()

End If

End Sub



Public Sub ImageButton_Command(ByVal sender As Object, ByVal e As
System.Web.UI.WebControls.CommandEventArgs)

Dim Imb As ImageButton = DirectCast(sender, ImageButton)

Session("IDprod") = Mid(Imb.ID, 4)

Dim lechoix As Integer = Session("IDprod")

lechoix = Session("IDprod")

AfficheChoix()

TbAutresVues.Visible = True

Table1.Visible = True

End Sub


Quand je clic sur ImageButton, la table TbAutresVues (remplie par la
procédure AfficheGamme)disparait de l'écran.

De meme, quand je mets un point d'arret sur ImageButton et que je lance
l'appli, l'arret ne se fait pas.

Merci pour ton aide
Emilie


"Jérémy Jeanson" a écrit dans le message de news:

Bonjour Amilie,

oui tant qu'à faire,

le plus important n'étant pas tes requêtes, mais les appels que tu fais
sur les controls (chargement de données, accès à une propriété...)
--
Jérémy JEANSON
MCP
http://www.jjeanson.fr


Avatar
Jérémy Jeanson
Bonjour Emilie,

C'est peut être juste une petite étourderie dans ont code.

Je t'ai fais passer un mail en direct, on va tenter de voir de près
cette histoire ;)

--
Jérémy JEANSON
MCP
http://www.jjeanson.fr