2012-03-27 11 views
9

Używam odpowiedzi, aby moja aplikacja otworzyła dokument programu Word dla użytkownika. Jeśli użytkownik zdecyduje się zapisać plik, zapisuje go, a plik wygląda, jak powinien, kiedy go otworzysz. Jeśli użytkownik zdecyduje się otworzyć plik natychmiast, otrzyma komunikat o błędzie, że program IE nie może otworzyć pliku. Jeśli wybierze opcję "Ponów próbę", MS Word wyświetli komunikat o błędzie informujący, że nie może znaleźć pliku. Poniżej znajdują się zrzuty ekranu pokazujące moją sytuację. Również tutaj jest kod mam, aby wyświetlić plik:Błąd pliku pobierania Asp.Net przy wyborze "Otwórz" w 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(); 

Oto ekran podczas monitowania użytkownika o pobranie: enter image description here

Oto ekran po użytkownik wybierze „Open” enter image description here

Oto ekran po wybraniu przez użytkownika "Ponów próbę". Ten ekran nadchodzi dla MS Word. enter image description here

**** EDIT **** znalazłem kawałek kodu online, które próbowałem testowanie i problem nadal occures gdy zgłoszę tę funkcję:

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

Jaka wersja słowa jest używana? – Mike

+0

Microsoft Word 2007 –

+0

Czy styl/Site.css jest css witryny? Jeśli tak, czy po stronie klienta sprawdziłeś nagłówek odpowiedzi i treść, aby sprawdzić, czy nic nie jest dołączone do odpowiedzi podczas EndRequest? – jbl

Odpowiedz

1

można zaksięgować próbkę używane dane? Spróbowałem poniżej kodu w IE9 działa dobrze.

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(); 

Twój najnowszy kod również działa poprawnie. Używam IE9. Poniżej znajdują się szczegóły wersja ...

enter image description here

+0

Przykładowe dane są dość duże. Jest to kolejny dokument, który został zapisany jako xml. –

+0

Można go przetestować za pomocą małych danych, a jeśli problem nadal występuje, pls udostępnić dane. – Pankaj

+0

Testowałem go, otwierając MS Word 2007. Zapisz pusty dokument jako .xml. Potem czytam w tym pliku i przechowuję xml w ciągu znaków.Weź ten ciąg, zamień go na binarny: Byte [] bytes = Encoding.Default.GetBytes (xml); Następnie wysyłam tę tablicę bajtów, aby napisać odpowiedź. Problem ten nadal występuje. –

1

przeznaczone w parametrze Nazwa pliku Content-Disposition były znane powodować błędy w różnych wersjach przeglądarek. Spróbuj wpisać nazwę pliku w podwójny cudzysłów:

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

Dzięki za podpowiedź, ale to nie rozwiązało mojego problemu. –

Powiązane problemy