2016-12-02 15 views
1

私は現在のプロジェクトで次の問題を解決しようとしています。Asp.net Response.end

既存

サーバー側のクリックイベントがありaspxページ上のボタンがあります。このイベントでは、選択したグリッドビューの行に基づいて処理を行い、選択したレコードに基づいてブラウザにファイルダウンロードダイアログを表示します。すべてのレコードは、我々は、処理中にいくつかの選択レコードのエラーがあります」というプロンプトユーザーが欲しいし、処理中に失敗している場合は

を変更する

機能。あなたは、ファイルのダウンロードを続行しますか?」私はこの問題

を解決しようとした

アプローチは、私はいくつかのためにエラーがあることをユーザに通知するためにjqueryのダイアログを表示するには、サーバー側button_clickイベントからjqueryの機能をトリガー処理中に選択されたレコード。

ClientScript.RegisterStartupScript(GetType(), "Popup", "ShowPopup();", true);

私は、次のコードを実行するのAjaxを使用してWebメソッドを呼び出します。

response.Clear(); 
response.ContentType = "Application/Octet-Stream"; 
response.AddHeader("Content-Disposition", 
string.Format("Attachment; FileName={0}", Path.GetFileName(filePath))); 
response.WriteFile(filePath); 
response.End(); 

結果

私がポップアップし、ウェブメソッドも細かい実行されているが、私は見ていないですですブラウザのファイルダウンロードダイアログボックス。このシナリオではresponse.endが動作しないことは疑いがあります。

答えて

0

AJAX経由でファイルをダウンロードすることはできません。それはリンククリックを介してフォーム提出またはGET要求でなければなりません。 Response.Endはうまく動作します:ではなく、はASP.NETでバグを見つけます。

0

あなたはAPIエンドポイントによって返されたファイルを使用して、このような何かを行うことができますジャバスクリプトを経由してファイルをダウンロードしたい場合は、このコードは、角の呼び出しを使用しているが、それは同様にそれなしで行うことができます。

// Make an api call with the responseType of blob and do this with the result 
    const blob = new Blob([result], { type: result.type }); 

    if ($window.navigator.msSaveOrOpenBlob) { 
     $window.navigator.msSaveOrOpenBlob(blob, fileName); 
    } else { 
     const fileURL = URL.createObjectURL(blob); 
     const downloadLink = angular.element('<a></a>');// create a new <a> tag element 
     downloadLink.attr('href', fileURL); 
     downloadLink.attr('download', fileName); 
     downloadLink.attr('target', '_self'); 
     downloadLink[0].click();// call click function 
     URL.revokeObjectURL(fileURL);// revoke the object from URL 
    } 
関連する問題