asp.net-mvc – 使用CSVHelper将流输出到浏览器
发布时间:2020-12-16 00:42:29 所属栏目:asp.Net 来源:网络整理
导读:我试图使用CSVHelper生成CSV文件并将其发送回浏览器,因此用户可以选择保存位置和文件名并保存数据。 该网站是基于MVC的。这里是我用来进行调用的jQuery按钮代码(数据是DTO列表的一些序列化的Json表示): $.ajax({ type: "POST",url: unity.baseUrl + "commo
我试图使用CSVHelper生成CSV文件并将其发送回浏览器,因此用户可以选择保存位置和文件名并保存数据。
该网站是基于MVC的。这里是我用来进行调用的jQuery按钮代码(数据是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格式的数据。但是浏览器似乎还不知道该怎么做 – 不会向用户提供下载选项。 解决方法
请尝试以下代码:
public FileStreamResult ExportPayments() { var result = WriteCsvToMemory(_commonService.GetPayments()()); var memoryStream = new MemoryStream(result); return new FileStreamResult(memoryStream,"text/csv") { FileDownloadName = "export.csv" }; } public byte[] WriteCsvToMemory(IEnumerable<Payment_dto> records) { using (var memoryStream = new MemoryStream()) using (var streamWriter = new StreamWriter(memoryStream)) using (var csvWriter = new CsvWriter(streamWriter)) { csvWriter.WriteRecords(records); streamWriter.Flush(); return memoryStream.ToArray(); } } 更新 以下是将复杂类型模型传递给使用GET HTTP方法的动作方法。我不喜欢这种方法,它只是给你一个想法,有一种方法来实现这一点。 模型 public class Data { public int Id { get; set; } public string Value { get; set; } public static string Serialize(Data data) { var serializer = new JavaScriptSerializer(); return serializer.Serialize(data); } public static Data Deserialize(string data) { var serializer = new JavaScriptSerializer(); return serializer.Deserialize<Data>(data); } } 行动: [HttpGet] public FileStreamResult ExportPayments(string model) { //Deserialize model here var result = WriteCsvToMemory(GetPayments()); var memoryStream = new MemoryStream(result); return new FileStreamResult(memoryStream,"text/csv") { FileDownloadName = "export.csv" }; } 视图: @{ var data = new Data() { Id = 1,Value = "This is test" }; } @Html.ActionLink("Export","ExportPayments",new { model = Data.Serialize(data) }) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – 如何使用Autotyper和Betty方法将DataAnnota
- 如何使用ASP.NET Identity 3.0没有Entity Framework
- asp.net-mvc-4 – 将ASP.NET Core与旧版.Net Framework代码
- asp.net – 如何构建专门的JQuery Timer
- asp.net – 如何加入这些表以显示相关的用户名?
- asp.net-mvc – ASP.NET MVC的Windows Azure存储模拟器连接
- .net – System.Management访问被拒绝
- asp.net-mvc – 验证:Model或ViewModel
- 用于MVC的datepicker的asp.net-mvc -dd-mm-yyyy格式在Chrom
- asp.net-mvc – 重定向页面的TempData?
推荐文章
站长推荐
热点阅读