2012-03-27 7 views
9

私のアプリケーションでWord文書を開きたい場合は、レスポンスを使用しています。ユーザーがファイルを保存することを選択した場合、ファイルを保存し、ファイルを開いたときの状態をファイルに表示します。ユーザーがすぐにファイルを開くことを選択した場合、IEがファイルを開くことができないというエラーが表示されます。 「再試行」を選択すると、ファイルが見つからないというエラーがMS Wordに表示されます。以下は私の状況を示すスクリーンショットです。ここでIE9で '開く'を選択すると、Asp.Netダウンロードファイルのエラーが発生する

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

ダウンロードのユーザー促す画面されています:また、ここで私は、ファイルを表示しなければならないコードがある。ここ enter image description here

は、ユーザー後の画面が選択されて「開く」 enter image description here

ユーザーが「再試行」を選択した後の画面です。この画面はMS Word用です。

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

どのバージョンのWordが使用されていますか? – Mike

+0

Microsoft Word 2007 –

+0

Styles/Site.cssはサイトのCSSですか?もしそうなら、クライアント側でResponse HeaderとContentをチェックして、EndRequest中にレスポンスに何も追加されていないかどうか確認しましたか? – jbl

答えて

1

は、あなたがサンプルを投稿することができます: enter image description here

**** EDITの**** は、私がテストを試してみましたが、私はこの関数を呼び出すときに問題がまだoccuresコードオンラインのビットを発見しましたデータが使用されていますか? 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", "12"); 
this.Context.Response.AddHeader("Content-Disposition", "attachment; filename=" + "Test Document.doc"); 
this.Context.Response.BinaryWrite(new byte[] { }); 
this.Context.ApplicationInstance.CompleteRequest(); 

最新のコードも正常に動作しています。私はIE9を使用しています。下記のバージョンの詳細は...コンテンツ・処分のファイル名パラメータで

enter image description here

+0

サンプルデータはかなり大きいです。それはxmlとして保存された別の単語の文書です。 –

+0

小さなデータでテストできますか?問題が解決しない場合は、plsがデータを共有します。 – Pankaj

+0

MS Word 2007を開いてテストしました。空のドキュメントを.xmlとして保存します。次に、そのファイルを読み込んでxmlを文字列に格納します。その文字列をバイナリに変換します:Byte [] bytes = Encoding.Default.GetBytes(xml);次に、そのバイト配列を送信してレスポンスに書き込みます。それでも問題は発生します。 –

1

スペースが別のブラウザのバージョン間でエラーを引き起こすことが知られています。ファイル名を二重引用符で囲みます。

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

チップをありがとうが、これは私の問題を解決しませんでした。 –

関連する問題