darkolite
Messages postés12Date d'inscriptionmardi 20 juillet 2004StatutMembreDernière intervention24 novembre 2006
-
19 sept. 2006 à 10:59
darkolite
Messages postés12Date d'inscriptionmardi 20 juillet 2004StatutMembreDernière intervention24 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.
crilun
Messages postés114Date d'inscriptionlundi 10 mai 2004StatutMembreDernière intervention17 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
darkolite
Messages postés12Date d'inscriptionmardi 20 juillet 2004StatutMembreDernière intervention24 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# ?
crilun
Messages postés114Date d'inscriptionlundi 10 mai 2004StatutMembreDernière intervention17 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.