Почему моя страница обновляется, а не загружается файл на странице бритвы? - PullRequest
1 голос
/ 11 октября 2019

У меня есть форма на одной из моих бритвенных страниц, которая при отправке генерирует byte[], а я возвращаю FileStreamResult. Проблема в том, что все, что происходит, - это обновление страницы, и мне не предлагается загрузить файл.

Вот моя форма:

<form autocomplete="off" method="post" asp-page-handler="attendance" asp-route-id="@Model.Data.Id">
    <div class="form-group">
        <label class="font-weight-bold">Date of meeting</label>
        <input class="form-control datepicker" id="meeting-date" type="text" value="DateOfMeeting" />
    </div>
    <div class="form-group">
        <button type="submit" class="btn btn-primary btn-block">Download document</button>
    </div>
</form>

И это мой обработчик страницы:

public async Task<IActionResult> OnPostAttendanceAsync(int id) 
{
    var query = new AttendanceList.Query {
        Date = DateOfMeeting,
        SchoolId = id
    };

    var model = await _mediator.Send(query);

    var stream = new MemoryStream(model.Data);

    return new FileStreamResult(stream, ContentType.Pdf) {
        FileDownloadName = "Attendance.pdf"
    };
}

Я не понимаю, чего мне здесь не хватает.

Редактировать: Обработчик вызывается успешно. Если я установлю точку останова и отладлю ее, обработчик завершится успешно, но файл не будет отправлен в браузер.

1 Ответ

1 голос
/ 11 октября 2019

Хорошо, поэтому проблема заключается в использовании POST вместо GET в качестве метода формы.

Я обновил код до следующего, и теперь появляется приглашение на загрузку, и все в порядке:

<form autocomplete="off" method="get" asp-route-id="@Model.Data.Id">
    <input type="hidden" name="handler" value="attendance" />
    <div class="form-group">
        <label class="font-weight-bold">Date of meeting</label>
        <input class="form-control datepicker" type="text" name="dateOfMeeting" />
    </div>
    <div class="form-group">
        <button type="submit" class="btn btn-primary btn-block">Download document</button>
    </div>
</form>

И подпись обработчика теперь:

public async Task<IActionResult> OnGetAttendanceAsync(int id, string dateOfMeeting)
...