Comment ca marche

Résolu
thonyboy Messages postés 165 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 16 février 2011 - 14 sept. 2006 à 14:07
cs_Nurgle Messages postés 1642 Date d'inscription samedi 6 novembre 2004 Statut Membre Dernière intervention 28 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

PS : C'est dur de débuter

4 réponses

cs_Nurgle Messages postés 1642 Date d'inscription samedi 6 novembre 2004 Statut Membre Dernière intervention 28 avril 2011 4
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à )

A++

<hr width="100%" size="2" />Nurgle (Antoine)
3
cs_poppyto Messages postés 540 Date d'inscription dimanche 29 décembre 2002 Statut Modérateur Dernière intervention 13 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 !

Poppyto
Cours de basse gratuits avec vidéos et ralentis
Cours de guitare gratuits avec vidéos et ralentis/A>
0
cs_Nurgle Messages postés 1642 Date d'inscription samedi 6 novembre 2004 Statut Membre Dernière intervention 28 avril 2011 4
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

A++

<hr width="100%" size="2" />Nurgle (Antoine)
0
thonyboy Messages postés 165 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 16 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 ?
0
Rejoignez-nous