我在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
始终为空。没有错误被抛出。
我需要更改什么才能将此报告发送给用户,以便他们可以选择下载报告?
答案 0 :(得分:1)
您将无法通过ajax执行此操作。
为了让浏览器接收和处理
assertTrue ((numDevicesWithActiveMessage+1) == deviceEventService.findWithActiveMessage().size());
DeviceEvent deviceEvent3 = newDeviceEvent();
deviceEvent3.setMessage(1);
deviceEventService.save(deviceEvent3);
DeviceEvent deviceEvent4 = newDeviceEvent();
deviceEventService.save(deviceEvent4);
assertTrue ((numDevicesWithActiveMessage+1) == deviceEventService.findWithActiveMessage().size());
必须直接浏览。
ajax调用可能会将二进制文件下载到jquery,但jquery将无法在本地保存它。
最简单的选择是让浏览器打开指向直接生成PDF的操作的链接,例如:
Content-Disposition:attachment
作为额外的,您可以将所有<a href='@Url.Action("GenerateSupervisorReportPDF", "InteriorReport")'>download report</a>
代码缩减为简单Response.
,它应该处理提示用户保存等等 - 我会留给您(因为我不喜欢) t具有确切的语法(