我尝试使用CSVHelper生成CSV文件并将其发送回浏览器,以便用户可以选择保存位置和文件名并保存数据。
网站是基于MVC的。下面是我用来调用的jQuery按钮代码(data是DTO列表的一些序列化的Json表示):
$.ajax({
type: "POST",
url: unity.baseUrl + "common/ExportPayments",
data: data
});
下面是控制器代码:
[HttpPost]
public FileStreamResult ExportPayments()
{
MemoryStream ms = new MemoryStream();
StreamWriter sw = new StreamWriter(ms);
CsvWriter writer = new CsvWriter(sw);
List<Payment_dto> pd = _commonService.GetPayments();
foreach (var record in pd)
{
writer.WriteRecord(record);
}
sw.Flush();
return new FileStreamResult(ms, "text/csv");
}
这似乎完全没有达到任何目的--调用方法步骤进入正确的代码位,但响应是空的,更不用说为用户提供一个文件对话框来保存数据了。我已经逐步完成了这段代码,它从服务中带回数据,写入数据,并且没有抛出任何错误。我做错了什么?
编辑:归还这个。..
return File(ms.GetBuffer(), "text/csv", "export.csv");
...给我一个响应,包含我所期望的csv格式的数据。但浏览器似乎仍然不知道该怎么做-没有下载选项提供给用户。
4条答案
按热度按时间nzk0hqpo1#
试试下面的代码:
更新
下面是如何将复杂类型模型传递给使用
GET
HTTP方法的action方法。我不喜欢这种方法,它只是给你一个想法,有一种方法来实现这一点。型号
行动:
浏览次数:
x759pob22#
ASP.NET Core解决方案:
7uhlpewt3#
在控制器中尝试:
pb3skfrl4#
也可以使用dynamic关键字转换任何数据
来自@Lin的代码