Метод экспорта 1
Вот метод контроллера, который ДЕЙСТВИТЕЛЬНО возвращает браузеру файл .xlsx. Метод вызывается со страницы .cshtml:
Код: Выделить всё
Код: Выделить всё
[HttpPost]
public async Task DownloadLoanEventsLog(string id)
{
var user = await _userManager.GetUserAsync(HttpContext.User);
var loan = _unitOfWork.LoanFiles.GetById(id);
var list = eventLogService.GetLoanFileEventLog(id, _unitOfWork, user);
string contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
string fileName = $"Loan-{loan.LoanNumber}-EventsLog.xlsx";
try
{
using (var workbook = new XLWorkbook())
{
IXLWorksheet worksheet = workbook.Worksheets.Add("Events");
worksheet.Cell(1, 1).Value = "EventDate";
worksheet.Cell(1, 2).Value = "LoanNumber";
int index = 2;
foreach (var row in list)
{
worksheet.Cell(index, 1).Value = row.EventDateTimeDisplay;
worksheet.Cell(index, 2).Value = row.LoanNumber;
index++;
}
using (var stream = new MemoryStream())
{
workbook.SaveAs(stream);
var content = stream.ToArray();
return File(content, contentType, fileName);
}
}
}
catch (Exception ex)
{
return RedirectToAction("CloseLoan", new { id = id }).WithWarning("", "Exporting Loan File Events Failed");
}
finally
{
}
}
Метод экспорта 2
Вот метод контроллера, который НЕ возвращает файл .xlsx в браузер.
Метод почти идентичен первому методу, но экспорт запускается в Ajax. вызов для отправки массива данных json на контроллер.
Код: Выделить всё
var rows = $("#report").jqxGrid('getrows');
var loans = [];
for (var i = 0; i < rows.length; i++) {
var row = rows[i];
loans.push({
"loanNumber": row.loanNumber,
"loanType": row.loanType,
});
}
var jqxhr = $.ajax({
data: JSON.stringify(loans),
contentType: "application/json",
url: "/Reports/ExportLoansReport",
type: "POST"
});
Код: Выделить всё
[HttpPost]
public IActionResult ExportLoansReport([FromBody] List model)
{
string contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
string fileName = $"Loans-Export.xlsx";
try
{
using (var workbook = new XLWorkbook())
{
IXLWorksheet worksheet = workbook.Worksheets.Add("Loans");
worksheet.Cell(1, 1).Value = "LoanNumber";
worksheet.Cell(1, 2).Value = "LoanType";
int index = 2;
foreach (var row in model)
{
worksheet.Cell(index, 1).Value = row.LoanNumber;
worksheet.Cell(index, 2).Value = row.LoanType;
index++;
}
using (var stream = new MemoryStream())
{
workbook.SaveAs(stream);
var content = stream.ToArray();
return File(content, contentType, fileName);
}
}
}
catch(Exception ex)
{
return Json("some fail msg");
}
}
Код: Выделить всё
ExportLoansReport
Я подозреваю, что эта проблема связана с тем, что запрос был сделан со стороны клиента, но я не уверен как это исправить.
Подробнее здесь: https://stackoverflow.com/questions/786 ... ent-result