Я пытаюсь добиться именно того, что пытается сделать плакат в этом вопросе сделать, за исключением того, что браузер (Chrome) не пытается загрузить файл .csv или предоставить пользователю окно загрузки. Я использую запрос HTTP GET, и код практически идентичен предыдущему вопросу. Я использую Fiddler для мониторинга трафика и вижу поток файлов .csv в ответе, но браузер, похоже, игнорирует его, и я не могу понять, почему...
Вот моя текущая реализация (на основе вопроса @MattThrower):
Я делаю AJAX-вызов контроллеру MVC:
$("#exportToCsvLink").click(function () {
$.ajax({
type: "GET",
url: window.project.common.routes.urls.ExportChartDataToCsv,
data: { parameterId: parameter.parameterId }
});
});
Контроллер MVC обрабатывает экспорт CSV и возвращает FileStreamResult
public FileStreamResult ExportChartDataToCsv(int parameterId)
{
List<TestViewModel> data = _CommonService.GetData(parameterId);
var result = WriteCsvToMemory(data);
var memoryStream = new MemoryStream(result);
return new FileStreamResult(memoryStream, "text/csv") { FileDownloadName = "export.csv" };
}
public byte[] WriteCsvToMemory(IEnumerable<TestViewModel> data)
{
using (var memoryStream = new MemoryStream())
using (var streamWriter = new StreamWriter(memoryStream))
using (var csvWriter = new CsvWriter(streamWriter))
{
csvWriter.WriteRecords(data);
streamWriter.Flush();
return memoryStream.ToArray();
}
}