2009-05-16 4 views
5

私はASP.NET2.0を使用しています。いくつかの入力フィールドとダウンロードボタンを使ってダウンロードフォームを作成しました。ダウンロードボタンをクリックすると、「ダウンロードありがとうございました...」ページにリダイレクトして、すぐに保存するファイルを提供したいと思います。"ありがとう"ページにリダイレクトし、すぐにダウンロードしたファイルの保存ダイアログを提供する

public partial class ThankYouPage : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     Response.Clear(); 
     Response.AddHeader("Content-Disposition", 
          "attachment; filename=\"downloadedFile.zip\""); 
     Response.ContentType = "application/x-zip-compressed"; 
     Response.BinaryWrite(this.downloadedFileByteArray); 
     Response.Flush(); 
     Response.End(); 
    } 
} 

明らかに、このコードは任意の「ありがとう」のメッセージを表示することはできません:

私はセーブファイルダイアログを表示するには、この次のコードを持っています。 「AfterRender」イベントなど、このダウンロードコードを移動してページに「ありがとうございました」というメッセージを表示するチャンスをユーザーに与えることができるページのようなものがありますか?結局のところ、私は本当に彼らに感謝しているので、私はそれを表現したいと思います。

答えて

6

あなたはこの場合のIFrame

<iframe src="DownloadFile.aspx" style="display:none;" /> 

を使用して、お礼のページからダウンロードページを参照することができ、DownloadFile.aspxはあなたの例から背後にあるコードを持っているでしょう。

1

はあなたのお礼のページの先頭にMETA REFRESHタグを使用します。

<META http-equiv="refresh" content="1;URL=http://site.com/path/to/downloadedFile.zip"> 

また、あなたがダウンロードURLで現在の位置を交換するために身体のonLoad関数を使用する場合があります。

<body onLoad="document.location='http://site.com/path/to/downloadedFile.zip'"> 

この場合リダイレクションは、現在のページの読み込みが完了した後、クライアントはJavaScriptが有効になっている場合にのみ、そのダウンロードリンクとのリンクを含めることを忘れないでください開始します(「ダウンロードがない場合数秒で起動する...など)。

また、Philが提案したようにIFRAMEを使用することもできますし、FRAMEまたは完全なポップアップ(ブロック可能な、気にしています)を使用することもできます。あなたのマイレージは異なる場合があります。

1

あなたが書いたコードは、実際に「ありがとう」ページからリダイレクトされるべきです(2回目のリダイレクトになります)。コンテンツの配置を添付ファイルに設定したため、このページは既存の「ありがとう」ページを実際に置き換えることはありません。

1

「ありがとうございました」ページとクライアントがサーバーの2倍を呼び出す必要があるファイルを提供する場合は、 メッセージを表示するためのthankyou.aspxページを作成できます(ファイルに直接ダウンロードするリンクを置くこともできます)。 メタタグを使用してダウンロードを開始することも、jsだけを使用してダウンロードすることもできます(ダウンロードページでも同じことを行うことができます)。

次に、ファイルを提供するために、サーバー上で別のページが実行されないように直接リンクを作成する必要があります。それ以外の場合は、filesysを隠すためにHttpHandlerを作成する必要があります。

ファイルがResponse.TrasmitFile

関連する問題