2012-03-27 3 views
9

Ich verwende Response, um meine Anwendung ein Word-Dokument für den Benutzer zu öffnen. Wenn der Benutzer die Datei speichern möchte, wird sie gespeichert und die Datei sieht so aus, wie sie beim Öffnen aussehen sollte. Wenn der Benutzer die Datei sofort öffnet, wird ein Fehler angezeigt, der besagt, dass der IE die Datei nicht öffnen konnte. Wenn sie "Wiederholen" wählen, zeigt MS Word einen Fehler an, der besagt, dass die Datei nicht gefunden werden kann. Unten sind Screenshots, die meine Situation zeigen. Auch hier ist der Code, den ich habe, um die Datei anzuzeigen:Asp.Net Download-Datei Fehler bei der Wahl "Öffnen" in IE9

 this.Context.Response.Clear(); 
     this.Context.Response.ClearContent(); 
     this.Context.Response.ClearHeaders(); 
     this.Context.Response.BufferOutput = true; 
     this.Context.Response.ContentType = "application/msword"; 
     this.Context.Response.AppendHeader("Content-Length", bytes.Length.ToString()); 
     this.Context.Response.AddHeader("Content-Disposition", "attachment; filename=" + "Test Document.doc"); 
     this.Context.Response.BinaryWrite(bytes); 
     this.Context.ApplicationInstance.CompleteRequest(); 

Hier wird der Bildschirm, wenn der Benutzer des Download-Aufforderung: enter image description here

Hier wird der Bildschirm nach Benutzer wählt ‚Öffnen‘ enter image description here

Hier ist der Bildschirm, nachdem der Benutzer 'Wiederholen' gewählt hat. Dieser Bildschirm kommt für MS Word. enter image description here

**** EDIT **** Ich habe ein Stück Code online gefunden, dass ich versucht Prüfung und Ausgabe noch occures, wenn ich diese Funktion aufrufen:

protected void GenerateMsWordDoc() 
    { 
     string strBody = "<html>" + 
      "<body>" + 
       "<div>Your name is: <b>Billy Bob</b></div>" + 
       "<table width='100%' style='background-color:#cfcfcf;'><tr><td>1st Cell body data</td><td>2nd cell body data</td></tr></table>" + 
       "Ms Word document generated successfully." + 
      "</body>" + 
      "</html>"; 
     string fileName = "MsWordSample.doc"; 
     // You can add whatever you want to add as the HTML and it will be generated as Ms Word docs 
     Response.AppendHeader("Content-Type", "application/msword"); 
     Response.AppendHeader ("Content-disposition", "attachment; filename="+ fileName); 
     Response.Write(strBody); 
    } 
+0

Welche Version von Word wird verwendet? – Mike

+0

Microsoft Word 2007 –

+0

Ist Styles/Site.css ein CSS Ihrer Site? Wenn ja, haben Sie auf der Client-Seite den Antwort-Header und Inhalt überprüft, um zu sehen, ob während der EndRequest-Anfrage nichts an die Antwort angehängt wird? – jbl

Antwort

1

Können Sie die Probe abgeben Daten werden verwendet? Ich versuchte unten Code in IE9 funktioniert gut.

this.Context.Response.Clear(); 
this.Context.Response.ClearContent(); 
this.Context.Response.ClearHeaders(); 
this.Context.Response.BufferOutput = true; 
this.Context.Response.ContentType = "application/msword"; 
this.Context.Response.AppendHeader("Content-Length", "12"); 
this.Context.Response.AddHeader("Content-Disposition", "attachment; filename=" + "Test Document.doc"); 
this.Context.Response.BinaryWrite(new byte[] { }); 
this.Context.ApplicationInstance.CompleteRequest(); 

Ihr bisheriger Code funktioniert auch gut. Ich verwende IE9. Im Folgenden finden Sie Versionsdetails ...

enter image description here

+0

Die Beispieldaten sind ziemlich groß. Es ist ein anderes Word-Dokument, das als XML gespeichert wurde. –

+0

Können Sie es mit kleinen Daten testen und falls das Problem weiterhin besteht, teilen Sie bitte die Daten. – Pankaj

+0

Ich habe es getestet, indem ich MS Word 2007 geöffnet habe. Speichere ein leeres Dokument als .xml. Dann lese ich diese Datei ein und speichere die XML in einer Zeichenkette.Nimm den String, mach ihn zu einem Binärcode, indem du Folgendes tust: Byte [] Bytes = Encoding.Default.GetBytes (xml); Dann sende ich dieses Byte-Array, um in die Antwort zu schreiben. Das Problem tritt weiterhin auf. –

1

Leerzeichen im Dateinamen Parameter von Content-Disposition bekannt wurden Fehler in den verschiedenen Browser-Versionen verursachen. Versuchen Sie, den Dateinamen in Anführungszeichen zu setzen:

this.Context.Response.AddHeader("Content-Disposition", "attachment; filename=\"" + "Test Document.doc" + "\""); 
+0

Danke für den Tipp, aber das hat mein Problem nicht gelöst. –