当我尝试通过 ajax json MVC 控制器下载文件时不起作用。没有得到 MIME 响应。只是在窗口中呈现为文本。我尝试了论坛中提到的所有选项,但没有运气。请帮忙。控制器发回正确的文件,但我认为 javascript ajax 将其呈现为 json。当我单击下载按钮时,我想获得文件的“保存”或“打开”文件响应标题提示。
$("#btnDownloadEDIFile").bind("click", function (e)
{
e.preventDefault();
displayAjaxLoading(true);
$.ajax({
type: 'POST',
dataType: "json",
async: false,
contentType: 'application/json; charset=utf-8',
url: '@Url.Action(MVC.AccountsPayable.StagedInvoice.DownloadFile())',
data: JSON.stringify({ StagedFileId: $('#StagedFileId').val() , FilePath: $('#FilePath').val() , SourceFileName: $('#SourceFileName').val() }),
success: function (result) {
//alert(result);
if (result != "") {
displayNotoficationError([result]);
}
else {
}
},
error: function (result) {
//debugger;
alert(result);
displayNotoficationError([result]);
}
});
});
当我执行此操作时,它会在窗口上呈现为文本,并且还会在 javascript 中引发 ajax 错误。
这是控制器代码
public virtual ActionResult DownloadFile(Nullable<int> StagedFileId, string FilePath, string SourceFileName)
{
string _FullPath = _WebApplicationConfiguration.SourceStagedInvoiceFileFolder + FilePath;
if (System.IO.File.Exists(_FullPath))
{
HttpContext.Response.ClearContent();
HttpContext.Response.ContentType = "application/octet-stream";
HttpContext.Response.AddHeader("content-disposition",
"attachment; filename=" + SourceFileName);
HttpContext.Response.BinaryWrite(System.IO.File.ReadAllBytes(_FullPath));
return File(_FullPath, "text/octet-stream", SourceFileName);
}
else
{
return Content("");
}
}