- PR -

ファイルのダウンロードダイアログを表示させる方法

投稿者投稿内容
snow
常連さん
会議室デビュー日: 2008/02/05
投稿数: 26
投稿日時: 2008-02-25 10:42
ボタンをクリックをした時のファイルのダウンロードダイアログを表示させることは下記の様にできました。
default.aspxに
<asp:Button ID="Button1"runat="server" OnClick="Button1_Click"Text="Button"/>
default.aspx.csに
public void Button1_Click(object sender, EventArgs e)
{
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition" , "attachment;filename=filename");
Response.WriteFile(filename);
Response.End();
}

しかしクライアント側のキー入力でダウンロードダイアログを表示させる方法がわかりません。
キー入力のイベントはJavaScriptで
document.onkeydown = keydown;
function keydown()
{
switch(event.keyCode)
{
case xxx:
}
}
で認識できるので、該当キーが押された時にXMLHttpRequestのopenでサーバー側に通知し、サーバー側ではButton1_Click()と同じ様にResponseで返しても、クライアントにはファイルのダウンロードダイアログは表示されませんでした。
予想として、Responseで返すヘッダー情報はポストバック時でなければダメな様な気がします。
そこで、キー入力があった時に、ポストバックさせる方法でdefault.aspx.csのButton1_Click()の様な関数を呼ぶ方法を探してみましたが、見つけられませんでした。
開発の環境はIE6.0 VS2005 C# javascriptで行っております。
よろしくお願いします。
くまっち
大ベテラン
会議室デビュー日: 2008/01/18
投稿数: 169
お住まい・勤務地: 茨城県のどこか。
投稿日時: 2008-02-25 11:00
XMLHttpRequestはバックグラウンドで送受信を行うものです。
レスポンスを受信時は、ご自身でレスポンスに対する処理を行わなければなりません。

で、キーダウン時にボタン押下を模するには。
コード:
document.getElementById('Button1').click();


でButton1のボタン押下を模する事が可能です。
snow
常連さん
会議室デビュー日: 2008/02/05
投稿数: 26
投稿日時: 2008-02-25 11:20
早速の回答ありがとうございます。
default.aspx.csにButton1のクリックイベントのハンドラーは
どの様に記述すればよいのでしょうか?
public void Button1_Click(object sender, EventArgs e)
{
}
でよろしいのでしょうか?
よろしくお願いします。
くまっち
大ベテラン
会議室デビュー日: 2008/01/18
投稿数: 169
お住まい・勤務地: 茨城県のどこか。
投稿日時: 2008-02-25 11:46
それで良いのではないでしょうか?

実際には、クライアント側からはButton1が押下されたときの様に
サーバーへHttpRequestが飛ぶと思います。

[ メッセージ編集済み 編集者: くまっち 編集日時 2008-02-25 11:49 ]
snow
常連さん
会議室デビュー日: 2008/02/05
投稿数: 26
投稿日時: 2008-02-25 11:46
キーダウンをボタンクリックに模することでできました。
ありがとうございました。

>>XMLHttpRequestはバックグラウンドで送受信を行うものです。
>>レスポンスを受信時は、ご自身でレスポンスに対する処理を行わなければなりません。

レスポンスに対する処理は、どの様に行えばよろしいでしょうか?
よろしくお願いいたします。
くまっち
大ベテラン
会議室デビュー日: 2008/01/18
投稿数: 169
お住まい・勤務地: 茨城県のどこか。
投稿日時: 2008-02-25 11:52
えっと・・・

ボタン押下時のファイルづアンロード>既に実装済み

キー押下時のファイルダウンロード>ボタン押下を模す事で解決済み

XmlHttpRequestは、キーダウン時のダウンロードとして試みた事であって
不要なものではないのですか?
snow
常連さん
会議室デビュー日: 2008/02/05
投稿数: 26
投稿日時: 2008-02-25 12:05
早速の回答ありがとうございます。
くまっちんのおっしゃる通り全て、くまっちさんのおかげで解決しました。
ほんとにありがとうございました。

実はこのButton1はdefault.aspx.csのPage_Load()で動的に作成しているボタンですので、JavaScriptでdocument.getElementById('Button1').click();
の様に記述はできない状態でした。
動的に作成するのを中止することで、解決しました。

それと、もう一つの解決方法にも興味がありまして、お聞きしたわけです。
もし、よろしければレスポンスに対する処理の方法も、お教えいただけないでしょうか。
よろしくお願いいたします
くまっち
大ベテラン
会議室デビュー日: 2008/01/18
投稿数: 169
お住まい・勤務地: 茨城県のどこか。
投稿日時: 2008-02-25 12:53
一般的な話としてXmlHttpRequestはバッググラウンドでサーバーと送受信する技術です。
その場合、レスポンスはご自身で処理する必要があると言う事です。

ただ、snowさんのファイルダウンロードに関して言えば・・・
window.open(XmlHttpRequestを送信するURI);とするだけで済むかと思います。

きっとsend()による送信を行ったので、「ファイルのダウンロードダイアログが表示されない」と
なったのではないでしょうか?

スキルアップ/キャリアアップ(JOB@IT)