Мне кажется, что я использую аддон csvhelper, когда использую его в контроллерах mvc по сравнению со страницами бритвы. Следующий код работает в .net core 2.1 mvc:
public void ExportReportsToRecords()
{
Response.ContentType = "text/csv";
Response.ContentType = "application/octet-stream";
StringWriter sw = new StringWriter();
var writer = new CsvWriter(sw);
IEnumerable records = (_context.ReportsToRecords.ToList());
writer.WriteRecords(records);
foreach (ReportsToRecords record in records)
{
writer.WriteRecord(record);
}
Response.WriteAsync(sw.ToString());
}
Он создает CSV-файл в моем браузере Chrome, который затем можно дважды щелкнуть в Excel. Код выше находится в коде моего контроллера.
Когда я использую на странице бритвы в коде ниже:
namespace RTMGMTCore2Razor.Pages.RequiredCorrections
{
public class ExportCorrectionsModel : PageModel
{
private readonly RTMGMTCore2Razor.Models.RTMGMTContext _context;
public ExportCorrectionsModel(RTMGMTContext context)
{
_context = context;
}
public const string MessageKey = nameof(MessageKey);
public void OnGet()
{
try
{
Response.ContentType = "text/csv";
Response.ContentType = "application/octet-stream";
StringWriter sw = new StringWriter();
var writer = new CsvWriter(sw);
IEnumerable records = (_context.RequiredCorrectionsSet.ToList());
writer.WriteRecords(records);
foreach (RequiredCorrectionsSet record in records)
{
writer.WriteRecord(record);
}
Response.WriteAsync(sw.ToString());
TempData[MessageKey] = "Export Succeeded!";
}
catch
{
TempData[MessageKey] = "Export Failed!";
}
return;
}
}
}
пытается создать документ CSV внизу браузера Chrome, но появляется сообщение об ошибке сети. Когда я переключаю его на Microsoft Edge, он фактически показывает содержимое текстового файла csv прямо в браузере.
Кто-нибудь имеет представление о том, почему странные различия в поведении между страницами бритвы на этих экранах и в контроллерах?
cshtml:
@page
@model RTMGMTCore2Razor.Pages.RequiredCorrections.ExportCorrectionsModel
@{
ViewData["Title"] = "ExportCorrections";
}
<h2>ExportCorrections</h2>
<form method="get" asp-page="ExportCorrections"> </form>
@if (TempData[RTMGMTCore2Razor.Pages.ReportsToRecord.ExportReportsToRecordsModel.MessageKey] is string message)
{
<h4>@message</h4>
}
<a asp-page="./Index">Back to List</a>