Asp.net mvc 在ajax请求中返回PDF

Asp.net mvc 在ajax请求中返回PDF,asp.net-mvc,pdf,jquery,response,Asp.net Mvc,Pdf,Jquery,Response,我收到一个ajax请求,请求我的服务器在那里创建一个PDF文件。现在我想在一个新窗口/选项卡中显示这个文件,或者直接下载它。我该怎么做 我的要求 $.ajax({ url: '/Document/CreatePDF', type: 'POST', data: { docid: documentId, dataId: array }, traditional: true, success: function (data

我收到一个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<long> 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({
url:“/Document/CreatePDF”,
键入:“POST”,
数据:{
docid:documentId,
dataId:array
},
传统的:是的,
成功:功能(数据){
}
});
[HttpPost]
public FileStreamResult CreatePDF(长文档ID、列表数据ID)
{
var document=_rep.LoadDocument(docid.ToString(),Server.MapPath(“~/Documents/”)+docid+“.xml”);
var exporter=新的PDFExporter(文件);
MemoryStream fileStream=exporter.CreatePDF();
字节[]PdfByte=fileStream.GetBuffer();
Flush();
fileStream.Close();
HttpContext.Response.AddHeader(“内容处置”、“附件;文件名=form.pdf”);
返回新的FileStreamResult(fileStream,“application/pdf”);
}

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

@using (Html.BeginForm("CreatePDF", "Document", FormMethod.Post, new { id = "myform" }))
{
    <button type="submit">Download</button>
}
@使用(Html.BeginForm(“CreatePDF”,“Document”,FormMethod.Post,new{id=“myform”}))
{
下载
}

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

我认为您应该向服务器发送一个普通表单,或者返回一个创建的pdf文档的地址,javascript可以在新窗口中将浏览器转发到该文档……一般解决方案:这对我很有用(PDF模式对话框,通过MVC ajax调用从字节[]开始)