在ajax请求中返回PDF

我有一个ajax请求到我的服务器,我正在创建一个PDF文件。 现在我想在新窗口/选项卡中显示此文件或只是下载它。 我怎样才能做到这一点?

我的请求

$.ajax({ url: '/Document/CreatePDF', type: 'POST', data: { docid: documentId, dataId: array }, traditional: true, success: function (data) { } }); [HttpPost] public FileStreamResult CreatePDF(long docid, List dataId) { var document = _rep.LoadDocument(docid.ToString(), Server.MapPath("~/Documents/") + docid + ".xml"); var exporter = new PDFExporter(document); MemoryStream fileStream = exporter.CreatePDF(); byte[] PdfByte = fileStream.GetBuffer(); fileStream.Flush(); fileStream.Close(); HttpContext.Response.AddHeader("content-disposition","attachment; filename=form.pdf"); return new FileStreamResult(fileStream, "application/pdf"); } 

您无法使用AJAX下载文件。 原因是因为javascript不允许您将下载的内容保存在客户端计算机上,也不允许您提示“另存为”对话框。 您应该使用简单的HTML

或锚点:

 @using (Html.BeginForm("CreatePDF", "Document", FormMethod.Post, new { id = "myform" })) {  } 

如果您需要将参数传递给仅在客户端知道的此控制器操作,您可以订阅此表单的.submit事件,然后使用相应的值动态地将隐藏字段注入其中,然后保留默认操作execute。 如果在服务器端知道这些值,您应该只使用HTML帮助程序来生成这些隐藏字段。