使用Ajax生成的Excel文件并下载的实例


Posted in Javascript onNovember 21, 2016

很久?]有??文章啦,今天分享一??如何在ASP.NET MVC里使用Ajax下?生成文件的方法,以下只是??人心得:

大家都???知道,在ASP.NET MVC里,如果通?Ajax?用后?控制器?r,可以返回一??JSON?ο螅??⒉荒苤苯臃祷匚募?ǔ?撬⑿马?面,那就不是Ajax啦),所以如果想用Ajax生成文件并下?的?,那只要?⑸?傻奈募?缺4娴椒?掌魃希?会嵩?⑽募??酵ㄟ^JSON返回,之後才可以?行下?,?然由於是??r性存放,所以?下?完后就需要?上?h除相??奈募??br />

以下是做法以??B生成Excel?槔?ㄉ??xcel的具?步?我就省略了,?并不是此文章的重?): 

1. 首先??建Action生成Excel文件

[HttpPost]
public JsonResult ExportExcel()
{
  DataTable dt = DataService.GetData();
  var fileName = "Excel_" + DateTime.Now.ToString("yyyyMMddHHmm") + ".xls";
  //?⑸?傻奈募?4娴椒?掌鞯呐R?r目?里
  string fullPath = Path.Combine(Server.MapPath("~/temp"), fileName);
 
  using (var exportData = new MemoryStream())
  {
    //如何生成Excel?里就不???明啦,我?里??xcel的操作使用的是 NPOI
    Utility.WriteDataTableToExcel(dt, ".xls", exportData);
 
    FileStream file = new FileStream(fullPath, FileMode.Create, FileAccess.Write);
    exportData.WriteTo(file);
    file.Close();
  }
 
  var errorMessage = "you can return the errors in here!";
 
  //返回生成的文件名
  return Json(new { fileName = fileName, errorMessage = "" });
}

2. ??建下?用的 Action

[HttpGet]
[DeleteFileAttribute] //Action Filter, 下?完后自??h除文件,????傩陨葬峤忉?
public ActionResult Download(string file)
{
  //到服?掌髋R?r文件目?下?相??奈募
  string fullPath = Path.Combine(Server.MapPath("~/temp"), file);
  //返回文件?ο螅?@里用的是Excel,所以文件?使用了 "application/vnd.ms-excel"
  return File(fullPath, "application/vnd.ms-excel", file);
}

3. 由於要做到下?完后自??h除文件,所以再??建一?? Action Filter

public class DeleteFileAttribute : ActionFilterAttribute
{
  public override void OnResultExecuted(ResultExecutedContext filterContext)
  {
    filterContext.HttpContext.Response.Flush();
    //???前filter context??Q成具?操作的文件并?取文件路?
    string filePath = (filterContext.Result as FilePathResult).FileName;
    //有文件路?胶缶涂梢灾苯?h除相?文件了
    System.IO.File.Delete(filePath);
  }
}

4. 最后在前?添加 Ajax ?用的代?:

//?里我使用了 blockUI 做loading...
$.blockUI({ message: '<h3>Please wait a moment...</h3>' });  
$.ajax({
  type: "POST",
  url: '@Url.Action("ExportExcel","YourController")', //?用相???ontroller/action
  contentType: "application/json; charset=utf-8",
  dataType: "json",
}).done(function (data) {
  //console.log(data.result);
  $.unblockUI();
  //接收返回的文件路?剑?宋募?@?r已保存到服?掌魃狭
  if (data.fileName != "") {
    //通??用 window.location.href 直接跳?到下? action ?行文件下?操作
    window.location.href = "@Url.RouteUrl(new { Controller = "YourController", Action = "Download"})/?file=" + data.fileName;
  }
});

5. 完!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS的数组的扩展实例代码
Jul 09 Javascript
js取模(求余数)隔行变色
May 15 Javascript
javascript获取文档坐标和视口坐标
May 26 Javascript
Bootstrap每天必学之下拉菜单
Nov 25 Javascript
javascript中去除数组重复元素的实现方法【实例】
Apr 12 Javascript
原生JS封装ajax 传json,str,excel文件上传提交表单(推荐)
Jun 21 Javascript
详解vue项目首页加载速度优化
Oct 18 Javascript
jQuery EasyUI window窗口使用实例代码
Dec 25 jQuery
JavaScript+HTML5 canvas实现放大镜效果完整示例
May 15 Javascript
Vue项目接入Paypal实现示例详解
Jun 04 Javascript
Vue如何将页面导出成PDF文件
Aug 17 Javascript
使用vue-element-admin框架从后端动态获取菜单功能的实现
Apr 29 Vue.js
javascript入门之数组[新手必看]
Nov 21 #Javascript
jQuery UI插件实现百度提词器效果
Nov 21 #Javascript
javascript中Number的方法小结
Nov 21 #Javascript
Bootstrap中定制LESS-颜色及导航条(推荐)
Nov 21 #Javascript
js实现HashTable(哈希表)的实例分析
Nov 21 #Javascript
详解js中call与apply关键字的作用
Nov 21 #Javascript
微信小程序购物商城系统开发系列-目录结构介绍
Nov 21 #Javascript
You might like
Zend的MVC机制使用分析(二)
2013/05/02 PHP
浅析php数据类型转换
2014/01/09 PHP
php结合js实现点击超链接执行删除确认操作
2014/10/31 PHP
PHP实现一个多功能购物网站的案例
2017/09/13 PHP
PHP利用百度ai实现文本和图片审核
2019/05/08 PHP
Laravel框架实现多数据库连接操作详解
2019/07/12 PHP
JavaScript 提升运行速度之循环篇 译文
2009/08/15 Javascript
解决用jquery load加载页面到div时,不执行页面js的问题
2014/02/22 Javascript
浅谈jQuery异步对象(XMLHttpRequest)
2014/11/17 Javascript
浅析JavaScript中的事件机制
2015/06/04 Javascript
通过XMLHttpRequest和jQuery实现ajax的几种方式
2015/08/28 Javascript
jquery实现点击变换导航样式的方法
2015/08/31 Javascript
详解Angular 4.x NgTemplateOutlet
2017/05/24 Javascript
vuejs实现本地数据的筛选分页功能思路详解
2017/11/15 Javascript
vue 虚拟dom的patch源码分析
2018/03/01 Javascript
ES6 class类链式继承,实例化及react super(props)原理详解
2020/02/15 Javascript
Vue3 响应式侦听与计算的实现
2020/11/11 Javascript
wxpython 学习笔记 第一天
2009/03/16 Python
Python类属性与实例属性用法分析
2015/05/09 Python
python中的全局变量用法分析
2015/06/09 Python
python 接口_从协议到抽象基类详解
2017/08/24 Python
详细分析Python可变对象和不可变对象
2020/07/09 Python
canvas绘制树形结构可视图形的实现
2020/04/03 HTML / CSS
京东国际站:JOYBUY
2017/11/23 全球购物
Under Armour西班牙官网:美国知名的高端功能性运动品牌
2018/12/12 全球购物
工程预算与管理应届生求职信
2013/10/06 职场文书
领导调研接待方案
2014/02/27 职场文书
交通安全寄语大全
2014/04/08 职场文书
答谢会策划方案
2014/05/12 职场文书
抗洪救灾标语
2014/10/08 职场文书
自我工作评价范文
2015/03/06 职场文书
被告答辩状范文
2015/05/22 职场文书
正规欠条模板
2015/07/03 职场文书
儿子满月酒致辞
2015/07/29 职场文书
创业计划书之韩国烧烤店
2019/09/19 职场文书
pytorch 如何使用batch训练lstm网络
2021/05/28 Python