0

ホーム/メインメニューページがあります。フォームへのリンクがあります。入力を使用してフォームを実行すると、Excel 出力が得られます。「開く」をクリックしてその出力をブラウザで開くと、戻るボタンでホーム/メイン メニューに移動します。

フォーム ページが X.aspx の場合、Excel を出力する binaryWrite は実際にはそれを変更しないため、これは理解できます。

問題は、ポストバックがある場合、[戻る] ボタンをクリックするとフォーム ページに移動することです。これは矛盾しています。ページを実行するか、ドロップダウンによってポストバックが発生した場合、Excel シートを再度実行できるように、戻るボタンでフォーム フィールドに移動する必要があります。

私が試したこと。

ロケーションヘッダーを追加してみました。

e.ContentFileName = "ELTFile.Output.xls";

応答の前に。書き込み中 ...

private void SendFileToBrowser(DownloadFileEventArgs e)
{
    if (!e.Cancel && e.FileObject != null)
    {
        this.Page.Response.Clear();
        this.Page.Response.ClearContent();
        this.Page.Response.AddHeader("Content-Disposition", string.Format("inline; filename={0}", e.ContentFileName));
        this.Page.Response.AddHeader("Content-Length", e.FileObject.LongLength.ToString());
        this.Page.Response.AddHeader("Location", e.ContentFileName);
        this.Page.Response.ContentType = e.ContentType;
        this.Page.Response.BinaryWrite(e.FileObject);
        this.Page.Response.End();
    }
}

そして、私は試しました

Response.Cache.SetCacheability(HttpCacheability.Public);

としても

Response.Cache.SetCacheability(HttpCacheability.Server);

しかし、基本的には、[送信] ボタンをクリックして Excel を生成する前に投稿するかどうかに応じて、メイン メニュー (望まない) またはフォーム ページ (望む) を取得します。毎回フォームページが欲しい。基本的には、ブラウザに「実際には別のページではないことはわかっていますが、そのように扱っていただけますか?」と伝えたいのです。

4

1 に答える 1

1

ブラウザの履歴にページを直接追加することはできません。

フォームが常にExcel出力の1ページ前になるようにアプリケーションを作成できます。

これを行うには、Excelを出力するための別のページを用意します。Excelを生成するための入力がある場合はResponse.Redirect、生成ページに移動します。これにより、入力フォームがブラウザの履歴に保持されます。

注:必要に応じて同じページにリダイレクトすることもできますが、それを追跡する必要があります。

于 2012-08-24T13:21:27.223 に答える