2008-10-08 4 views
3

Dans mon application ASP.Net, j'ai besoin que lorsqu'un utilisateur clique sur un élément de l'interface utilisateur, nous générons pour eux un PDF qu'ils peuvent télécharger. Ceci est actuellement implémenté en faisant un post sur une page ashx. Cette page inspecte essentiellement le formulaire et exécute ensuite la page côté serveur correcte qui résulte soit en HTML ou un document PDF de ces pages HTML.Veuillez patienter boîte de dialogue et télécharger des fichiers dans asp.net

Sur le client je sais à l'avance si nous allons obtenir un fichier PDF ou HTML, quand c'est un HTML, j'ouvre une nouvelle fenêtre et dirige le message sur cette fenêtre et tout fonctionne bien. Quand c'est un PDF je ne change pas la cible pour le formulaire et il reste sur la page en cours.

Cela fonctionne, l'utilisateur est présenté avec une boîte de dialogue de sauvegarde, et la page en cours n'est pas modifiée ou perdue.

Le problème que j'ai est que la génération du PDF prend de 1 à 15 secondes. Ce que je veux faire est popup, veuillez attendre le dialogue. Affichage de la popup va être facile, ce dont je ne suis pas sûr, c'est comment puis-je savoir pour fermer la popup? La popup sera une div dans la page en cours.

+0

Une autre question est-il possible d'utiliser les méthodes ajax pour que le navigateur voie le type de contenu et le gère correctement? – JoshBerke

Répondre

3

La fenêtre contextuelle peut avoir une horloge côté client qui interroge le serveur pour la fin de la tâche. La tâche de serveur longue durée doit mettre à jour la progression dans une table de base de données ou un objet de cache de serveur auquel le service d'interrogation peut accéder.

Couple d'anciens articles du magazine MSDN. Vous devriez être capable d'utiliser les mêmes concepts avec des bibliothèques plus récentes comme asp.net Ajax.

Reporting Task Progress With ASP.NET 2.0

Simplify Task Progress with ASP.NET "Atlas"

+0

C'est probablement le meilleur pari, car la tâche n'est pas si longue, je n'aimais pas l'idée que l'utilisateur enregistre le fichier, alors voir le popup est toujours là. L'astuce devient ce qui est une bonne valeur d'intervalle. Je devrais mesurer l'impact de faire ça toutes les deux secondes. Merci – JoshBerke

0

juste avoir du javascript sur le côté client et laissez-lui montrer quelques images animées GIF pendant 1-15 secondes (votre choix) et se fermer après l'heure désignée.

-1

Vous avez dit:

Lorsque son format PDF, je ne change pas la cible pour la forme et il reste sur la page en cours.

Si tel est le cas, la page d'origine sera supprimée lors de l'ouverture du PDF. Dans cette situation, j'aurais un gif animé et je l'ouvrirais en utilisant Javascript dans une balise div superposant le reste de la page. Vous n'avez pas besoin de le fermer, donc pas de minuterie ou d'interrogation nécessaire. Il serait juste parti quand la page est partie.

+0

En fait, la page ne change pas même s'ils l'ouvrent. Je m'attendais au comportement que vous avez décrit mais cela fonctionne dans IE6, 7 et Firefox et est actuellement en production. – JoshBerke

0

La suggestion de Gulzar était sur place. J'ai un simple service wcf ajax activé qui vérifie une variable de session. Ma page ashx met la variable à false quand elle commence le traitement, puis vrai quand c'est fait.

Je pense qu'il peut y avoir une condition de concurrence si le client vérifie avant de définir l'élément de session à false; Cependant, il existe des moyens de contourner cela si nous modifions le service pour définir l'élément de session sur false après qu'un client a reçu une réponse im done. Les astuces vont encore déterminer quel devrait être l'intervalle sur le client. Si nous l'avons mis à l'état bas, l'utilisateur pourrait enregistrer le fichier puis voir le message de traitement. Je me débats entre une demi-seconde et une seconde. Quelque chose moins d'une demi-seconde semble unnessecary.

Questions connexes