2009-01-07 10 views
2

Le code suivant ne fonctionnera pas correctement dans IE7 avec les derniers Service Packs installés.Le dialogue de téléchargement de fichiers IE7 disparaît

System.Web.HttpResponse response = System.Web.HttpContext.Current.Response; 
response.Clear(); 
response.AddHeader("Content-Disposition", "attachment;filename=Contacts.xls"); 
response.ContentType = "application/octet-stream"; 

System.Text.UnicodeEncoding Encoding = new System.Text.UnicodeEncoding(); 

byte[] unicodeBytes = {255,254}; 
int length = 2 + Encoding.GetByteCount(_exportContent); // _exportContent is string. 
response.AddHeader("Content-Length", length.ToString()); 
response.OutputStream.Write(unicodeBytes, 0, 2); 
unicodeBytes = Encoding.GetBytes(_exportContent); 
response.OutputStream.Write(unicodeBytes, 2, unicodeBytes.Length); 
response.End(); 

J'ouvre la page ASPX avec js (window.open()) et exécuter le code ci-dessus dans le Page_Load(). La chose étrange est que la fenêtre s'ouvre, tente de charger/afficher la boîte de dialogue de fichier et ensuite vous entendez le son comme une fenêtre popup a été bloquée (bien que le bloqueur de popups soit désactivé!).

Informations supplémentaires:
- Le comportement se produit aussi bien sur XP et W2k3 (ce qui est un vrai serveur web sans rien d'autre installé, mais IE7 & FW 3.5 SP1 & derniers Service Packs.) - Le même code fonctionne très bien avec FW 2.0 - Firefox n'a aucun problème pour afficher une boîte de dialogue de fichier.

Je serais curieux de savoir si quelqu'un d'autre a rencontré le même problème et pourrait fournir une solution pour faire fonctionner la chose dans IE7.

Cheers,
Dimi

Répondre

2

Ajouter un en-tête indiquant IE explicitement à mettre en cache le fichier. IE a connu des bogues avec ne pas être en mesure d'enregistrer correctement un fichier s'il est envoyé en tant que fichier sans cache.

+0

Problème résolu en ajustant les paramètres dans l'IE pour gérer les fenêtres contextuelles d'un hôte spécifique. Merci pour l'entrée de toute façon –

0

Je n'arrive toujours pas à faire disparaître la boîte de dialogue. Cela se produit lorsque l'application accède à un [webmethod] pour recueillir des informations à transmettre à la page qui essaie de télécharger les résultats pour exceller.

  Response.Clear(); 

      Response.ClearHeaders(); 
      Response.ClearContent(); 

      Response.Charset = ""; 
      Response.ContentType = "application/vnd.ms-excel"; 
      Response.AddHeader("Content-Disposition", "attachment; filename=\"" + fileNameToUse + "\""); 
      Response.CacheControl = "Public"; 

      Response.Write(output); 
      Response.Flush(); 
      Response.Close(); 

Cela semble aussi que se produire lors de l'accès au web sit utilisant une adresse IP (999.11.1.111 \ default.aspx ....). Il fonctionne lorsque vous y accédez via loacalhost \ default.aspx

0

Pour tester si la sécurité est à l'origine de ce problème, définissez la cible sur _self. La barre d'avertissement sur IE devrait apparaître. Si cela est la cause, vérifiez la sécurité IE. Plus précisément, l'invite de téléchargement partie.

2

J'ai eu le même problème, et j'ai passé une heure à être complètement frustré. Comme d'habitude, les navigateurs IE de Microsoft sont la racine de tous les maux de tête. Tout a bien fonctionné dans d'autres navigateurs. La solution est simple: L'utilisateur devra ajuster un paramètre IE7 en allant à 'Outils'> 'Options Internet'> onglet 'Sécurité'> Pour 'Internet' et/ou 'Intranet local' ajuster les paramètres de sécurité en cliquant sur le bouton « Personnaliser le niveau ... »

Aller à la « Téléchargements » noeud « > Demander confirmation pour les téléchargements de fichiers »> cochez la case « Activer »

qui a été fixé pour mes utilisateurs.

Espérons que ça aide.

1

J'ai eu ce problème sur notre intranet, l'invite automatique pour les téléchargements n'a pas fonctionné pour moi (était déjà sélectionné) mais cela a fait ...

Outils -> Options Internet

sur l'onglet Sécurité, sélectionnez 'Intranet local' puis cliquez sur Sites

Cliquez sur Avancé

type « http://your.url.com » et cliquez sur Ajouter

Cliquez sur Fermer -> Ok -> Ok

espère que cela fonctionne pour vous aussi;)

Questions connexes