Razor-pages ściągnięcie pliku przez użytkownika nie działa

0

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

0

Obstawiam, że twoja funkcja na success powinna miec prametry

https://www.tutorialsteacher.com/jquery/jquery-ajax-method

0

@szydlak:

szydlak napisał(a):

Obstawiam, że twoja funkcja na success powinna miec prametry

https://www.tutorialsteacher.com/jquery/jquery-ajax-method

nic mi to nie daje, parametr data zwraca tylko stringa: "PK z jakimiś dziwnymi znaczkami: screenshot-20211006145239.png

2

Ja nie pamiętam dokładnie jak się obsługuje pliki z poziomu js ale zobacz tu:
https://www.aspsnippets.com/Articles/Download-File-in-AJAX-Response-Success-using-jQuery.aspx

0

@szydlak: masz przyjacielu łapkę za chęć pomocy, temat rozwiązany.
Próbując to wywoływać ajaxowo nic się nie działo, ale zamiast w js robić obsługę kliknięcia dodałem hrefa do tej metody:
<a href="@Url.Page("Index", "ExportMembersToExcel", new { webinarId = Model.Id })">test</a>
Teraz po kliknięciu wchodzi do metody i po wszystkim plik jest pobierany.
Ktoś wie może czemu przy wcześniejszej próbie ajaxem nie działało?

1 użytkowników online, w tym zalogowanych: 0, gości: 1