【发布时间】:2016-01-25 19:14:50
【问题描述】:
我在 MVC 应用程序中使用 VS 2013、VB.Net 和 Telerik 2016 Q1。我正在使用 Telerik RadFlowDocument 创建报告,并将其以 pdf 格式发送给用户。我已成功创建报告并将其保存在本地。我的问题是,当我尝试将其转换为内存流并将其发送回用户时,用户永远无法选择下载报告。
我有一个通过 ajax 启动进程的按钮:
function supervisorPDF() {
$.ajax({
url: '@Url.Action("GenerateSupervisorReportPDF", "InteriorReport")',
type: 'POST'
})
.success(function (result) {
})
.error(function (xhr, status) {
alert(status);
})
}
我有一个接收ajax调用然后生成报告的子例程:
Sub GenerateSupervisorReportPDF()
Dim generator As New PdfGenerator
Dim selectedSupervisorName = System.Web.HttpContext.Current.Session("selectedSupervisorName").ToString()
Dim selectedSupervisorIdNumber = System.Web.HttpContext.Current.Session("selectedSupervisorIdNumber").ToString()
Dim report As New RadFlowDocument
Dim viewModel As New SupervisorReportViewModel
Dim model = viewModel.getSupervisorReportInfo(selectedSupervisorName, selectedSupervisorIdNumber)
report = generator.generateSupervisorPdf(model)
Dim provider As New PdfFormatProvider()
Dim output As New MemoryStream
provider.Export(report, output)
Dim buffer As Byte()
Try
buffer = output.ToArray
Response.ClearContent()
Response.ClearHeaders()
Response.ContentType = "application/pdf"
Response.OutputStream.Write(buffer, 0, buffer.Length)
Response.AddHeader("Content-Disposition", "attachment;filename=SupervisorReport.pdf")
Response.End()
Catch ex As Exception
End Try
End Sub
在这个子例程中,如果我将output 声明为本地文件路径,那么一切都会按预期工作。但是,当使用此实现时,我的 Response.OutputStream 总是以 null 结束。没有错误被抛出。
我需要进行哪些更改才能将此报告发回给用户,以便他们可以选择下载报告?
【问题讨论】:
-
您将无法通过 ajax 执行此操作 - 您需要将浏览器 (
location.href) 重定向到 pdf 生成操作。即<a href='@Url.Action("GenerateSupervisorReportPDF", "InteriorReport")'>download report</a> -
@freedomn-m 你是对的,谢谢
标签: asp.net-mvc vb.net telerik