IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Exécuter du code javascript avant le postback


Sujet :

ASP.NET

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2015
    Messages : 14
    Points : 4
    Points
    4
    Par défaut Exécuter du code javascript avant le postback
    Bonjour,
    Je cherche comment exécuter le code javascript contenu dans la fonction « deplacer() » avant le code behind.

    J’ai testé avec le code suivant, mais le javascript ne s’exécute pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <asp:Button ID="Button" runat="server" OnClientClick="deplacer()" OnClick="Button_Click" />


    Et si je modifie le « OnClientClick » comme ci-dessous, alors le javascript s’exécute très normalement, mais le code behind appelé dans « Button_Click » n’est pas lancé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <asp:Button ID="Button" runat="server" OnClientClick="deplacer(); return false" OnClick="Button_Click" />
    Merci d’avance pour votre aide.

  2. #2
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Salut,

    le passage à l'event server ne se fait que si le JS de OnClientClick retourne "true".
    Plus je connais de langages, plus j'aime le C.

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2015
    Messages : 14
    Points : 4
    Points
    4
    Par défaut
    C'est bien que ce que je pensais avoir compris, mais alors comment exécuter du code javascript puis du code behind ensuite ?

  4. #4
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Si ta fonction JS laisse toujours passer (il ne sert pas de confirmation/test) alors à la place du "return false;" après son l'appel tu mets un "return true;".
    Sinon tu t'arranges pour que ta fonction renvoie true/false selon tes tests et tu fais un "return mafonction();"
    Explication par l'exemple (la fonction de base Confirm() renvoie true/false selon si l'on click sur ok/cancel de la dialogbox) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <asp:Button id="btnDelete" runat="server" OnClientClient="return Confirm('ar iou chour ?');" OnClick="btnDelete_Click" />
    Plus je connais de langages, plus j'aime le C.

  5. #5
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2015
    Messages : 14
    Points : 4
    Points
    4
    Par défaut
    Ma fonction laisse toujours passer.
    Le problème c’est que sans rien ou avec « return true » le code JS de la fonction ne s’exécute pas ou plus exactement très mal (normalement la fonction doit avoir pour effet de déplacer « Button1 » lentement suivant plusieurs positions, mais on aperçoit simplement un mouvement très rapide).

    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    <style>        
            #Button1 {
                position: absolute;
                width: 100px;
                left: 0px;
                top: 0px;
            }
     
            #Button2 {
                position: absolute;
                width: 100px;
                left: 100px;
                top: 0px;
            }
    </style>
     
    <script language="javascript" type="text/javascript">
            function deplacer() {
                pos1();
                setTimeout("pos2()", 1000);
            }
     
            function pos1() {
                document.getElementById("Button1").style.top = "100px";
            }
     
            function pos2() {
                document.getElementById("Button1").style.top = "200px";
            }
    </script>
     
    <asp:Button ID="Button1" runat="server" Text="Button 1" />
    <asp:Button ID="Button2" runat="server" Text="Button 2" OnClientClick="deplacer()" OnClick="Button2_Click" />

  6. #6
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Je suppose que le code que tu me présentes est un "résumé" de ton vrai JS, nop ?
    Parce que là tu fais juste 2 sauts de 100px, ça risque pas d'être fluide.
    Ce que tu cherches à faire c'est de passer côté server uniquement quand ton Button1 a fini son parcours ?
    Plus je connais de langages, plus j'aime le C.

  7. #7
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2015
    Messages : 14
    Points : 4
    Points
    4
    Par défaut
    Oui j’ai mis ce petit code pour simplifier, mais en réalité il y aura une dizaine de positions pour lesquelles je réglerai la fluidité à la fin et ce déplacement ne concernera pas qu’un seul bouton mais plusieurs composants du site.
    Mais ce petit exemple permet de voir ce qui devrait se produire (si on met « return false ») et ce qui se produit en réalité et qui ne correspond pas du tout à l’effet voulu (si on met « return true »).

    Oui exactement je souhaite passer côté serveur uniquement une fois que le Button1 a fini son parcours (donc le JS terminé).

  8. #8
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Le souci c'est que setTimeout/setInterval va lancer le code dans un nouveau thread, du coup l'appel au server sera fait avant de passer à travers toutes tes fonctions.
    Et en Javascript il n'existe pas de wait/sleep qui pourrait te permettre de rester dans le thread principal.
    Du coup une solution possible serait de ne pas utiliser directement l'event OnClick d'ASP.NET mais de l'appeler uniquement lorsque ta dernière fonction JS a fini.

    NB : tu devrais plutôt faire un setInterval qui incrémente les positions, ça t'éviterait d'écrire x fonctions.
    Plus je connais de langages, plus j'aime le C.

  9. #9
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2015
    Messages : 14
    Points : 4
    Points
    4
    Par défaut
    OK merci pour cette réponse, j’ai compris d’où vient le problème.

    Mais comment appeler une méthode du code behind sans utiliser l’évènement « OnClick » d’ASP.Net ?

  10. #10
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    La solution propre c'est de faire ça avec les ScriptManager/WebMethod (un exemple ici).
    Une solution simple, un poil moins propre, consiste à ajouter un autre Button avec display=none (càd invisible) et d'appeler simplement sont event click (demander à google pour plus de précision).
    Plus je connais de langages, plus j'aime le C.

  11. #11
    Membre averti

    Développeur .NET
    Inscrit en
    Juillet 2008
    Messages
    176
    Détails du profil
    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2008
    Messages : 176
    Points : 310
    Points
    310
    Par défaut
    Salut,

    Effectivement, pour appeler une méthode code behind, tu peux utiliser des webmethod (il suffit de décorer une méthode dans ta page, solution simple mais pas forcément très jolie), un handler dédié (ashx) ou un web service (ASMX, WCF ou Web Api).

    Mais si j'interviens, c'est surtout parce que ton code JS me fait mal

    Je te recommande d'utiliser jQuery et sa fonction animate. Elle est ultra simple à utiliser et te donnera une fluidité à toute épreuve car très personnalisable. En outre, tu pourras lui coller des effets d'animation, le tout en une seule ligne. http://api.jquery.com/animate/

    Bon courage

  12. #12
    Candidat au Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2015
    Messages : 14
    Points : 4
    Points
    4
    Par défaut
    J'ai consulté le lien sur les webmethod et celui sur jquery, les 2 sont intéressants et je vais pouvoir me débrouiller avec ça maintenant.
    Merci pour vos réponses.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 29/04/2011, 00h24
  2. Exécuter du code javascript à < distance >
    Par Makos dans le forum Général JavaScript
    Réponses: 18
    Dernier message: 20/01/2011, 21h15
  3. Exécuter un code javascript lors du clique sur un textbox
    Par krolis dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 31/03/2010, 15h46
  4. Réponses: 24
    Dernier message: 01/12/2009, 14h58
  5. Réponses: 11
    Dernier message: 26/02/2008, 13h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo