2009-12-31 5 views
1

Ma page ASP.Net est supposée créer un document et forcer son téléchargement (ouvrir une boîte de dialogue "Téléchargement de fichier"). Cela fonctionne très bien sur la plupart des navigateurs mais pour une raison quelconque, sur IE6 SP1 (Windows 2000), la boîte de dialogue "File Download" s'ouvre deux fois. Des idées pourquoi?Sur le téléchargement forcé: la boîte de dialogue Téléchargement de fichier s'ouvre deux fois dans IE6 SP1

Mon très simple code (C#):

protected void bnCreateDocument_Click(object sender, EventArgs e) 
{ 

    string documentText = GetDocumentText(); 


    Response.Clear(); 
    Response.Charset = ""; 
    Response.ContentType = "application/msword"; 

    string filename = "MyDoc.doc"; 
    Response.AddHeader("Content-Disposition", "attachment;filename=" + filename); 

    Response.Write(documentText); 
    Response.End(); 
    Response.Flush(); 
} 
+0

Avez-vous installé un navigateur dans le navigateur (IE6 SP1), qui peut attraper un tel lien pour vous donner un dialogue de "sauvegarde"? – shahkalpesh

+0

Bonne idée, mais non. Je l'ai essayé sur un système fraîchement installé et ça arrive encore ... – Zackie

Répondre

0

Votre code semble bien, mais il y a deux ou trois choses bizarres à ce sujet que je pensais que je voudrais signaler.

Si vous récupérez simplement un fichier du système de fichiers dans cette chaîne, pourquoi ne pas utiliser directement Response.WriteFile()?

En outre, Response.End() appelle automatiquement Flush() si la mise en mémoire tampon est activée, donc vous ne devriez pas appeler Flush() à la fin comme ça - au mieux, il devrait être avant l'appel à la fin. End() soulève également un ThreadAbortedException, donc si vous pouvez éviter de l'appeler tout à fait, ce serait idéal. Si vous pouvez utiliser HttpApplication.CompleteRequest(), c'est une meilleure approche.

Il y a quelques bogues très délicats et obscurs à traiter lors de l'arrêt de l'objet Response. Si après avoir traité les appels Flush et End, cela se produit toujours, j'examinerais ce qui se passe avec Fiddler, et peut-être essayerais de déplacer ce code dans un gestionnaire .ashx pour le sortir du cycle de vie de la page.

+0

Merci d'avoir répondu! La raison pour laquelle je n'utilise pas WriteFile est que je n'utilise pas un fichier du système de fichiers, mais que je crée le document à la volée. Voilà des informations très utiles sur Response.End(). Je vais essayer d'utiliser CompleteRequest et voir comment cela fonctionne. Merci! – Zackie

+0

Eh bien, j'ai essayé HttpApplication.CompleteRequest(), mais il agit toujours la même chose. Fiddler n'était d'aucune aide non plus, puisque rien ne semble se passer entre la première et la seconde boîte de dialogue Download File ... – Zackie

Questions connexes