2010-07-21 12 views
2

J'ai un <asp:button /> qui génère un rapport PDF. Je veux utiliser jQuery BlockUI pour afficher un message qui dit: Génération de rapport ..Débloquer (jQuery BlockUI) après le fichier envoyé au navigateur via le flux de réponses

Utilisation: Response.BinaryWrite J'envoie ensuite le fichier à l'utilisateur afin qu'il apparaisse comme un téléchargement de fichier dans le navigateur. Je ne peux pas obtenir le $.unblockUI(); pour tirer. Dès que le téléchargement du fichier commence ou est terminé ou est annulé, je veux qu'il disparaisse. Actuellement, ça ne marche jamais .. C'est comme si la page n'avait pas été rechargée, j'ai frappé le serveur mais il revient avec la même page.

choses que j'ai essayé:

  • Définition d'une variable JS true ainsi de suite document.ready() il appellera une fonction si elle est définie sur true. Cela ne fonctionne pas car même si je change la variable dans le code, cela ne change pas le code HTML envoyé au client.
  • Ce genre de chose: Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(function() { $.unblockUI; }); //register with Microsoft way $(document).ajaxStop($.unblockUI); //double the insurance and register with jquery way ne sera jamais appelé ..

peut-il être réalisé avec un UpdatePanel?

Des pensées?

également dans le cas où il aide:

Response.AddHeader("Content-Disposition", "attachment;filename=""" & ShortFilename & """") 
     Response.AddHeader("Content-Length", byteArray.Length) 
     Response.BinaryWrite(byteArray) 
     Response.Flush() 
     Response.End() 

Je peux voir pourquoi cela ne fonctionne pas en quelque sorte, la page n'est pas rafraîchissant dans toute façon il y a juste un flux de réponse étant envoyé au navigateur, mais sûrement il y a un événement sur lequel je peux m'accrocher?

+0

Avez-vous trouvé une solution à ce problème? –

+0

Il est effectivement impossible de le faire comme je l'ai prévu à l'origine en renvoyant un flux ne recharge pas la page ou vous permet de passer une logique personnalisée .. – Markive

+0

La solution est de faire tout le traitement avec l'écran de chargement montrant, puis soit renvoyer une réponse qui supprimera BlockUI et ensuite demander le fichier que vous voulez diffuser, ou les rediriger vers une page qui re-demandera le flux .. Vous devez garder le fichier sur le disque dur temporairement pour le faire si .. – Markive

Répondre

0

La solution est de bloquer la première interface utilisateur comme d'habitude. Ensuite, envoyez une requête AJAX à votre générateur de rapports, lorsque le fichier PDF est généré, stockez-le localement pendant une courte période, ou placez-le dans un dossier temporaire qui est déconnecté lorsque l'utilisateur se déconnecte ou expire. Demandez au générateur de rapports de renvoyer un message de réussite et une URL.

Demandez à la demande ajax client gère le message de succès, retirez BlockUI, puis appelez l'URL en utilisant:

window.location="http://yourURL/temp/report.pdf 

Le navigateur va commencer à télécharger le fichier et vous avez terminé!

https://stackoverflow.com/a/7660817/181197