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 :

Javascript, Pop-up et PostBacks


Sujet :

ASP.NET

  1. #1
    Membre confirmé Avatar de Gunny
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Danemark

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 188
    Points : 629
    Points
    629
    Par défaut Javascript, Pop-up et PostBacks
    Bonsoir à tous,

    J'avais déjà posté ce message, mais comme il a disparu avec le crash du forum et que je n'ai toujours pas de solution, je réitère ma question.

    Donc, dans mon appli j'ai une page où l'utilisateur peut éditer les informations d'un véhicule, et notamment la place de parking où il se trouve. Pour éditer cette information, l'utilisateur doit cliquer sur un bouton qui ouvre un pop-up (screenshot dudit pop-up en pièce jointe). Il y remplit le formulaire, et en cliquant sur "confirmer", le pop-up doit se fermer, et transmettre l'identifiant de la place à un champ caché dans sa page maîtresse, lequel champ, une fois à jour, va y mettre à jour quelques labels et déclencher une procédure stockée pour mettre à jour la table véhicule.

    Seulement voilà, patatras, mon Javascript ne marche pas.

    Voici le code de ma fonction appelée lors du clic sur le bouton "confirmer" :

    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
    protected void btn_finir_Click(object sender, EventArgs e)
    {
      string num_place;
     
      //Si "-Nouvel emplacement-" est sélectionné, on ajoute le nouvel emplacement dans la base 
      // et on récupère son identifiant
      if (ddl_emplacements_parking.SelectedValue == "-1")
        num_place = ajout_emplacement();
      else
        //Sinon on prend l'identifiant sélectionné dans la liste déroulante
        num_place = ddl_emplacements_parking.SelectedValue;
     
        //Transmettre la valeur à la page
        string script = "self.opener.getElementById('hdn_numemplacement').value = '" + num_place + "';"
                      + "self.close();";
     
      Page.ClientScript.RegisterStartupScript(this.GetType(), "fermer_transmettre", script, true);
    }
    En gros, quand je clique sur "confirmer", je vois que le pop-up se recharge, mais il ne se passe absolument rien.

    Voilà, si quelqu'un a une idée...

    Merci
    Images attachées Images attachées  

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Points : 581
    Points
    581
    Par défaut
    tu as debugé ton script avec firebug, notamment pour voir si tu n'as pas d'erreur et si il trouvait bien ton element dans la fenetre appellante?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    581
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 581
    Points : 633
    Points
    633
    Par défaut
    La popup se recharge hors elle devrait se fermer non ?
    J'ai eu le meme genre de problème, sauf que je pense que c'était plus facile dans mon cas, vu que je devais retenir les valeurs modifiées dans une session.

    Je dois revérifier le code de l'ancienne application, je ne le connais pas par coeur.
    Y aurait pas un setTimeout à mettre qqpart ?

  4. #4
    Membre confirmé Avatar de Gunny
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Danemark

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 188
    Points : 629
    Points
    629
    Par défaut
    Citation Envoyé par gyzmau Voir le message
    tu as debugé ton script avec firebug, notamment pour voir si tu n'as pas d'erreur et si il trouvait bien ton element dans la fenetre appellante?
    Je ne peux pas utiliser firebug ici, mais oui, le problème vient bien de là. Si je limite mon script à "self.close();", la pop-up se ferme bien (même si aucune valeur n'est transmise à la page appelante bien sûr du coup).

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Points : 581
    Points
    581
    Par défaut
    fais toi une alert sur le getelementbyid pour voir si il te retourne pas null.

  6. #6
    Membre confirmé Avatar de Gunny
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Danemark

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 188
    Points : 629
    Points
    629
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string script = "self.alert(self.opener.getElementById('hdn_numemplacement').value);";
    Il ne se passe rien, le pop-up se recharge et c'est tout, pas de fenetre alert qui s'affiche.

  7. #7
    Membre confirmé Avatar de Gunny
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Danemark

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 188
    Points : 629
    Points
    629
    Par défaut
    Up du matin... Chagrin

    J'ai toujours comme solution de secours de passer au pop-up l'identifiant du véhicule pour qu'il fasse directement la MAJ de la base en cliquant sur "confirmer", mais ça m'obligerait à avoir un bouton "recharger les informations de stationnement" dans la page d'édition du véhicule, et je préfèrerais éviter.

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Points : 581
    Points
    581
    Par défaut
    essai d'utiliser:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    opener.document.getElementById

  9. #9
    Membre confirmé Avatar de Gunny
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Danemark

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 188
    Points : 629
    Points
    629
    Par défaut
    Ca m'ouvre une fenetre d'alerte avec "[object]" pour seul texte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string script = "alert(opener.document.getElementById('hdn_numemplacement'));";
    avec le ".value" en plus, une fenetre vide.

  10. #10
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Points : 581
    Points
    581
    Par défaut
    lol parce que ton value est vide non?

    moi j'ai fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                string script = "\nself.opener.document.getElementById('showValue').value = 'Voila la valeur';\nalert(self.opener.document.getElementById('showValue').value)";
     
                Page.ClientScript.RegisterStartupScript(this.GetType(), "fermer_transmettre", script, true);
    ca l'a pas trop géné.

  11. #11
    Membre confirmé Avatar de Gunny
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Danemark

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 188
    Points : 629
    Points
    629
    Par défaut
    Yeah, merci, ça ne plante plus maintenant
    Bizarre, j'étais persuadé que j'avais déjà essayé ça.

    Bref, ça c'est (enfin) ok, mais par contre ma page ne se recharge pas lorsque la valeur de mon hiddenfield est changé. Après consultation de la documentation, c'est normal car en fait, l'évènement "onvaluechanged" n'est lancé que quand la valeur a changé entre deux posts de formulaire (pas d'autopostback donc).
    Est-ce qu'il y a une manière simple de faire ça ?

  12. #12
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Points : 581
    Points
    581
    Par défaut
    met toi sur le onchange du input en javascript.
    Et si tu veux faire un postback regarde du coté de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Page.ClientScript.GetPostBackEventReference

  13. #13
    Membre confirmé Avatar de Gunny
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Danemark

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 188
    Points : 629
    Points
    629
    Par défaut
    Oui mais c'est embêtant, un HiddenField n'a pas de propriété "Attribute", impossible donc de lui faire un truc du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hdn_numemplacement.Attributes["onchange"] = Page.ClientScript.GetPostBackEventReference(hdn_numemplacement, hdn_numemplacement.ID);

  14. #14
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Points : 581
    Points
    581
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <input id="Hidden1" type="hidden" runat="server" />

  15. #15
    Membre confirmé Avatar de Gunny
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Danemark

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 188
    Points : 629
    Points
    629
    Par défaut
    Ah, on peut faire ça, c'est cool

    Merci beaucoup, j'ai bien avancé, mais je suis bloqué avec l'évènement "onChange".

    Voici mon code (amputé de tout ce qui ne nous concerne pas bien entendu) de la page de modification d'un véhicule, donc là on n'est plus sur le popup mais sur son parent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    protected void Page_Load(object sender, EventArgs e)
    {
      string script = Page.ClientScript.GetPostBackEventReference(hdn_numemplacement, hdn_numemplacement.ID);
      hdn_numemplacement.Attributes.Add("onChange", script );
     
      if (IsPostBack) {
        string postbackControlId = Request.Form["__EVENTTARGET"].ToString();
     
        if (postbackControlId == hdn_numemplacement.ID) {
          maj_emplacement();
          details_parking();
        }
      }
    }
    Or, quand mon pop-up se ferme après avoir trannsmis sa valeur, rien ne se passe.

    J'ai bien essayé de tester avec ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hdn_numemplacement.Attributes.Add("onChange", "window.alert('pouet');");
    Mais même quand la valeur de hdn_numemplacement est changée par autre chose que le pop-up (en mettant un bouton exprès par exemple), rien ne s'affiche.

    Pour info, le script est pourtant bien là dans la source html :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input name="hdn_numemplacement" type="hidden" id="hdn_numemplacement" value="1" onChange="window.alert('pouet');" />

  16. #16
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Points : 581
    Points
    581
    Par défaut
    à la rigueur je pense que le mieux serait d'appeller une fct en passant en paramétre ce que tu as besoin que tu aura crée en javascript. A ce moment la tu aura vraiment la main pour faire ce que tu veux (faire du postback changé des valeurs sur ta page and co).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    window.opener.TaFonction(tonArgument)
    Setter une valeur pour faire lever un événement tu n'a pas vraiment le contrôle.

  17. #17
    Membre confirmé Avatar de Gunny
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Danemark

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 188
    Points : 629
    Points
    629
    Par défaut
    Yeah voilà, ça fonctionne

    Pour ceux que ça intéresse, je mets le code.

    Dans la page parent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function maj_emplacement(num_emplacement){
      document.getElementById('hdn_numemplacement').value = num_emplacement;
      javascript:setTimeout('__doPostBack(\'hdn_numemplacement\',\'\')', 0);
    }

    Dans le pop-up:
    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
    protected void btn_finir_Click(object sender, EventArgs e)
    {
      string num_place;
     
      //Si "-Nouvel emplacement-" est sélectionné, on ajoute le nouvel emplacement dans la base 
      // et on récupère son identifiant
      if (ddl_emplacements_parking.SelectedValue == "-1")
        num_place = ajout_emplacement();
      else
        //Sinon on prend l'identifiant sélectionné dans la liste déroulante
        num_place = ddl_emplacements_parking.SelectedValue;
     
      //Transmettre la valeur à la page
      string script = "window.opener.maj_emplacement('" + num_place + "');"
                    + "window.close();";
     
      Page.ClientScript.RegisterStartupScript(this.GetType(), "fermer_transmettre", script, true);
    }
    Merci beaucoup !

  18. #18
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Points : 581
    Points
    581
    Par défaut
    cool pour toi

    Si tu veux tu peux faire aussi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function maj_emplacement(num_emplacement){
    //Si tu as l'ajaxControltoolkit, n'apporte rien mais plus simple à écrire
      $get('hdn_numemplacement').value = num_emplacement;
    //sans utiliser le GetPostbackRef
     __doPostBack('hdn_numemplacement','');
    }

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

Discussions similaires

  1. [javascript] Pop up
    Par sirbaldur dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 14/06/2006, 12h58
  2. [Javascript] effet de pop up
    Par romsdu26 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 24/03/2006, 11h26
  3. [Javascript] pop up
    Par corsamobile dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 13/02/2006, 19h34
  4. [JavaScript] dimension pop-up
    Par clairette dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 24/11/2005, 09h18
  5. ouvrir un pop-up sans javascript ?
    Par bakonu dans le forum Général Conception Web
    Réponses: 2
    Dernier message: 09/02/2005, 16h46

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