2016-11-17 14 views
1

私は同期して動作するASPXフォームページを持っています(AJAXなし!)。このページ上のボタンのASP.NET:フォームのサブミットがダウンロードするファイルを返すときのJSコールバック

1つの応答ストリームに直接書き込むことによって、ダウンロードするファイルを返す:私はちょうど前に、応答が返されたときのページに呼び出されるjavascriptのコールバックを必要とする

Response.ContentType = "application/octet-stream"; 
Response.AppendHeader("Content-Disposition", "attachment; filename=logfile.txt"); 
Response.TransmitFile(Server.MapPath("~/wmtest.docx")); 
Response.End(); 

またはブラウザが「ファイルのダウンロード」ダイアログを表示した後に表示されます。

これを行う方法はありますか?

参考:注:URLにアクセスまたはダウンロードできる実際のphisicalファイルではなく、要求に応じて生成されて返されるファイルなので、ファイルのURLを返してからJSクライアント側のオプションはありません

ありがとうございます! - Michael

+0

をあなたは**使用してみましたClientScriptManager.Register StartupScript(Type、String、String、Boolean)** JavaScriptコードを呼び出すメソッド? – dbardelas

+0

ええええええええええええええええええええええええええええええええええええええええええうまくいかないでしょう。 Responseは、ダウンロードするバイナリファイルの内容を返します。元のHTMLには影響せず、スクリプトを返すことはできません... – Skatrix

答えて

1

あなたの応答がコンテンツタイプとしてストリームを返すので、同じ応答でhtml/javascriptを返すことはできません。

download.aspx(空 - なしのhtml)::私はJavaScriptを使用していること、ファイルのオープンをダウンロードするための専用download.aspxまたは類似を作成示唆

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="download.aspx.cs" Inherits="WebApplication2.download" %> 

download.aspx.cs(をPage_Loadを):

public partial class download : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     Response.ContentType = "application/octet-stream"; 
     Response.AppendHeader("Content-Disposition", "attachment; filename=logfile.txt"); 
     Response.TransmitFile(Server.MapPath("~/wmtest.docx")); 
     Response.End(); 
    } 
} 

そして、あなたのページからファイルのダウンロード:

<input type="button" class="js-download" value="Download file"/> 
    <script> 
     var button = document.getElementsByClassName("js-download")[0]; 
     button.addEventListener("click", function() { 
      window.open("download.aspx", "download"); 

      console.log("download starting....") 
     }); 
    </script> 
関連する問題