2017-03-22 7 views
1

ファイルをユーザーに返そうとしています。ファイルをユーザーに返すにはどうすればよいですか?

"GetExcel"は動作するように見え、デバッグでは "ba"にデータがあることがわかります。

このメソッドは完了しますが、ブラウザに何も返されないようです。ファイルのダウンロードダイアログが表示されます。

C# 

     public FileResult GetExcel() 
     {   
      using (ExcelPackage pck = new ExcelPackage()) 
      { 
       ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Demo"); 

       ws.Cells["A1"].Value = "LBHERE"; 

       var ba = pck.GetAsByteArray(); 
       return File(ba, "text/plain", "testFile.txt"); 
      } 

     } 

Javascript 

     function clickedTest() { 
      alert("Test clicked"); 
      $.get(myPath + "/Employee/GetExcel", { }, function (data) { 
      }) 

     }; 
+1

代わりに 'location.href = myPath +"/Employee/GetExcel "を使用するか、XHR2を使用してファイルをダウンロードしてください。通常の 'jQuery.get'メソッドは、ファイルのダウンロードには適していません。 – haim770

+0

あなたが答えとして追加するなら、私はそれにチェックを入れます... – ManInMoon

答えて

0

jQueryの$.get()機能はAJAXを使用してクライアント側のスクリプトにWebページからデータを取得します。これは、ファイルをダウンロードしたい場合に行うことではありません。代わりに、ダウンロードするファイルのURLに新しいタブを設定する必要があります。お使いのブラウザは、まだダウンロードが開始されるのではなく、単にファイルを表示している場合、あなたはさらに一歩行くことがあり

function clickedTest() { 
    window.open(myPath + "/Employee/GetExcel", "_blank"); 
} 

はこれを試してみてください。

サーバー側のコードのどこかで、Responseオブジェクトにアクセスできるときは、Content-Dispositionヘッダーを添付ファイルに設定し、提供しているスプレッドシートのファイル名を指定する必要があります。これにより、要求しているファイルがダウンロードされて表示されていることをブラウザに通知します。

これは以下のように行うことができます。もちろん

Response.AddHeader("Content-Disposition", "attachment;filename=myfile.xls") 

、スプレッドシートのための適切なファイル名でmyfile.xlsを交換してください。

関連する問題