none
Postback apres requete http RRS feed

  • Question

  • Bonjour,

    J'aurais besoin de rafraichir une page après l'envoie d'une requête http.

    Dans une de mes pages, je créer un pdf en fonction de données récupérees dans un DetailsView.

    Quand l'utilisateur clique sur le bouton "inserer" de mon detailsview, les données sont sauvegardées puis le pdf est  généré soit pour l'ouvrir soit pour le telecharger.

    Apres l'insertion dans l'entitydatasource, je génére directement le pdf :

    protected void GenerateFacturePdf(Facture fa) { // une fois inséré dans la bdd, on génére le pdf. var output = new MemoryStream(); PDFManager pm = new PDFManager(); pm.CreateFA(output, Server.MapPath("~/Images/Icons/logoSowebplate_mini.jpg"), _bonfa, _bl); //pm.CreateFA(output, Server.MapPath("~/Images/Icons/logoSowebplate_mini.jpg"), Session["jobkey"].ToString()); Response.ContentType = "application/pdf"; Response.AddHeader("Content-Disposition", string.Format("attachment;filename=Facture-{0}.pdf", _bonfa)); Response.BinaryWrite(output.ToArray()); }

            protected void FaEds_Inserted(object sender, EntityDataSourceChangedEventArgs e)
            {
                // gerer la lien entre bl et facture
                Facture fa = e.Entity as Facture;
                linkBLtoFacture(fa.FactureId);
                GenerateFacturePdf(fa);
                Response.Write(Request.RawUrl);
            }

    Mon problème est que j'aimerai rafraichir la page pour actualiser les donnée de mon detailsview.

    Mais il y a un conflit avec mes 2 requetes http:

    Response.BinaryWrite(output.ToArray());

    et

    Reponse.Write(Request.RawUrl);

    Ma question donc est comment rafraichir la page apres avoir généré mon pdf.

    Merci d'avance pour votre aide,

    Erwan

    mercredi 18 juillet 2012 14:59

Réponses

  • Bonjour,

    Vous ne pouvez pas avoir accés aux événements "OK" ou "Annuler" des boites de dialogues de téléchargement des navigateurs.

    Lors du clic sur le lien "Générer la facture pdf", vous devez retourner votre page "Gérer les factures".
    Dans cette page, vous exécutez un code Javascript qui ouvre une nouvelle fenêtre du navigateur (window.open()) en spécifier votre fichier pdf dans l'URL.

    Ainsi une nouvelle fenêtre va apparaitre afin que l'utilisateur puisse voir/télécharger votre PDF.

    Est-ce que cela répond à votre problème ?

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    • Marqué comme réponse Erwanage lundi 23 juillet 2012 08:10
    dimanche 22 juillet 2012 21:16
    Modérateur

Toutes les réponses

  • Bonjour,

    Il n'est pas possible de générer un PDF et ensuite de rafraichir la page (si le contenu du PDF est renvoyé au navigateur, aucune action ne sera fait par le navigateur pour revenir à votre site web...).

    Ne vouvez-vous pas plustôt générer votre PDF dans une nouvelle fenêtre et continuer l'exécution de votre site web ?

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    mercredi 18 juillet 2012 16:04
    Modérateur
  • Merci pour votre réponse,

    J'avais pensé à cette option mais je n'arrive pas à la mettre en place correctement.

    Je voudrais une popup qui s'ouvre au moment de l'insertion, génére le pdf dans le page load, et ensuite se ferme une fois le pdf généré.

    J'avais pu créer ceci avec un popup mais une fois ouvert, la popup reste ouverte.

    jeudi 19 juillet 2012 06:59
  • Bonjour,

    Il faut générer un code JavaScript qui ferme votre popup en fonction de votre besoin :

    var f = window.open("url.pdf", "maFenetre");
    ...
    f.close();

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    jeudi 19 juillet 2012 22:39
    Modérateur
  • Je vois ce qu'il faut faire mais je ne sais pas comment ..

    iciQuand je clique sur "valider et générer la facture au format pdf", j’insère ma facture dans la base de données. Ensuite, je génère le pdf (comme expliqué dans mon premier post).

    Cette fenetre de telechargement s'ouvre automatiquement avec
    Response.BinaryWrite(output.ToArray());
    Le problème est que je ne sais pas comment récupérer cette fenetre en javascript ou comment attacher un événement quand l'utilisateur cliquera sur ok ou annuler afin d'actualiser la page proncipale.
    vendredi 20 juillet 2012 07:12
  • Bonjour,

    Vous ne pouvez pas avoir accés aux événements "OK" ou "Annuler" des boites de dialogues de téléchargement des navigateurs.

    Lors du clic sur le lien "Générer la facture pdf", vous devez retourner votre page "Gérer les factures".
    Dans cette page, vous exécutez un code Javascript qui ouvre une nouvelle fenêtre du navigateur (window.open()) en spécifier votre fichier pdf dans l'URL.

    Ainsi une nouvelle fenêtre va apparaitre afin que l'utilisateur puisse voir/télécharger votre PDF.

    Est-ce que cela répond à votre problème ?

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    • Marqué comme réponse Erwanage lundi 23 juillet 2012 08:10
    dimanche 22 juillet 2012 21:16
    Modérateur
  • Bonjour,

    Un grand merci pour votre aide.

    En effet, window.open() à résolu mon problème et cela fonctionne correctement.

    Cependant, j'ai du remplacer mon memorystream par un filestream:

    protected void GenerateFacturePdf(Facture fa)
            {
                string filepath = "~/Temp/Facture-" + _bonfa + ".pdf";
                string fullpath = Server.MapPath(filepath);
                string jspath = ResolveClientUrl(filepath);
                var output = new FileStream(fullpath, FileMode.Create);
    
                PDFManager pm = new PDFManager();
                pm.CreateFA(output, Server.MapPath("~/Images/Icons/logoSowebplate_mini.jpg"), _bonfa, _bl);
    
                Response.Write("<script type=\"text/javascript\">window.open(\"" + jspath + "\", \"telecharger la facture\", 'status=no, resizable=yes, scrollbars=yes, toolbar=no,location=no,menubar=no ')</script>");
            }
    Merci.
    lundi 23 juillet 2012 08:13