2017-05-19 9 views
0

私はCSVへのエクスポートオプションを持っていますが、ファイルダイアログをポップアップ表示するのに問題があります(thisチュートリアルを使用しました)。ファイルを保存しているMVC

それだけでファイルダイアログをポップアップすることなく、このコードによって、手順が
[HttpPost] 
public ActionResult FieldQueryResult(QueryInput input, bool exportCsv) 
{ 
    //input gets processed to create 'sb' which is the csv string 
    if (exportCsv) 
     { 
      var fileString = sb.ToString(); 
      byte[] bytes = new byte[] { }; 
      bytes = Encoding.ASCII.GetBytes(fileString); 
      return new FileContentResult(bytes, "text/csv");    
     } 
} 

:CSV]ボタンをクリックすると、フォームは、コントローラは次のようになりますので、trueに設定し、エクスポートオプションを使用してトリガされます。私は何を間違えていますか?私はFileContentResultActionResultから返すからだと思っていたかもしれませんが、私が読んだところでは交換可能と思われています。

+0

AFAIK、ファイル "保存"ダイアログはクライアント側のブラウザ設定に依存します - 本当に何をしたいですか? 'FileResultResult'は明らかに' ActionResult'から継承されています。したがって、ファイルを返す目的では合法です。 –

+0

"text/csv"をSystem.Net.Mime.MediaTypeNames.Application.Octetに変更してください。 –

+0

S. Petrosv、私はそれを試みましたが、違いはありませんでした。 – BMills

答えて

1

phew、それはうまくいきませんでしたが、いくつかのAjaxとセッション変数を使って最終的にそれを得ました。誰にでも助けます。

問題の要点は、FileResultを動作させるには、Actionlinkから呼び出す必要がありますが、フォームからCSV文字列を作成していて、投稿後にファイルダイアログを表示できないようですフォーム。私がやったことは、ajax投稿にフォームを入れてから、postメソッドでセッションオブジェクトにcsv文字列を追加してから、セッション変数を使用できるExportCsv FileResultアクションを呼び出すことに成功しました。

だから、AJAX:

$('#masterForm').submit(function (ev) { 
    $.ajax({ 
     type: 'POST', 
     url: 'Analytics/FieldQueryResult', 
     data: $('#masterForm').serialize(), 
     success: function (data) { 
      if (data.model.ExportCsv === true) { 
       window.location.href = 'ExportCsv';     
      } 

コントローラー:

[HttpPost] 
public ActionResult FieldQueryResult(QueryInput input, bool exportCsv) 
{ 
//build my csv string, sb 
    this.Session["fileString"] = sb.ToString(); 
... 
} 

そして、アヤックスの成功の上に、ExportCsv Fileresultメソッドが呼び出され、CSV文字列は、セッションオブジェクトあちこち検索し

public FileResult ExportCsv() 
    { 
     var fileString = this.Session["fileString"].ToString(); 
     byte[] bytes = new byte[] { }; 
     bytes = Encoding.ASCII.GetBytes(fileString); 
     return File(bytes, System.Net.Mime.MediaTypeNames.Application.Octet, "report.csv"); 
    } 

そして、ファイル保存ダイアログがcsvでポップアップして保存されます。 :)

関連する問題