Deux Clic au lieu de un seul

darkolite Messages postés 12 Date d'inscription mardi 20 juillet 2004 Statut Membre Dernière intervention 24 novembre 2006 - 19 sept. 2006 à 10:59
darkolite Messages postés 12 Date d'inscription mardi 20 juillet 2004 Statut Membre Dernière intervention 24 novembre 2006 - 19 sept. 2006 à 17:30
Bonjour,

J'ai un souci sur mes pages asp.net 1.1. Je ne comprend pas pourquoi lorsque je recharge une page aspx ou un controle ascx il faut d'abord déclancher un clic sur un bouton pour que les autres boutons fonctionnent. A chaque fois il faut faire un clic qui sert a rien ce qui "libère" la page et tout fonctionne bien apres.

Mais ce premier clic m'embete, car il ne sert a rien. Est ce que quelqu'un a déja eu ce genre de problème ?

Lorsque je fait mon premier clic, il y a comme une sorte de postback ou de rafraichissement, ce qui a l'air de rentre actif tous les controls de la page.

Je pige pas.

Yann

4 réponses

crilun Messages postés 114 Date d'inscription lundi 10 mai 2004 Statut Membre Dernière intervention 17 octobre 2006
19 sept. 2006 à 13:22
crilun

j'ai déja eu le meme probleme,
tu as un control utilisateur (ascx) dasn ta page (apsx) c'est bien ca?
et quand tu charge ta page le premier coup tes controls ne sont pas actif, en fait ils ne sont pas relié au code behind.
et je suppose que tu charges dynamiquement ton control dans ta page

voici donc un exmple dans le cas d'un formulaire avec un dropdownlist pour choisir le control que tu veut afficher dans ta page :

'en haut de ta classe
Public bControlChange As Boolean = False

'tout d'abord surcharge la methode : CreateChildControls

 'Surcharge de la creation des controls fils
    Protected Overrides Sub CreateChildControls()
        'on recree ici les controls dans le cas d'un post-back
        If Page.IsPostBack And bControlChange = False Then
            ctl = Me.LoadControl(chemin du control)
            ctl.EnableViewState = True
            ctl.ID = 46
            Me.Controls.Add(ctl)
        End If
    End Sub

'Sur changement de valeur du dropdownlist :
Public Sub loadFormulaireControl(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Dim txtNumMag, txtPost As System.Web.UI.WebControls.TextBox
        Try
            'on supprime l'ancien control
            Me.Controls.Remove(ctl)
            'On Affiche le nouveau
            ctl = Me.LoadControl(cheminducontrolselectionné)
            ctl.EnableViewState = True
            ctl.ID = 412
            Me.Controls.Add(ctl)
            Me.ViewState.Remove("myUC_ViewState") 'On efface le contenu du viewState pour le control actuel
            bControlChange = True
        Catch ex As Exception
            Response.Write("Changement de Control : " & vbCrLf & ex.Message)
            Exit Sub
        End Try
End Sub

'dans le load de la page :
'Ceci afin de charger au premier chargement de la page le premier control de la liste si il y a
 If Not Page.IsPostBack Then
            If Me.monDropDownList.Items.Count > 0 Then
                ctl = Me.LoadControl(Me.monDropDownList.SelectedValue)
                ctl.EnableViewState = True
                ctl.ID = 412
                Me.Controls.Add(ctl)
            End If
 End If

Voila j'espere que ca t'aidera
0
darkolite Messages postés 12 Date d'inscription mardi 20 juillet 2004 Statut Membre Dernière intervention 24 novembre 2006
19 sept. 2006 à 14:50
Merci Crilun

Mon probleme tu l'as bien résumé:
J'ai un control utilisateur (ascx) dans une page (apsx).
et quand je charge la page le premier coup mes controls ne sont pas actif mais quand meme visible, en fait ils ne sont pas relié au code behind (ca m'en a tous l'air, un break point placé dans l'evenement click du bouton n'est pas appelé lors du premier clic).
Je charges dynamiquement mon control dans ta page

Mais je pige rien a ce que fait ton code. Je n'ai pas besoin de recharger quoi que ce soit, je veux juste que mon bouton reagisse du premier coup, et pas du deuxieme.

Que faudrait il faire pour que celui ci reagisse directement, en c# ?

En tout cas un grand merci pour ta réponse.

Yann
0
crilun Messages postés 114 Date d'inscription lundi 10 mai 2004 Statut Membre Dernière intervention 17 octobre 2006
19 sept. 2006 à 16:39
crilun

oui j'avais bien compris que ton pb c'est que ton control marche du premier coup sans rechargement.
donc apparement dans ton cas tu ne le change jamais tu as un control que tu charges et c'est toujours le meme.

donc en fait je te remets juste le code dont tu as besoin et je t'explique

au load :
If Not Page.IsPostBack then 'charger juste la premiere fois sinon nouveau control charger a chaque fois
                ctl = Me.LoadControl(chemin du control)
                ctl.EnableViewState = True 'Permet au control de reposter son etat
                ctl.ID = 46 'identificateur de mon control qui doit rester le meme afin que mon aspx sache qu'il s'agit du meme control a chaque post
                Me.Controls.Add(ctl)

end if

'Surcharge de la creation des controls fils
'ceci est une methode existant deja elle est appelé automatiquement lors de la creation d'un control tu ne fais ici que la surcharger
'C'est principalement grace à cette methode que tu va pouvoir declencher ton control du premier coup

 Protected Overrides Sub CreateChildControls()
        'on recree ici les controls dans le cas d'un post-back
        If Page.IsPostBack Then
            ctl = Me.LoadControl(chemin du control)
            ctl.EnableViewState = True
            ctl.ID = 46
            Me.Controls.Add(ctl)
        End If
    End Sub

donc en gros voila ce qui v ase passer :
*premier chargement :
tu passes dans le load tu charges ton control, tu lui affectes un ID
dans CreateChildControls Page.IsPostBack=false=>Ne fait rien
*Tu clic sur un bouton de ton control :
tu passes dans le load Page.IsPostBack=true=>ne fait rien
dans CreateChildControls Page.IsPostBack=true=>donc recree le control MAIS avec le meme ID que precedement , OR la propriété enableViewState du control precedent est toujours en memoire et meme ID pour le control de depart et celui qui vient d'etre rechargé donc effectue le codeBehind lié au control precedent pour le nouveau control.

bon je suis pas tres pedagogue je l'avoue, donc si tu ne comprends pas mes explications dit le mois.

ci@o++
0
darkolite Messages postés 12 Date d'inscription mardi 20 juillet 2004 Statut Membre Dernière intervention 24 novembre 2006
19 sept. 2006 à 17:30
Si j'ai tout pigé.

Merci beaucoup m'en vais voir si ca marche.

Yann
0
Rejoignez-nous