- - PR -
ファイルのダウンロードダイアログを表示させる方法
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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-02-25 11:00
XMLHttpRequestはバックグラウンドで送受信を行うものです。
レスポンスを受信時は、ご自身でレスポンスに対する処理を行わなければなりません。 で、キーダウン時にボタン押下を模するには。
でButton1のボタン押下を模する事が可能です。 | ||||
|
投稿日時: 2008-02-25 11:20
早速の回答ありがとうございます。
default.aspx.csにButton1のクリックイベントのハンドラーは どの様に記述すればよいのでしょうか? public void Button1_Click(object sender, EventArgs e) { } でよろしいのでしょうか? よろしくお願いします。 | ||||
|
投稿日時: 2008-02-25 11:46
それで良いのではないでしょうか?
実際には、クライアント側からはButton1が押下されたときの様に サーバーへHttpRequestが飛ぶと思います。 [ メッセージ編集済み 編集者: くまっち 編集日時 2008-02-25 11:49 ] | ||||
|
投稿日時: 2008-02-25 11:46
キーダウンをボタンクリックに模することでできました。
ありがとうございました。 >>XMLHttpRequestはバックグラウンドで送受信を行うものです。 >>レスポンスを受信時は、ご自身でレスポンスに対する処理を行わなければなりません。 レスポンスに対する処理は、どの様に行えばよろしいでしょうか? よろしくお願いいたします。 | ||||
|
投稿日時: 2008-02-25 11:52
えっと・・・
ボタン押下時のファイルづアンロード>既に実装済み キー押下時のファイルダウンロード>ボタン押下を模す事で解決済み XmlHttpRequestは、キーダウン時のダウンロードとして試みた事であって 不要なものではないのですか? | ||||
|
投稿日時: 2008-02-25 12:05
早速の回答ありがとうございます。
くまっちんのおっしゃる通り全て、くまっちさんのおかげで解決しました。 ほんとにありがとうございました。 実はこのButton1はdefault.aspx.csのPage_Load()で動的に作成しているボタンですので、JavaScriptでdocument.getElementById('Button1').click(); の様に記述はできない状態でした。 動的に作成するのを中止することで、解決しました。 それと、もう一つの解決方法にも興味がありまして、お聞きしたわけです。 もし、よろしければレスポンスに対する処理の方法も、お教えいただけないでしょうか。 よろしくお願いいたします | ||||
|
投稿日時: 2008-02-25 12:53
一般的な話としてXmlHttpRequestはバッググラウンドでサーバーと送受信する技術です。
その場合、レスポンスはご自身で処理する必要があると言う事です。 ただ、snowさんのファイルダウンロードに関して言えば・・・ window.open(XmlHttpRequestを送信するURI);とするだけで済むかと思います。 きっとsend()による送信を行ったので、「ファイルのダウンロードダイアログが表示されない」と なったのではないでしょうか? |