Witam. W mojej aplikacji użytkownik ma możliwość ściągnięcia pliku Excel. Metodkę wywołuję AJAXowo, ale niestety coś nie działa.
Metoda w C#:
public IActionResult OnPostExportMembersToExcel(int id)
{
using (var workbook = new XLWorkbook())
{
var worksheet = workbook.Worksheets.Add("Test sheet");
int currentRow = 1;
worksheet.Cell(currentRow, 1).Value = "First name";
(...)
foreach (var member in members)
{
currentRow++;
worksheet.Cell(currentRow, 1).Value = member.FirstName;
(...)
}
using (var stream = new MemoryStream())
{
workbook.SaveAs(stream);
var content = stream.ToArray();
return File(content, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Test file.xlsx");
}
}
}
w JS wywołanie wygląda tak o:
$(document).on('click', '.exportWebinarMembersIcon', function () {
var _id = $(this).data('id');
$.ajax({
url: '/Home/Index?handler=ExportMembersToExcel',
type: 'post',
data: {
id: _id
},
beforeSend: function (xhr) {
xhr.setRequestHeader('XSRF-TOKEN',
$('input:hidden[name="__RequestVerificationToken"]').val());
},
success: function () {
alert('success');
},
error: function () {
alert('error');
}
});
});
No i tak - ajax wywołuję metodę w c#, która przechodzi cała bez błędów, natomiast po return File
nic się nie dzieje (mimo że dostaję komunikat success). Próbowałem zamiast tego zapisać plik na sztywno u siebie na pulpicie przy pomocy System.IO.File.WriteAllBytes()
i nie było problemu, no ale po opublikowaniu nie będę miał jak się dostać do informacji o użytkowniku żeby chociaż ścieżkę ogarnąć.
Próbowałem też zamienić tą metodę w C# z Post na Get ale też nic