【发布时间】:2019-10-11 20:43:51
【问题描述】:
我的一个剃须刀页面中有一个表单,提交时会生成一个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"
};
}
我不明白我在这里缺少什么。
编辑:处理程序被成功调用。如果我在其中设置断点并进行调试,则处理程序成功完成,但没有文件发送到浏览器。
【问题讨论】:
-
也许标签助手没有被导入。浏览器开发工具中表单的 URL 是什么样的?
-
@KirkLarkin 这是表单的 URL:action="/Schools/Details/44?handler=attendance"。如果我调试,则处理程序被正确调用并且它到达断点并且方法完成而没有任何异常。
-
FWIW,当内存中已经有一个 byte[] 时,返回流是没有意义的。您所做的只是将内存使用量增加一倍。只需直接返回
FileResult和byte[]。 -
您需要返回 FileContentResult。