[Atlas] UpdatePanelAnimation : la galere des animations OnUpdating/ed
Est-ce un bug, un oublie ou juste moi qui me prend la tête pour rien ? Les UpdatePanelAnimation sont des extendeurs du controle UpdatePanel nous permettant de jouer une animation au rafraichissement d’un UP.
Je mets donc un ScriptManager, 2 UpdatePanel en mode Conditional et 2 UpdatePanelAnimationExtender mappés sur les UP respectifs (TargetControlID= »…. »). Je remplis en suite une animation sur le OnUpdating pour faire un FadeOut de l’UP et sur le OnUpdated un FadeIn.
Wahou c’est beau… La page disparait en fondu, se met à jour et hop reapparait 🙂
OUI, mais voila, le problème est que ces animations sont joués à chaque AsyncPostBack pour tous les UpdatePanels.
Dans mon cas les animations s’executés sur les deux UpdatePanels alors qu’un seul d’entre eux etaient mis a jour ! 🙁
On peux tester cela très facilement en rajoutant un Button sur la page qu’on enregistre à son chargement comme controle AsyncPostBack (ScriptManager1.RegisterAsyncPostBackControl(monButton)).
Sur le code du bouton on change le contenu d’un labelA d’un UpdatePanelA et met à ajout un UpdatePanelB (UpdatePanelB.Update()).
On constatera que le labelA n’a pas changé (vu que le UpdatePanelA n’a pas été Update()) mais l’animation sur celui ci c’est quand même executé.
Alors là, expliquez moi l’interet de jouer les animations qui portent le nom: OnUpdating et OnUpdated sur un UpdatePanel qui ne s’est pas Updating/Updated ?!?!?%% J’utilise la beta 1 fraichement téléchargé de vendredi, avait-on ce probleme avant ?
Enfin soit, ma petite astuce pour pouvoir me sortir de cette galere et controler l’execution des animations à été de poser une condition dans la sequence des animations:
1 2 3 | <Condition ConditionScript="ToPlay('UpdatePanel1')"> <FadeOut duration=".25" Fps="30" minimumOpacity=".2" /> </Condition> |
Et dans ma page un petit script JS :
1 2 3 4 5 6 7 8 9 | <script language="javascript" type="text/javascript"> var _UPtoPlay; function setUPtoPlay(sender) { _UPtoPlay = sender; } function ToPlay(sender) { return sender == _SenderCallback ? true:false; } </script> |
Enfin j’ajoute l’attribut OnClick sur les triggers de mon UpdatePanel A et B pour appeler la fonction setUPtoPlay :
1 2 | Button1.Attributes.Add("onClick", "UPtoPlay('UpdatePanel1');"); |
De tel maniere chaque controle émettant un ASyncPostBack appele la fonction setUPtoPlay() qui stoque coté client le nom de l‘UpdatePanel qui est mis à jour et doit jouer l’animation.
Pour revenir sur ce que je disais au debut : Est-ce un bug, un oublie ou juste moi qui me prend la tête pour rien ??? 🙂
Sebastien
J’ai un problème sur le fonctionnement de l’updatePanel de AJAX for ASP.Net et je ne sais plus comment m’en sortir.
Je t’écris donc en espèrant que tu puisse m’aider (mail joint).
Avant j’utilisait un panel Ajax fait par MagicAjax pour gérer mes page et ca fonctionnait très bien.
Depuis que j’utilise le Panel Microsoft, mes page ont un comportement AJAX mais je n’arrive plus à lancer les script type alert(); ou autre.
et pourtant j’utilse (sur un Bouton Click par exemple) la méthode suivante:
me.Page.ClientScript.RegisterStartupScript(me.GetType(),"ALERT", "alert(‘Essai !’);",True);
J’ai même essayé de mettre False à la place de True et d’ecrire moi même les balises de script mais rien ne se passe.
Merci d’avance si tu as un élément de réponse.
Seb
MSN : johnson_fr@hotmail.com
sebeuh
Comme je te disais sur mon autre post où tu avais laissé un commentaire : si tu veux simplement lancer une fonction JS lors d’un click sur un bouton, tu dois juste attribuer l’attribut onCLick sur ton bouton. Ex en VB.net (a mettre dans ton Load) :
monButon.Attributes.Add("onClick", "alert(‘Test’);")
Je ne sais pas si je reponds vraiment à ton probleme. Sinon n’hesite pas à le reformuler.
Pour info, avec quel build d’Atlas travailles tu ?
Bien a toi
Sebeuh