gpt4 book ai didi

asp.net-mvc - 使用 CSVHelper 将流输出到浏览器

转载 作者:行者123 更新时间:2023-12-02 20:26:13 28 4
gpt4 key购买 nike

我正在尝试使用 CSVHelper 生成 CSV 文件并将其发送回浏览器,以便用户可以选择保存位置和文件名并保存数据。

该网站是基于 MVC 的。这是我用来进行调用的 jQuery 按钮代码(数据是 DTO 列表的某种序列化 Json 表示形式):

    $.ajax({
type: "POST",
url: unity.baseUrl + "common/ExportPayments",
data: data
});

这是 Controller 代码:

    [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 - 使用 CSVHelper 将流输出到浏览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21093150/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com