我的 MVC 应用程序中有一个 C# 函数,它返回 csv 文件的 JSON 表示。我试图在 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 中使用它。