私の MVC アプリケーションには、csv ファイルの JSON 表現を返す C# 関数があります。私はそれをjavascriptでキャッチしてファイルを開こうとしています。基本的に、私はブラウザにそのことをさせて、ユーザーがそれを開くか、保存するか、キャンセルするかを決定できるようにします。ファイルを開くように求めるポップアップが表示されません。以下は機能です
C# 関数
[HttpPost]
public ActionResult ExportToCsv(string fileContents, string fileName)
{
fileContents = fileContents.Replace("-CARRIAGE-", "\r\n");
return Json(new { url = File(Encoding.UTF8.GetBytes(fileContents), "text/csv", fileName) }); ;
}
これは、関数への ajax 呼び出しを行っている JavaScript です。
$("#btnExport").click(function (event) {
event.preventDefault();
var csv = table2csv(noteTypeTable, "full", "Table.dataTable", "noteTypes");
$.ajax({
url: "/Admin/Admin/ExportToCsv/?fileContents=" + csv + "&fileName=NoteTypes.csv",
type: 'Post',
success: function (result) {
window.open(result.url);
}
});
});
私は何かが欠けていることを知っています。誰か助けてください。
編集
すべての潜在的な回答とコメントを読んだ後、これが私が達成しようとしていることです。したがって、私のコードがすべてひどく間違っている場合は、お知らせください。
グリッドがあり、Excel へのエクスポート ボタンがあります。必要なデータをJavaScript自体のコンマ区切りテキストに変換するメソッドがあります。これをダウンロード可能な csv ファイルとしてユーザーに提示する必要があります。このために、コントローラー メソッドを使用して File オブジェクトを作成していました。以前の化身は Get メソッドであり、クエリ文字列の長さの制限による制限に直面しました。だから私はそれを POST メソッドに変換しようとしましたが、うまくいきません。
これは、少量のデータで機能する以前のバージョンのコードです
Javascript
$("#btnExport").click(function (event) {
event.preventDefault();
var csv = table2csv(noteTypeTable, "full", "Table.dataTable", "noteTypes");
window.location.href = "/Admin/Admin/ExportToCsv/?fileContents=" + csv + "&fileName=NoteTypes.csv";
});
C# 関数
[HttpGet]
public ActionResult ExportToCsv(string fileContents, string fileName)
{
fileContents = fileContents.Replace("-CARRIAGE-", "\r\n");
return File(Encoding.UTF8.GetBytes(fileContents), "text/csv", fileName);
}
これで、より多くのコンテキストが得られることを願っています。基本的に、GET メソッドを POST メソッドに変換し、Javascript から使用する必要がありました。