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 :

Executer une fonction javascript immédiatement dans une methode buttonclick


Sujet :

ASP.NET

  1. #1
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut Executer une fonction javascript immédiatement dans une methode buttonclick
    Bonjour,

    Je lance un script javascript via la méthode RegisterStartupScript et je récupère la valeur du confirm du script via un HtmlInputHidden, comme vous le verrez ci-dessous.

    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
    34
    35
    36
    37
    38
    39
    40
    41
    protected void BtUpload_Click(object sender, EventArgs e)
        {
            if (IsAValidFile())
            {
                //If file already exists => Replace or cancel the action ?
                bool ReplaceFile = false;
                if (IsAlreadyUploaded())
                {
                    if (WantToReplaceFile() == "Oui")
                    {
                        ReplaceFile = true;
                    }
                    else
                    {
                        ReplaceFile = false;
                    }
     
                    UploadAFile();
                }
            }
        }
     
    private bool IsAlreadyUploaded()
        {
            return true;
        }
     
        private string WantToReplaceFile()
        {
            //To get value of pop-up in case of upload a file already existing on the server.
            ConfirmReplace = new HtmlInputHidden();
            ConfirmReplace.ID = "1";
            ConfirmReplace.Name = "ConfirmReplace";
            this.Controls.Add(ConfirmReplace);
     
            //Ask for replace the file or cancel the action.
            string scriptJS = "<script language=\"JavaScript\">document.getElementById(\"" + ConfirmReplace.ClientID.ToString() + "\").value = confirm(\"" + Resources.PortalResources.LbUploadRejected + "\");" + Page.GetPostBackEventReference(ConfirmReplace) + "</script>";
            Page.ClientScript.RegisterStartupScript(typeof(System.Web.UI.Page), "test", scriptJS);
     
            return ConfirmReplace.Value;        
        }
    Par contre via le debugger j'ai pu observé que le code de la méthode BtUpload_Click s'exécute entiérement avant que la pop-up confirm javascript ne s'affiche.
    Je souhaiterais que la pop-up s'affiche avant l'exécution de UploadAFile(), afin de l'exécuter conditionnellement en fonction du retour de confirm.

    Je me demandais si pour cela je ne devrais pas plutôt exécuter la méthode RegisterClientScriptBlock ?
    Ou bien alors dois je créer un event qui sera déclencher dans BtUpload_Click et qui s'occupera de lancer UploadAFile ? Mais dans ce cas je ne sais plus si la méthode BtUpload_Click se terminera ou non avant de passer dans la nouvelle methode associé à l'event ?

    Avez vous d'autres idées ?

    Merci d'avance pour votre aide.

    Cédric.

  2. #2
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Tu dois passer par la propriété OnClientClick de ton button

  3. #3
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 254
    Points
    28 254
    Par défaut
    Citation Envoyé par lutecefalco Voir le message
    Tu dois passer par la propriété OnClientClick de ton button
    ca suffira pas. lui il est déjà en postback, et donc c'est logique que ca finisse la methode d'upload avant la confirmation puisque celle-ci ne sera visible qu'au prochain affichage de la page.

    la logique de codage n'est pas bonne.
    - soit tu vérifies AVANT le bouton, et via ajax que le fichier a été uploadé, et tu affiches la confirmation

    - soit tu le fais en code-behind et donc tu passes par des compos serveurs pour afficher un message , soit tu passes par du javascript + confirm mais donc c'est le javascript qui lancera un postback. selon moi, la méthode WantToReplaceFile() est pas bien foutue, tu veux lire une réponse javascript depuis du code-behind...
    tu confonds donc client et serveur. le seul moyen de le faire, c'est via des champs cachés, mais c'est "sale" car tu ne recois pas la réponse direction, faut la lire, (un peu ce que tu fais).


    ps: de toute facon, ton code est pas bon ou alors t'as une facon de faire bizarre mais quand je vois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     if (WantToReplaceFile() == "Oui")
                    {
                        ReplaceFile = true;
                    }
                    else
                    {
                        ReplaceFile = false;
                    }
     
                    UploadAFile();
    la methode uploadfile est appelée quelque soit ton choix oui ou non :/

  4. #4
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Merci pour ces réponses.

    la methode uploadfile est appelée quelque soit ton choix oui ou non :/
    => C'est normal, je n'ai pas encore mis le if pur rendre son appelle conditionnel.

    Si je comprends bien, dans mon cas, si je préfixe la valeur de ConfirmReplace à un truc genre default et que je n'appelle pas UploadAFile, je devrais pouvoir obtenir l'information d'apparition de la pop-up dans la méthode Page_Load, non ?

    A ce moment là je n'ai plus qu'à lancer la méthode UploadAFile dans Page_Load. J'aurais peut être besoin de péréniser certaines informations.
    Mais bon je m'envais peut être dans quelque chose de tordu. Je vias poser mon problème autrement :

    Je travaille sur une application Web déjà existante et fonctionnelle.
    Il y a une page web où il est possible d'attacher des fichiers à ce que nous appellons un "scénario". Ces fichiers sont uploader sur le serveur.
    Aujourd'hui, l'application permet d'uploader 2 fois le même fichier (ils sont renommés avec un identifiant unique sur le serveur).
    Un nouveau besoin du client est d'obtenir l'affichage d'une pop-up en cas d'upload d'un fichier déjà attaché au scénario. Cette pop-up demande confirmation pour écraser ou non le fichier existant.

    Au vu de l'architecture de l'application Web, j'ai 2 moyens pour faire cela :
    - Créer une pop-up en asp.net qui m'offre toutes les possibilités de l'asp. => Mais dans l'application les pages sont toutes référencées dans la BDD sous jacente. Les développeurs en place depuis le début du projet (je suis nouveau dans l'équipe) m'ont signalés qu'ils préféreraient ne pas rajouter de page sur l'application pour les pop-up.
    - Utiliser la fonction confirm de javascript et récupérer la valeur oui/non. => Les dévelopeurs de cette équipe ne peuvent pas m'aider sur le sujet car eux même ont besoin de chercehr sur le net pour me fournir des réponses.

    Je ne peux pas non plus leur demander de faire l'évolution car ils me l'ont donnés pour me faire la main sur l'application. (Volontairement pas simple, mais avec un bon délais -> jusqu'à début mars)

    Existe t il un moyen de créer sur ma page asp un bouton (que je rend invisble) que je peux lier au bouton de la pop-up pour bénéficier du déclenchement de l'event ?

    EDIT:
    En fait en relisant mon texte, je m'aperçois que je reviens à ma première réflexion :
    Comment en asp.net (ou ajax ou javascript) faire une message box de demande de confirmation comme on peut le faire facilement en WinForm ?

  5. #5
    Membre expérimenté Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Points : 1 352
    Points
    1 352
    Par défaut
    théoriquement non tu es en mode web donc déconnecté. ce qui signifie qu'il va falloir que tu stockes ton fichier dans un répertoire temporaire, le temps de réaliser un postback et de demander l'info à l'utilisateur.

    ensuite en fonction de sa réponse tu écraseras ou non l'autre fichier.

    Il y a peut être moyen de réaliser quelque chose avec de l'ajax comme cela :

    tu upload ton fichier et sur le serveur tu te rends compte que ton fichier existe déjà. tu met a jour une valeur cote serveur disant uploadID=xxx a un problème.

    cote client un appel javascript asynchrone vérifie toutes les x secondes ou mieux encore une fois ton upload fini que tout va bien sur le serveur. si ca va pas, tu obtiens une demande d'info sur la réaction à prendre, qui résultera en un nouvel appel à un webservice pour permettre de résoudre le conflit.

    Voila cela ne me semble pas si simple, la vraie question est maintenant de savoir combien de temps tu as pour faire ton développement ...

  6. #6
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Citation Envoyé par ced600 Voir le message
    EDIT:
    En fait en relisant mon texte, je m'aperçois que je reviens à ma première réflexion :
    Comment en asp.net (ou ajax ou javascript) faire une message box de demande de confirmation comme on peut le faire facilement en WinForm ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <asp:Button id="btn" runat="server" OnClick="btn_Click" OnClientClick="return confirm('Are you sure?')"></asp:Button>

  7. #7
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Bon j'ai obtenu de l'aide.
    En fait, à partir du code javascript je peux faire appelle à la méthode dopostback pour appeller une méthode Asp.Net.

    De plus, au final dans un des coins de l'application, il se trouve qu'un des développeurs avaient déjà implémenté une page de pop-up générique.

    Merci à tous pour votre aide.

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

Discussions similaires

  1. Objet existant reconnu dans une fonction mais pas dans une autre
    Par Jiyuu dans le forum Général Python
    Réponses: 0
    Dernier message: 20/09/2011, 19h19
  2. Réponses: 1
    Dernier message: 26/12/2010, 22h20
  3. [Dojo] Objet Dojo créé dans une fonction et utilisé dans une autre.
    Par hapalemur dans le forum Bibliothèques & Frameworks
    Réponses: 10
    Dernier message: 05/06/2009, 14h59
  4. variable dynamique dans une fonction javascript
    Par Shivaneth dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/04/2005, 16h58
  5. Réponses: 2
    Dernier message: 11/08/2004, 16h01

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