使用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 相关文章推荐
javascript学习笔记(十二) RegExp类型介绍
Jun 20 Javascript
js限制文本框只能输入整数或者带小数点的数字
Apr 27 Javascript
JS实现的鼠标跟随代码(卡通手型点击效果)
Oct 26 Javascript
高效利用Angular中内置服务$http、$location等
Mar 22 Javascript
jQuery ajaxForm()的应用
Oct 14 Javascript
微信小程序 less文件编译成wxss文件实现办法
Dec 05 Javascript
JS中input表单隐藏域及其使用方法
Feb 13 Javascript
vue计算属性时v-for处理数组时遇到的一个bug问题
Jan 21 Javascript
vue2.0 中使用transition实现动画效果使用心得
Aug 13 Javascript
js实现简单的秒表
Jan 16 Javascript
vue请求数据的三种方式
Mar 04 Javascript
Ajax请求超时与网络异常处理图文详解
May 23 Javascript
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
php地址引用(php地址引用的效率问题)
2012/03/23 PHP
网页上facebook分享功能具体实现
2014/01/26 PHP
PHP大批量插入数据库的3种方法和速度对比
2014/07/08 PHP
PHP中的类型约束介绍
2015/05/11 PHP
PHP实现生成推广海报的方法详解
2018/03/14 PHP
Jquery实战_读书笔记2 选择器
2010/01/22 Javascript
artDialog双击会关闭对话框的修改过程分享
2013/08/05 Javascript
一个获取第n个元素节点的js函数
2014/09/02 Javascript
深入理解jQuery中的事件冒泡
2016/05/24 Javascript
jQuery实现调整表格单列顺序完整实例
2016/06/20 Javascript
AngularJS框架中的双向数据绑定机制详解【减少需要重复的开发代码量】
2017/01/19 Javascript
vue.js 1.x与2.0中js实时监听input值的变化
2017/03/15 Javascript
浅析 NodeJs 的几种文件路径
2017/06/07 NodeJs
vuejs手把手教你写一个完整的购物车实例代码
2017/07/06 Javascript
浅谈vuex之mutation和action的基本使用
2017/08/29 Javascript
详解vue 单页应用(spa)前端路由实现原理
2018/04/04 Javascript
vue+iview+less 实现换肤功能
2018/08/17 Javascript
vue实现select下拉显示隐藏功能
2019/09/30 Javascript
[04:04]DOTA2亚洲邀请赛比赛场馆&酒店全攻略
2017/03/23 DOTA
python按综合、销量排序抓取100页的淘宝商品列表信息
2018/02/24 Python
Python中的函数作用域
2018/05/07 Python
详解从Django Rest Framework响应中删除空字段
2019/01/11 Python
详解Python 定时框架 Apscheduler原理及安装过程
2019/06/14 Python
Python测试Kafka集群(pykafka)实例
2019/12/23 Python
Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例
2020/03/04 Python
详解background属性的8个属性值(面试题)
2020/11/02 HTML / CSS
带你认识HTML5中的WebSocket
2015/05/22 HTML / CSS
海淘母婴商城:国际妈咪
2016/07/23 全球购物
AJAX的优缺点都有什么
2015/08/18 面试题
二手房买卖协议书
2014/04/10 职场文书
结婚保证书
2015/01/16 职场文书
2015年中秋节演讲稿
2015/03/20 职场文书
大学宣传委员竞选稿
2015/11/19 职场文书
2019年健身俱乐部的创业计划书
2019/08/26 职场文书
导游词之广东佛山(南风古灶)
2019/09/24 职场文书
Js类的构建与继承案例详解
2021/09/15 Javascript