• ベストアンサー

ASPからファイルダウンロード

Win2k+IISでASPプログラムを組んでいます。 A.aspのページでボタンを押すとA.aspないのDownLoad関数実行してファイルをダウンロードするプログラムです。 一回目はうまくダウンロードできますが,それが終わった後A.asp内のボタンを押してもダウンロードが出来ません。 これはなぜでしょうか。 (1)怪しいと思うところはA.aspページで全て処理しているからかな~と思います。 A.asp function download() Response.AddHeader "Content- Disposition","attachment;filename=aa.csv" Response.ContentType = "application/octet-stream" Response.Write( "AAAAaaa" & "," ) Response.Write( "BBBaaa" & "," ) Response.End() End function

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

> 怪しいと思うところはA.aspページで全て処理しているからかな~と思います。 たぶん正解です^^; JavaScriptを組み込んでいることはないですよね? テストしたわけではないんですが、おそらく下から2行目の Response.End() が影響しているのかと。 Response.Endはファイル出力終了の意味で、ここでは使用していますが ASP自体の出力の終了も意味しますよね。 ファイル出力のFunctionに入る前に、ボタン等を表示しないと 表示されているボタンが前の画面のもので、無効になっているのかなぁと。 (画面表示の後、同一asp内でファイル出力できたかどうか、は自信なしです。) 私が作成したダウンロードのプログラムは、2つのaspで作成しました。 a.aspでボタンをクリックすると、b.aspでファイル出力~ 私の場合はファイル出力後、a.aspの画面はそのまま使えましたけど。

jaekuk
質問者

お礼

試してみましたが、だめでした。 >私が作成したダウンロードのプログラムは、2つのaspで>作成しました。 >a.aspでボタンをクリックすると、b.aspでファイル出力~ >私の場合はファイル出力後、a.aspの画面はそのまま使えましたけど。 このときb.aspは新しいWindowを開いてダウンロードしましたか。そうでしたら、この新しいWindowを自動的に閉じたくなりますか。。。。。

jaekuk
質問者

補足

なるほど、一回目をダウンロードしたあと、2回目ダウンロードしようとボタンを押しても効かないのは画面上に存在しても、IEのメモリ上では(詳しく分かりませんが)開放(?)されてる感じでしょうか。 一応、画面表示をしたあと最後にダウンロードすることを試みてみます。

その他の回答 (2)

回答No.3

全然関係なかったらごめんなさい。 マイクロソフトの技術情報418126はどうでしょうか? ・IE5.5以上を使用している。 ・フレームを構成している。 ・Content- Disposition attachmentを使用している。 ・ダウンロード後target=を指定したリンクをクリックする。 以上の条件に全て当てはまると動かなくなるというものです。

jaekuk
質問者

お礼

ご回答有難うございます。 色々参考になりました。

回答No.2

> このときb.aspは新しいWindowを開いてダウンロードしましたか。 > そうでしたら、この新しいWindowを自動的に閉じたくなりますか。。。。。 質問ですか?jaekukさんがテストした結果ですか? 私のソースでは、b.aspに処理が遷移しても新しいウィンドウは開きません。 ダウンロードするためのダイアログボックスは表示されます。 保存ボタンを押せば、元の画面に戻ります。 そして元の画面(a.asp)も使える、と。 もし、jaekukさんがテストした結果、新しいウィンドウが表示されたのでしたら それは、a.aspのHTMLかJavaScriptで新しいウィンドウを開くように設定しているのが問題です。 わからないことがあれば、また質問して下さい。

jaekuk
質問者

補足

新しいウィンドウを開かないと、だめだったのでひらいたんですが、何とか解決しました. 問題だったのは、JavaScriptでFormデータを参照するところでした。2つフレーム構造になっていましたが、どうやら二回目のダウンロードボタンをおすと、Formデータにアクセスできなくなったのが問題でした. document.formNameA.txtName.value = "Down" を parent.frameNameA.formNameA.txtName.Value = "Down" にしたらちゃんと動くようになりました。 (多分ダウンロードした後は、現在のDocumentオブジェクトが変わるんじゃないか思います。) 色々ご親切な回答有難うございました。

関連するQ&A