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 :

Lancer une fenêtre Javascript depuis .Net


Sujet :

ASP.NET

  1. #1
    Membre éclairé Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Par défaut Lancer une fenêtre Javascript depuis .Net
    Question posée maintes et maintes fois.

    J'ai un bouton sur lequel je veux lancer une fenêtre contenant une page aspx.

    Pour commencer, je ne peux pas faire tout simplement un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MonBouton.Attributes.Add("onclick",script);
    En effet, pas de passage vers le serveur... Je veux récupérer des infos qui seront générées sur le clic d'un bouton, infos différentes selon l'endroit du bouton, les passer dans une variable de session pour les récupérer dans une fenêtre.

    Ce que j'ai fait :
    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
     
     ImageButton bouton= new ImageButton();
                bouton.Click += new ImageClickEventHandler(bouton_Click);
     
     
     void bouton_Click(object sender, ImageClickEventArgs e)
            {
     
    this.Page.Session["MonInfo"] = this.Infos;
     
                StringBuilder stringBuilder = new StringBuilder();
     
                stringBuilder.Append("<script language='javascript'>");
                stringBuilder.Append("window.open('Mapage.aspx','Mapage','width=200,height=200');");
     
                stringBuilder.Append("</script>");
     
                Type type = this.Page.GetType();
     
     
                this.Page.ClientScript.RegisterClientScriptBlock(type, "OpenWindow", stringBuilder.ToString());
            }
    Mais la fenêtre ne s'ouvre pas...

    Merci de votre aide.

  2. #2
    Membre éclairé Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Par défaut
    Personne ?

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Par défaut
    Essaye avec Page.ClientScript.RegisterStartupScript(...) plutôt.

  4. #4
    Membre chevronné
    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
    Par défaut
    Tu ne devrais pas mettre l'URL complete de ta page Manage.apsx ?

    ../../Manage.aspx......

    Fix

  5. #5
    Membre éclairé Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Par défaut
    C'est bon, j'ai trouvé la parade. Pas top mais ça a le mérite de marcher.

    Donc, comme vous l'avez dit, utiliser d'abord RegisterStartUpScript();.

    Ensuite, sur l'évènement de Click, remplir la Session:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ImageButton bouton= new ImageButton();
                bouton.Click += new ImageClickEventHandler(bouton_Click);
     
     
     void bouton_Click(object sender, ImageClickEventArgs e)
            {
    this.Page.Session["MaSession"] = null;
                this.Page.Session["MaSession"] = this.Truc;
    }
    Il y a eu clic qui génère une activité côté serveur, donc un round trip est enclenché, et dans le OnPreRender, qui intervient APRES l'évènement Click, on utilise RegisterStartUpScript() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     if (this.Page.Session["MaSession"] != null)
                {
     
                    string script = "window.open('Mapage.aspx','Mapage','width=200,height=200');";
     
                    this.Page.ClientScript.RegisterStartupScript(this.Page.GetType(), "open", script, true);
                }
    Voilà, ça m'ouvre bien la fenêtre !

    Fiou, merci de votre intervention .


    Edit: Et bien non, ça ne fonctionne pas en fait... Petite erreur, mais où...

  6. #6
    Membre éclairé Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Par défaut
    Le RegisterStartUpScript() permet de registrer le lancement de la fenêtre pour un prochain roundtrip...

    Je n'arrive pas à accéder à ce roundtrip...

  7. #7
    Membre Expert Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Par défaut
    Essai ça plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void bouton_Click(object sender, ImageClickEventArgs e)
    {
        this.Page.Session["MonInfo"] = this.Infos;
        this.Page.ClientScript.RegisterStartupScript(this.getType(), "OpenWindow", "window.open('Mapage.aspx','Mapage','width=200,height=200');", true);
    }

  8. #8
    Membre éclairé Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Par défaut
    Déjà essayé, ça ne fonctionne pas non plus.

  9. #9
    Membre chevronné
    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
    Par défaut
    Je viens de tester ce bout de code, car cela me semblait vraiment étrange que cela ne puisse pas fonctionner.

    Cela fonctionne très bien, désactive ton anti popup

    Fix

  10. #10
    Membre Expert Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Par défaut
    étrange... es-tu sur de passer dans la méthode bouton_Click quand tu clique sur le bouton ? Ou alors, ta page ASPX ne contient-elle pas une erreur JavaScript qui bloquerait du coup l'exécution du code window.open() ?
    Regarde le code source de ta page après le clic pour voir si le JavaScript a bien été inclus (en fin de page)

  11. #11
    Membre éclairé Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Par défaut
    Je passe bien dans le bouton_click, ça c'est sûr, et aucune erreur javascript n'est générée, et par contre, je n'ai aucune trace du bloc JS ! Je le sais bien que ça devrait fonctionner !

    Ce bouton est intégré dans un contrôle qui lui est intégré sur la page.

    Le contrôle est intégré à un UpdatePanel.

  12. #12
    Membre Expert Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Par défaut
    Le contrôle est intégré à un UpdatePanel.
    Ah ben je penses que ton PB vient de là ! En effet, RegisterStartupScript place le code JS en fin de page. Or seul ton UpdatePanel est mis à jour suite à l'appel serveur, donc il ne peut pas mettre à jour la fin de ta page et y placer le code JS.
    Peut-être peux-tu essayer alors de mettre un contrôle literal dans le updatePanel et d'y écrire le script JS dedans, genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    literal1.text = monScript.ToString();
    (avec monStript étant un StringBuilder contenant le JS)

  13. #13
    Membre éclairé Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Par défaut
    Pffff, je vous jure, voici la solution (tout ça à cause des UpdatePanel) :

    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
     
    void bouton_Click(object sender, ImageClickEventArgs e)
            {
     
                this.Page.Session["MaSession"] = null;
                this.Page.Session["MaSession"] = this.Truc;
     
     
                string script = "window.open('Mapage.aspx','Mapage','width=200,height=200');";
     
                //On créé un ScriptManager 
                ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page);
     
                //Si il n'y a pas utilisation d'Ajax
                if (scriptManager == null)
                {  
     
                    this.Page.ClientScript.RegisterStartupScript(this.Page.GetType(), "open", script, true);
                }
                else
                {
                    //Si il y a utilisation d'Ajax  
                    ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "open", script, true);
                }
            }

    Le ScriptManager va permettre de savoir si on est sur une instance ajaxée ou non du contrôle.

    Merci de votre aide !

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

Discussions similaires

  1. lancer une appli windows depuis Asp.net
    Par wolflost dans le forum ASP.NET
    Réponses: 1
    Dernier message: 08/12/2009, 11h54
  2. Réponses: 1
    Dernier message: 18/04/2008, 16h11
  3. Réponses: 2
    Dernier message: 05/10/2007, 14h31
  4. [SWT] Lancer une fenêtre SWT depuis une autre
    Par sunvialley dans le forum SWT/JFace
    Réponses: 12
    Dernier message: 21/04/2006, 17h22
  5. [PHP-JS] comment lancer une fonction javascript a partir de php
    Par amika dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 06/06/2005, 19h23

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