是否无法通过ASP.NET MVC5中的AJAX调用下载文件?

时间:2016-10-09 07:23:05

标签: javascript c# jquery ajax asp.net-mvc

我知道使用普通调用而不是AJAX调用似乎更好但是出于某种原因,即在下载期间出现问题时在模态对话框上显示错误消息,我需要通过在MVC5项目中使用AJAX调用来下载文件。以下是经过多次尝试后我最终做的事情:

查看:

<a href="javascript:downloadFile()">Download</a>


function downloadFile() {
    $.ajax({
        type: 'POST',
        url: '/Experiment/GetFile',
        data: '{id:' + 8 + '}', //For test purpose I used static id
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        success: function (returnValue) {
            window.location = '/Experiment/GetFile?id=' + returnValue;
        }
    });
};

控制器:

在Controller中,我有一个类似的方法,但如果我应该为AJAX Post和成功方法做同样的方法,我真的很困惑。

[HttpPost]
public ActionResult GetFile(int id)
{
    var dataContext = repository.FileAttachments.FirstOrDefault(m => m.Id == id);
    if (dataContext == null)
    {      
        return Json(new { success = true, returnValue = "8" });
    }
    else
    {
        return Json(new { success = false, message= "Error..." }, JsonRequestBehavior.AllowGet);
    }
}

在ASP.NET MVC5中使用AJAX调用是否有智能方法来执行此dosnload操作?

1 个答案:

答案 0 :(得分:0)

您需要返回文件名或文件路径 示例“/file/download.doc” 然后你需要编辑视图页面,如下面的

<a href="javascript:downloadFile()">Download</a> 
<a href="" id="todownload" download> 
function downloadFile() { 
  $.ajax({ type: 'POST', url: '/Experiment/GetFile', data: '{id:' + 8 + '}', //For test purpose I used static id 
  contentType: 'application/json; charset=utf-8', dataType: 'json',
  success: function (returnValue)
    $("#todownload").attr('href',returnValue);
    $("#todownload").click();
    } 
  });
};