3

ASP.Net を使用して、Word ドキュメントを Response にエクスポートしようとしています。したがって、このコードでこの目標を達成しました。

Response.Clear();
Response.ClearHeaders();
Response.ClearContent();
Response.ContentEncoding = Encoding.UTF8;
Response.Charset = "UTF-8";
Response.Buffer = true;

this.EnableViewState = false;
Response.ContentType = "application/msword";
Response.AddHeader("content-disposition", "attachment;filename=ExportedData" + Guid.NewGuid().ToString().Remove(5) + ".docx");

var wordData = this.RequestService.ExportToWord(this.RequestItem);

Response.BinaryWrite(wordData);
Response.Flush();

//Response.Clear();
//Response.End();
//Response.Close();
//RedirectToSamePage();
//Response.Flush();

しかし問題は、ユーザーがそのページをワード文書としてエクスポートすると、ページの他の機能が消えてしまうことです。同様に、別の ASP コントロールをクリックすることはできません。これは、Response オブジェクトを終了すると ASP コントロールと DLL との接続が切断されるためです。したがって、コメント付きのコードからわかるように、いくつかの Response オブジェクト関数を呼び出していますが、エクスポート操作後に他の ASP コントロールを機能させることができません。それで、どうすればそれを管理できますか?

前もって感謝します。

4

2 に答える 2

3

現在のページの応答オブジェクトを変更しているため、この動作が発生しています。ページ ポストバックのため、現在 Word バイナリ コンテンツである最新のページ コンテンツをレンダリングするために応答オブジェクトが使用されます。

以下のいずれかを行うことをお勧めします。

  • 新しいページを表示し、新しいページに上記のコードを実装して、Word 文書をプッシュします。
  • iframe を用意し (表示したくない場合があります)、ソースを Word コンテンツをプッシュするページに設定します。これにより、フローを妨げることなく現在のページにとどまることができます。
于 2011-05-08T13:48:20.640 に答える
0

2 番目のページを作成し、すべての単語のエクスポートを 2 番目のページに配置します。次に、元の aspx ページで、この新しいページに response.redirect を実行するか、window.location を実行すると、新しいページは単にドキュメントをストリーミングします。このようにして、ユーザーは元のページにとどまり、すべてが正常に動作します。

新しいページにリダイレクトする前にセッションを使用して、単語文書を生成するために必要なパラメーターを取得することをお勧めします。ただし、クエリ文字列も同様に機能します。

于 2011-05-08T13:44:26.947 に答える