通过ajax调用ASP MVC下载PDF文件

通过ajax调用ASP MVC下载PDF文件,ajax,asp.net-mvc,Ajax,Asp.net Mvc,我尝试使用ASP MVC模型,通过ajax调用在点击按钮时下载pdf文件 当我点击我的按钮时,什么也没有发生,但当我在url上添加控制器方法时,我的文件被下载。 我只想在点击按钮时下载 JS: 控制器: public FileResult DownloadFile() { Document PDF = new Document(); MemoryStream memoryStream = new MemoryStream(); PdfWriter writer = Pdf

我尝试使用ASP MVC模型,通过ajax调用在点击按钮时下载pdf文件 当我点击我的按钮时,什么也没有发生,但当我在url上添加控制器方法时,我的文件被下载。 我只想在点击按钮时下载

JS:

控制器:

public FileResult DownloadFile()
{
    Document PDF = new Document();
    MemoryStream memoryStream = new MemoryStream();
    PdfWriter writer = PdfWriter.GetInstance(PDF, memoryStream);
    PDF.Open();
    PDF.Add(new Paragraph("Something"));
    PDF.Close();
    byte[] bytes = memoryStream.ToArray();
    Response.ContentType = "application/pdf";
    Response.AddHeader("Content-Disposition", "attachment;filename=Receipt-test.pdf");
    Response.BinaryWrite(memoryStream.ToArray());
    return File(bytes, "application/pdf");
}

不要使用Ajax下载文件。这真的很棘手,你可以从中看出

最好使用
GET
window.location.href
因为文件正在异步下载

$('#PrintTimeSheet').click(function () {
   window.location.href = "/Home/DownloadFile";
});

[HttpGet]
public FileResult DownloadFile()
{
   //your generate file code
}

不要使用Ajax下载文件。这真的很棘手,你可以从中看出

最好使用
GET
window.location.href
因为文件正在异步下载

$('#PrintTimeSheet').click(function () {
   window.location.href = "/Home/DownloadFile";
});

[HttpGet]
public FileResult DownloadFile()
{
   //your generate file code
}

创建一个链接(如果你想要的话,把它设计成一个按钮的样式)。你说的“只在按钮上点击”是什么意思?如果你真的是用这种操作方法创建pdf文件,你怎么能摆脱服务器端的操作呢?我不能使用链接,因为在ajax调用创建链接之前,我有其他关于JS的条件和说明(如果你想创建链接,并将其样式设置为按钮)。你说的“仅在按钮上单击仅JS”是什么意思?如果你真的是用这个动作方法创建pdf文件的话,你怎么能摆脱服务器端的动作呢?我不能使用链接,因为在ajax调用之前,我有其他条件和JS上的说明。遵循你的例子,我的在IE中工作,但在Firefox中不工作。有什么建议吗?@FreekNortier如果你仍然有问题,最好问另一个问题。按照你的例子,我的工作在IE中,但不是Firefox。有什么建议吗?@FreekNortier如果你还有问题,最好再问一个问题