Problemes UserControl dynamiques

Signaler
Messages postés
53
Date d'inscription
vendredi 26 mars 2004
Statut
Membre
Dernière intervention
27 février 2006
-
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
-
Bonjour tout le monde,

Voila je cherche une solution a mon probleme. J'ai une page aspx dans laquelle je charge dynamiquement des usercontrols lors de l'evenement PreRender. Mes usercontrols s'affiche comme je le souhaite mais je n'arrive pas a acceder aux controles de cet usercontrol. Par exemple, si je clic sur un bouton appartenant a l'user control, ca n'execute pas le code qui lui est associe !!!

Avez vous des solutions a me proposer ?
Merci d'avance !!!

16 réponses

Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
Bonjour, c'est tout à fait normal !

l'evenement prerender et le dernier evenement avant l'envoie de la page vers le client, ajoute plutot tes controles dans le init qui est fait pour ca ...


<HR>
Cyril - MVS - MCP ASP
Messages postés
53
Date d'inscription
vendredi 26 mars 2004
Statut
Membre
Dernière intervention
27 février 2006

J'y avais songe mais je suis alors confronte a un autre probleme.
En fait, je charge mes usercontrols suivant le clic que l'utilisateur fait sur tel ou tel bouton (En fonction du bouton sur lequel l'utiliseur clic, je charge tel ou tel controle).

Le probleme, c'est que si je mets le code dans init, ce code s'executera avant celui du clic du bouton, c'est la raison pour laquelle j'utilisais le PreRender.

Bref, je sais plus trop comment faire du coup...

En tout cas, merci pour ta réponse c'est sympa !!!
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
Tu peux détailler ce que tu veux faire ? car la je pige pas trop :)


<HR>
Cyril - MVS - MCP ASP
Messages postés
53
Date d'inscription
vendredi 26 mars 2004
Statut
Membre
Dernière intervention
27 février 2006

J'ai une page aspx contenant un certains nombre de boutons. En fonction du choix de l'utilisateur (click sur tel ou tel bouton), je charge mes user control (en utilisant le code usercontrol=Page.load(""), etc) dynamiquement dans un placeHolder.
Par ailleurs, mes user controls contiennent des controles serveur(dropdownlist, par exemple.)
A chaque fois que je clic sur un bouton, ca attribue une valeur a une variable viewstate.
Le code du chargement des user est dans une procedure a part, appelée LoadUserControl
(En fonction de la variable viewstate, je charge tel ou tel control)

Si je mets directement le code du chargement des usercontrol dans les procedures click boutons, ca marche parfaitement (l'usercontrol est chargé) seulement des que je choisis un article dans ma dropdownlist, ca crée un postback et mon usercontrol disparait (ce qui est normal, car la procedure loadUserControl n'est plus rappelée lors du chargement de la page).
Je cherchais donc un autre moyen de pouvoir charger mes user controls en utilisant le PreRender (j'appelais ma procedure dans le PreRender mais apparemment tu me dis que c pas possible).

Si je mets ma procedure dans le Init, le code s'executera avant celui associe au clic des boutons, donc ca ne marchera pas non plus.

Voila, j'espere que tu as compris ce que je voulais te dire et que c'est assez clair
Merci
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
Je n'ai pas trop compris ce que tu fais avec ton viewstate mais moi ce que je ferais ...

c'est quand l'user clique sur le bouton j'ajoute mon UC dans la page, et je stocke quel UC j'ai ajouté dans mon viewstate ou session ou autre ...

ensuite dans le init, je regarderais quelles controles, j'ai rajouté précédemment et je les rajouterais à la page ...

Prenoms un cas simple :p on a 15 boutons sur la page, chaque boutons chargent différents UC qui contiennent tout sauf des boutons des dropdownlist avec autopostback par exemple ;) (sinon on va se melanger dans nos explications)

Au premier chargement de la page, dans le init je regarde si j'ai pas des controles à ajouté si oui je l'ai rajoute (comme c'est la premiere fois y'a rien à rajouter)

ensuite dans l'event click du bouton je rajoute mon controle dans la page, et dans la variable stockant les UC

si je reclick sur un bouton, dans le init je chargerais le premier controle, et dans l'event du bouton, je chargerais le bouton :)

si je joue avec un dropdownlist, ben ca va passer par le init de la page donc je rajoute les UC, puis aprés ca va passer par les loads des UC rajoutés donc tout est bon

Ca t'irait comme ca ?


<HR>
Cyril - MVS - MCP ASP
Messages postés
53
Date d'inscription
vendredi 26 mars 2004
Statut
Membre
Dernière intervention
27 février 2006

Merci pour tes explications !! J'ai essaye de suivre tes conseils (enfin ce que j'ai reussi a comprendre !!).
J'ai utilise les evenements init et event click pour afficher mes UC et l'affichage marche bien. Mes UC se charge bien suivant les choix de l'utilisateur et reste en place.

Maintenant j'ai un autre probleme au niveau de la dropdownlist qu'il y a dans mes UC. En fait, des que je choisis un element dans la dropdownlist, ca revient sans arret au 1er élément de la liste.
Quand j'essaye de mettre dans page_load de l'UC la condition If Not IsPostback...., je n'ai plus rien qui s'affiche dans la liste...

Je ne sais plus quoi faire la mais encore merci pour les conseils !!!!!
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
hum ... :/

pour le drop tu fais bien un

if not page.ipostback then
mondrop.datasource = ...
mondrop.databind()
end if

et mondrop.enableviewstate=true ?

sinon teste dans une page bidon ton uc seul en le mettant classiquement dans la page et regarde deja si t'as bien le comportement souhaité ...


<HR>
Cyril - MVS - MCP ASP
Messages postés
53
Date d'inscription
vendredi 26 mars 2004
Statut
Membre
Dernière intervention
27 février 2006

J'ai bien fait ce que tu m'as dis avec if not page.ispostback dans page_load de l'UC et j'ai verifie les enableviewstate, ils sont bien a true...

Les dropdownlists ne se chargent pas car la condition du if not page.ispostback n'est jamais verifiee et le code a l'interieur ne s'excute pas mais je ne vois pas pourquoi ca fais ca ???? bizarre !
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
page.ispostback est toujours à true ? ou alors le page_load de ton uc n'arrive jamais ?


<HR>
Cyril - MVS - MCP ASP
Messages postés
53
Date d'inscription
vendredi 26 mars 2004
Statut
Membre
Dernière intervention
27 février 2006

J'ai trace l'execution par le debogueur, et la page_load de mon uc arrive bien mais le ispostback est toujours a true meme la 1ere fois. Du coup quand je fais le test if not ispostback, le test n'est jamais verifie et les drop ne peuvent pas se charger....

(mes enableviewstate sont tous a true aussi....)
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
et si tu met le debugger dans le init de la page c'est à dire la ou ton code prend la main, page.ispostback est dejà à true ?

si non regarde quand il change de true à false en pas à pas (il me semble que c'est pas possible mais bon ...)

Si oui t'es sur de bien relancer IE a chaque fois ? :p car la je pigerais vraiment pas, j'ai jamais eu un truc du genre :)


<HR>
Cyril - MVS - MCP ASP
Messages postés
53
Date d'inscription
vendredi 26 mars 2004
Statut
Membre
Dernière intervention
27 février 2006

alors je recapitule, je crois que je t'ai mal explique :)

Le chargement des UC quand on clik sur tel ou tel bouton marche impec grace a ce que tu m'as dit au debut.
Alors mon probleme qui reste a resoudre se situe au niveau des dropdownlists appartenant a l'UC qui ne s'affiche pas correctement lors du chargement de ce dernier

Dans ma page aspx et dans page_load, le ispostback passe bien de false a true.
Par contre dans le page_load des UC, le ispostback est toujours egal a true.
la propriete enableviewstate de mes dropdownlist est egale a true egalement.

Pour charger mes dropdownlist, je le fais dans le page_load de l'UC. Si je mets le code du genre
...
mondrop.datasource = ...
mondrop.databind()
....
sans le ispostback, mes dropdownlist s'affiche mais des que je selectionne un element de la liste, ca passe automatiquement au 1er element de la drop sans garder ma selection (alors que je voudrais que ca garde mes selections !!)

Si je mets le code
if not page.ipostback then
mondrop.datasource = ...
mondrop.databind()
end if
avec le postback, ca n'affiche rien du tout....

J'espere que j'ai ete clair cette fois !!!
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
ben vi suis-je bete c'est normal :p

quand tu fais un click sur ton bouton pour ajouter l'UC tu fais un postback puis tu vas donc la premiere fois que tu tente de charger les drop t'as deja fait un postback :)

créer donc une propriété "firstLoad" que tu enregistres dans le viewstate et au lieu de tester avec le page.ispostback tu tests avec le firstload :)


<HR>
Cyril - MVS - MCP ASP
Messages postés
53
Date d'inscription
vendredi 26 mars 2004
Statut
Membre
Dernière intervention
27 février 2006

ok je vois, je vais essayer ce que tu m'as dit je te tiens au courant de toute maniere, j'espere que ca va marcher !!!

Encore merci pour tout !
Messages postés
53
Date d'inscription
vendredi 26 mars 2004
Statut
Membre
Dernière intervention
27 février 2006

J'ai essaye ce que tu m'as dit, et ca marche presque !! seul souci j'ai encore un probleme et je comprend pas non plus d'ou ca vient !! ca devient galere !!!

Je t'explique, pour simplifier, j'ai deux boutons qui chargent 2 UC differentes.

Au debut du chargement de ma page aspx, rien n'est charge dans le placeholder.

Quand je click sur le 1er bouton, mon UC s'affiche bien et des que je fais mes selections dans ma dropdownlist, elles sont conservees (tout est ok !!).

Ensuite, je click sur le 2e bouton, du coup ca charge l autre UC (tout est ok !!!).
Par contre, quand je reclick sur le 1er bouton, mon uc contenant la dropdownlist se charge bien mais la j'ai un probleme dans ma dropdownlist.
En fait, la 1ere selection que je fais dans ma drop, ca repasse au 1ere élement de ma liste, puis quand je refais une selection dans ma drop ca garde bien mon choix.

Je comprends plus rien la.....
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
A mon avis, il faudrais que tu remettes tout à plat et regarder ce qui doit se passer et ce qui se passe réellement ... je vais guere pouvoir t'aider la :s


<HR>
Cyril - MVS - MCP ASP