3


0

ドキュメントのエクスポート後に応答が閉じます

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コントロールを管理することはできません。 それで、どうすればそれを管理できますか?

前もって感謝します。

2 Answer


3


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

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

  • 新しいページを表示し、新しいページに上記のコードを実装して Word文書をプッシュする

  • iframeを用意し(表示したくない場合があります)、ソースを Wordコンテンツをプッシュするページ。 これにより、フローを妨げることなく現在のページに留まることができます。


0


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

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