【发布时间】:2018-08-27 18:49:42
【问题描述】:
当我在 mvc 控制器和 razor 页面中使用 csvhelper 插件时,我似乎得到了不同的行为。以下代码适用于 .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());
}
它会在我的 chrome 浏览器中创建一个 csv 文件,然后可以在 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;
}
}
}
它尝试在 chrome 浏览器底部创建 csv 文档,但出现网络错误消息。当我将它切换到 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>
【问题讨论】:
标签: c# asp.net-core csvhelper