使用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触发radio或checkbox的change事件
Dec 18 Javascript
JavaScript 学习笔记之变量及其作用域
Jan 14 Javascript
详细解读AngularJS中的表单验证编程
Jun 19 Javascript
javascript中Date format(js日期格式化)方法小结
Dec 17 Javascript
js判断上传文件后缀名是否合法
Jan 28 Javascript
jQuery 自定义下拉框(DropDown)附源码下载
Jul 22 Javascript
jquery事件绑定解绑机制源码解析
Sep 19 Javascript
谈谈因Vue.js引发关于getter和setter的思考
Dec 02 Javascript
原生js实现对Ajax的封装(仿jquery)
Jan 22 Javascript
Javascript中Promise的四种常用方法总结
Jul 14 Javascript
Angular实现响应式表单
Aug 04 Javascript
axios取消请求的实践记录分享
Sep 26 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
给海燕B411配件机起死回生配上件
2021/03/02 无线电
屏蔽机器人从你的网站搜取email地址的php代码
2012/11/14 PHP
PHP迭代与递归实现无限级分类
2017/08/28 PHP
js switch case default 的用法示例介绍
2013/10/23 Javascript
iframe子页面获取父页面元素的方法
2013/11/05 Javascript
js hover 定时器(实例代码)
2013/11/12 Javascript
Angular.js中ng-if、ng-show和ng-hide的区别介绍
2017/01/20 Javascript
nodejs模块nodemailer基本使用-邮件发送示例(支持附件)
2017/03/28 NodeJs
详解vue.js的devtools安装
2017/05/26 Javascript
利用ES6的Promise.all实现至少请求多长时间的实例
2017/08/28 Javascript
让你5分钟掌握9个JavaScript小技巧
2018/06/09 Javascript
[02:08]2018年度CS GO枪械皮肤设计大赛优秀作者-完美盛典
2018/12/16 DOTA
python 生成不重复的随机数的代码
2011/05/15 Python
linux系统使用python获取cpu信息脚本分享
2014/01/15 Python
安装ElasticSearch搜索工具并配置Python驱动的方法
2015/12/22 Python
python中异常捕获方法详解
2017/03/03 Python
解决python matplotlib imshow无法显示的问题
2018/05/24 Python
python基于http下载视频或音频
2018/06/20 Python
Python实现对文件进行单词划分并去重排序操作示例
2018/07/10 Python
解决python os.mkdir创建目录失败的问题
2018/10/16 Python
pyqt5之将textBrowser的内容写入txt文档的方法
2019/06/21 Python
使用pip安装python库的多种方式
2019/07/31 Python
django 连接数据库 sqlite的例子
2019/08/14 Python
分享PyCharm的几个使用技巧
2019/11/10 Python
python操作gitlab API过程解析
2019/12/27 Python
Python 3.8 新功能来一波(大部分人都不知道)
2020/03/11 Python
html5仿支付宝密码框的实现代码
2017/09/06 HTML / CSS
彪马英国官网:PUMA英国
2019/02/11 全球购物
2014年销售工作总结
2014/12/01 职场文书
2014年会计人员工作总结
2014/12/10 职场文书
运动会表扬稿
2015/01/16 职场文书
党支部工作总结2015
2015/04/01 职场文书
2015年资料员工作总结
2015/04/25 职场文书
2015年档案室工作总结
2015/05/23 职场文书
初三毕业感言
2015/07/31 职场文书
mysql insert 存在即不插入语法说明
2022/03/25 MySQL