使用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 相关文章推荐
与jquery serializeArray()一起使用的函数,主要来方便提交表单
Jan 31 Javascript
js动态切换图片的方法
Jan 20 Javascript
JavaScript通过使用onerror设置默认图像显示代替alt
Mar 01 Javascript
如何判断Javascript对象是否存在的简单实例
May 18 Javascript
Javascript必知必会(四)js类型转换
Jun 08 Javascript
JavaScript导航脚本判断当前导航
Jul 12 Javascript
js学习之----深入理解闭包
Nov 21 Javascript
使用JS实现气泡跟随鼠标移动的动画效果
Sep 16 Javascript
Vue中使用canvas方法总结
Feb 12 Javascript
详解vue 自定义组件使用v-model 及探究其中原理
Oct 11 Javascript
微信小程序实现下拉加载更多商品
Dec 29 Javascript
TS 类型收窄教程示例详解
Sep 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 第二节 数据类型之数组
2012/04/28 PHP
PHP按行读取文件时删除换行符的3种方法
2014/05/04 PHP
服务器迁移php版本不同可能诱发的问题
2015/12/22 PHP
PHP设计模式之工厂模式(Factory Pattern)的讲解
2019/03/21 PHP
JQuery 自定义CircleAnimation,Animate方法学习笔记
2011/07/10 Javascript
Egret引擎开发指南之编译项目
2014/09/03 Javascript
js实现仿Windows风格选项卡和按钮效果实例
2015/05/13 Javascript
Javascript中浏览器窗口的基本操作总结
2016/08/18 Javascript
vue自定义指令实现v-tap插件
2016/11/03 Javascript
基于vue2实现左滑删除功能
2017/11/28 Javascript
在react-router4中进行代码拆分的方法(基于webpack)
2018/03/08 Javascript
jQuery实现网页拼图游戏
2020/04/22 jQuery
利用d3.js实现蜂巢图表带动画效果
2019/09/03 Javascript
Weex开发之地图篇的具体使用
2019/10/16 Javascript
vue实现抽屉弹窗效果
2020/11/15 Javascript
使用beaker让Facebook的Bottle框架支持session功能
2015/04/23 Python
详解 Python中LEGB和闭包及装饰器
2017/08/03 Python
Scrapy爬虫实例讲解_校花网
2017/10/23 Python
python实现神经网络感知器算法
2017/12/20 Python
python3 遍历删除特定后缀名文件的方法
2018/04/23 Python
python中正则表达式 re.findall 用法
2018/10/23 Python
详解Python安装tesserocr遇到的各种问题及解决办法
2019/03/07 Python
python 求一个列表中所有元素的乘积实例
2019/06/11 Python
python中如何实现将数据分成训练集与测试集的方法
2019/09/13 Python
浅析Django中关于session的使用
2019/12/30 Python
Django权限控制的使用
2021/01/07 Python
标签和贴纸印刷:Lightning Labels
2018/03/22 全球购物
Bonami斯洛伐克:购买家具和家居饰品
2019/07/02 全球购物
社区七一党员活动方案
2014/01/25 职场文书
建筑个人求职信范文
2014/01/25 职场文书
公务员诚信承诺书
2014/05/26 职场文书
2014年教师学期工作总结
2014/11/08 职场文书
师德标兵先进事迹材料
2014/12/19 职场文书
个人学习总结范文
2015/02/15 职场文书
储备店长岗位职责
2015/04/14 职场文书
生活小常识广播稿
2015/08/19 职场文书