2010-07-31 5 views
2

Le système de rapport a la liste des rapports disponibles sur une page Web. Lorsque l'utilisateur clique sur une nouvelle fenêtre de rapport, le serveur commence à préparer le rapport (document winword) et le renvoie après 2 à 10 secondes.Puis-je renvoyer plusieurs types de contenu par requête HTTP?

code dans le gestionnaire se présente comme suit:

context.Response.AddHeader("Content-Disposition", 
    "attachment;filename=report.doc"); 
context.Response.BinaryWrite(reportDocument); 

Je veux montrer « s'il vous plaît attendre » dans cette nouvelle fenêtre. Est-il possible de préparer le contenu html immédiatement ("veuillez patienter") renvoyez-le, puis continuez avec la préparation du rapport qui prend du temps et qui ne ferme pas la connexion?

Que suggérez-vous s'il n'est pas possible de renvoyer plusieurs types de contenu par requête HTTP?

Merci d'avance!

Répondre

2

Une réponse HttpResponse ne peut avoir qu'un seul type MIME. Vous pouvez faire apparaître une autre fenêtre qui à son tour peut appeler le serveur qui répondra avec le document de rapport winword.

+0

On dirait qu'on peut (théoriquement): http://bytes.com/topic/asp-net/answers/489209-transmit-file-html-response –

1

Vous pouvez créer une page de chargement HTML avec une redirection vers le contenu binaire.

La redirection peut être fait en utilisant des méta redirigent

<meta http-equiv="refresh" content="0;url=http://example.com/" /> 

Plus d'infos sur wikipedia

+0

Cool! Mais il a dit que c'est une technique obsolète. Est-ce fiable? –

+0

Je l'ai utilisé de cette façon et javascript comme:

+0

Il est dommage, mais la balise meta ainsi que javascript approche ouvre une nouvelle fenêtre du navigateur lorsque le fichier télécharger le rapport (voulez-vous ouvrir dans Microsoft Word? Oui/non). Quoi que je choisisse, l'ancienne fenêtre "veuillez patienter" reste à l'écran et je n'ai pas pu déterminer le moment où le document est téléchargé pour le fermer –

1

Vous ne pouvez pas envoyer 2 types de contenu par réponse. Ce que vous pouvez faire est de rendre une page "Please wait" qui contient une requête (comme une iframe) au contenu binaire.

+0

On dirait que nous pouvons: http://bytes.com/topic/asp-net/answers/489209-transmit-file-html-response –

+0

@Andrew Florko, le lien ressemble à un possibilité pour Http en général, pas sûr si ça va marcher sur asp.net, mais ça a l'air intéressant. Si vous parvenez à trouver un moyen, j'aimerais voir un exemple. – SirDemon

+0

Le problème avec iframes - Je ne peux pas déterminer le document de rapport de temps est chargé dans iframe. IFrames ouvre une nouvelle fenêtre pour winword et la précédente n'est pas fermée. –

Questions connexes