2005.01.14

CSVダウンロードにおける罠

ASP.NET開発でsubmit時の処理でサーバー上にCSVファイルを作成しそれを
ダウンロードするといったよくある処理を作成した時にちょっとした問題
に出合ったので書いておきます。

ダウンロードは以下のコードを記述して行っています。

Me.Response.Expires = 0
Me.Response.ContentType = "application/download"
Me.Response.AppendHeader("Content-Disposition", "inline; filename=" & HttpUtility.UrlEncode(sFileName))
Me.Response.AppendHeader("Pragma", "No-Cache")
Me.Response.WriteFile(sCSVPath & intUserID.ToString & KAKUCHOSHI)
Me.Response.Flush()
Me.Response.Close()


この場合だと、クライアント側のブラウザでの処理はファイルをダウンロードするための
ダイアログを開くことです。そのため、submitを行った画面はsubmitしたはいいが、
この画面に対する情報というのは来ないので、画面が再表示(この画面についての処理)が
行われることがありません。この事を知らず、サーバー上の処理に画面を初期化するという
コードを記述しているにもかかわらず、画面が初期化されないなとちょっとした問題に
あたってしまいました。
でも、よくよく考えてみると当然の動きであるなと感じました。
これを期にもうすこし、WEBの動きを勉強しなければならないなと感じました。

トラックバック

このエントリーのトラックバックURL:
http://www.ilovex.co.jp/scripts/intra/mt/mt-tb.cgi/396

コメント (1)

市川:

内容とは全く別次元の話になりますが、
サーバーからの通信の最後として
 Response.Close()
を使うのは、明らかな(重大な)誤りです。

一般的には
 Response.End()
をお使いくださいまし。

コメントを投稿

photo
saito