thonyboy
Messages postés165Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention16 février 2011
-
14 sept. 2006 à 14:07
cs_Nurgle
Messages postés1642Date d'inscriptionsamedi 6 novembre 2004StatutMembreDernière intervention28 avril 2011
-
15 sept. 2006 à 08:35
Bonjour,
Je me lance dans la programmation ASP/VB. J'utilise pour cela VS2005.
Je cherche a faire quelques chose de simple : Remplir un combo lors du load de la page, et lorsque l'utilisateur selectionne dans la combo afficher la valeur de celle ci dans un text box.
Et je n'y arrive pas
Dans mon code j'ai :
Partial Class _Default
Inherits System.Web.UI.Page
Protected Sub form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles form1.Load
NomList1.Items.Add("A")
NomList1.Items.Add("B")
NomList1.Items.Add("C")
NomList1.Items.Add("D")
End Sub
Protected Sub NomList1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles NomList1.SelectedIndexChanged
Label1.Text = "eeee"
End Sub
End Class
Au lancement ma comboliste est bien remplie avec A B C et D
Dans l'evenement de ma combo j'ai mis l'evenement SelectedIndexChange
Mais si je selectionne une valeur dans la combo mon label2 ne contient pas "eeeee"
Sauf si je met dans la propriete de la com Autopostback a True
Mais dans ce cas, ma combo contient A B C D A B C et D
En fait je me rend compte qu'il est repassé par la procédure Load
Donc ma question, comment ca marche ? Comment faire simplement ? Je cherche sur le net depuis ce matin, jetrouve plein de truc mais je comprends rien.
Qu'elle est la logique SVP
cs_Nurgle
Messages postés1642Date d'inscriptionsamedi 6 novembre 2004StatutMembreDernière intervention28 avril 20115 15 sept. 2006 à 08:35
Euh non, quand la page est rechargée, tout les évènements du cycle de vide de la Page (PreInit, Init, Load, LoadComplete, PreRender, Render, et bien d'autres), ils sont tous réexécuté à chaque PostBack. Il ne faut pas oublier que tu fais du web, et que donc par conséquent tout fonctionne sous forme de requête : le client envoie une demande de la page, tu lui renvoies toute la page, il clique sur un bouton ou un truc du genre (-->PostBack), tu lui re-renvois toute la page, mais avec des trucs différents, etc...).
dans chaque évènement du cycle de vie de la Page tu dois tester si il y a eu oui ou non un PostBack.
Une petite correction tout de même, c'est :
If Not Page.IsPostBack Then
' et mets ici tout le code qui ne doit pas être ré-exécuté au rechargement de la page.
' dans ton cas tous les NomList1.Items.Add()
End If
' vu que toi tu ne veux pas que ça s'exécute au PostBack (désolé, dans la précipitation, je l'avais oublié celui-là )
cs_poppyto
Messages postés540Date d'inscriptiondimanche 29 décembre 2002StatutMembreDernière intervention13 mai 2011 14 sept. 2006 à 21:33
Mmm tu devrais te documenter sur le fameux "PostBack".
Quand tu es en mode PostBack (envoi de page avec la méthode HTTP "POST"), les contrôles contenu dans le ViewState sont sauvegardés et c'est pour ça que ton combobox est dédoublé.
Si pour toi viewstate/postback & co c'est du charabia, achète toi un petit bouquin ça fait vraiment pas de mal !
cs_Nurgle
Messages postés1642Date d'inscriptionsamedi 6 novembre 2004StatutMembreDernière intervention28 avril 20115 14 sept. 2006 à 21:57
Salut,
Je suis tout à fait d'accord avec poppyto sur ce point, achète toi un bon gros bouquin sur ASP.NET 2.0 .
Sinon, pour répondre tout de même à ta question, dans ton PageLoad, mets :
If Page.IsPostBack Then
' et mets ici tout le code qui ne doit pas être ré-exécuté au rechargement de la page.
' dans ton cas tous les NomList1.Items.Add()
End If
thonyboy
Messages postés165Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention16 février 2011 15 sept. 2006 à 06:50
Bonjour, merci pour ces réponses.
Je vais suivre vos conseils et m'acheter un gros bouquin effectivement.
Je suis un ancien programmeur de Delphi, donc pour moi quand je dit qu'un evenement onchange doit executer la procedure x, il n'y a que X qui s'execute...
La c'est vrai que c'est un peu déroutant.
Donc en fait si je vous suis, quand je fait un postback (puisque cela semble etre le seul moyen pour que onchange fonctionne), tout le code de ma page est executer ?
Il faut donc que dans chacune des procedures je fasse un test de pour savoir si c'est un postback, e également qui envoie ce postbak ?
C'est bien ca la logique ?
Il n'existe pas un genre de canevas, de squelette, qui pourait m'aider ?