C# 用ajax在MVC中导出
我正在尝试通过ajax导出控制器中创建的zip文件。我已经研究了几个相关的问题,但它们都略有不同,我无法将这些点联系起来。有时,我得不到任何回报。其他时候,我的ajax会转到窗口位置,一切都会中断 我的ajax调用:C# 用ajax在MVC中导出,c#,jquery,ajax,asp.net-mvc,C#,Jquery,Ajax,Asp.net Mvc,我正在尝试通过ajax导出控制器中创建的zip文件。我已经研究了几个相关的问题,但它们都略有不同,我无法将这些点联系起来。有时,我得不到任何回报。其他时候,我的ajax会转到窗口位置,一切都会中断 我的ajax调用: $.ajax({ url: "/Somewhere/Export", type: "POST", dataType: 'html', data: { jsonModel: JSON.stringify(modelData),
$.ajax({
url: "/Somewhere/Export",
type: "POST",
dataType: 'html',
data: {
jsonModel: JSON.stringify(modelData),
fileType: $("#toggle-2").val()
},
success: function (returnValue) {
window.location = '/Somewhere/Export/Download?file=' + returnValue;
},
});
我的控制器一次尝试剪断:
[HttpPost, Authorize]
public ActionResult Export(string jsonModel, int? fileType)
{
MemoryStream workingStream = GenerateExportFile(jsonModel, fileType);
return File(workingStream, "application/zip", folderName + ".zip");
}
我还尝试使用响应流:
[HttpPost, Authorize]
public ActionResult Export(string jsonModel, int? fileType)
{
MemoryStream workingStream = GenerateExportFile(jsonModel, fileType);
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename=" + folderName + ".zip");
Response.ContentType = System.Net.Mime.MediaTypeNames.Application.Zip;
workingStream.WriteTo(Response.OutputStream);
Response.End();
return RedirectToAction("Index");
}
我看过的东西:
,
,及
在javascript中(使用blockui和jquery文件下载插件):
在javascript中(使用blockui和jquery文件下载插件):
您的数据类型表示您正在发回html,而不是实际发回文件。然后将您的url设置为此结果。。。基本上,这一切都没有任何意义。第二种方法是返回一个re direct(同样不是zip文件)可能与ajax重复。忽略ajax,只需打开一个新窗口,在使用传统ajax并需要下载文件时返回zip文件,最好的办法是在
src
指向某个文件作为附件返回的页面中添加iframe
。这将是跨浏览器兼容的,并且很容易测试和实现。您的数据类型表示您正在发回html,而不是实际发回文件。然后将您的url设置为此结果。。。基本上,这一切都没有任何意义。第二种方法是返回一个re direct(同样不是zip文件)可能与ajax重复。忽略ajax,只需打开一个新窗口,在使用传统ajax并需要下载文件时返回zip文件,最好的办法是在src
指向某个文件作为附件返回的页面中添加iframe
。这将是跨浏览器兼容的,并且易于测试和实现。
$(window).block();
$.fileDownload('Export', {
httpMethod: 'POST',
data: inputs,
successCallback: function (url) {
$(window).unblock();
},
failCallback: function (responseHtml, url) {
$(window).unblock();
$(window).html(url + '</br>' + responseHtml);
}
});
public ActionResult Export()
{
var e = new ExportZip();
var request = Request.Unvalidated;
byte[] data = e.Create(request.Form);
Response.SetCookie(new HttpCookie("fileDownload", "true") { Path = "/" });
return File(data, "application/zip", "file.zip");
}