使用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 表单取值赋值的一些基本操作
Oct 11 Javascript
使用jQuery异步加载 JavaScript脚本解决方案
Apr 20 Javascript
jquery实现仿新浪微博带动画效果弹出层代码(可关闭、可拖动)
Oct 12 Javascript
JavaScript动态插入CSS的方法
Dec 10 Javascript
WordPress中利用AJAX异步获取评论用户头像的方法
Jan 08 Javascript
javascript数组对象常用api函数小结(连接,插入,删除,反转,排序等)
Sep 20 Javascript
vue.js 初体验之Chrome 插件开发实录
May 13 Javascript
vue快捷键与基础指令详解
Jun 01 Javascript
微信小程序使用swiper组件实现层叠轮播图
Nov 04 Javascript
我要点爆”微信小程序云开发之项目建立与我的页面功能实现
May 26 Javascript
详解vue中v-bind:style效果的自定义指令
Jan 21 Javascript
微信浏览器左上角返回按钮监听的实现
Mar 04 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
用mysql触发器自动更新memcache的实现代码
2009/10/11 PHP
CodeIgniter采用config控制的多语言实现根据浏览器语言自动转换功能
2014/07/18 PHP
使用PHP接受文件并获得其后缀名的方法
2015/08/05 PHP
Zend Framework教程之Application用法实例详解
2016/03/14 PHP
PHP 实现字符串翻转(包含中文汉字)的实现代码
2017/04/01 PHP
PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)实例详解
2018/04/20 PHP
不间断滚动JS打包类,基本可以实现所有的滚动效果,太强了
2007/12/08 Javascript
JavaScript中双叹号(!!)作用示例介绍
2014/04/10 Javascript
jquery文本框中的事件应用以输入邮箱为例
2014/05/06 Javascript
完美实现bootstrap分页查询
2015/12/09 Javascript
JS实现的倒计时效果实例(2则实例)
2015/12/23 Javascript
discuz表情的JS提取方法分析
2017/03/22 Javascript
Bootstrap Table中的多选框删除功能
2018/07/15 Javascript
vue router 源码概览案例分析
2018/10/09 Javascript
微信小程序实现发送模板消息功能示例【通过openid推送消息给用户】
2019/05/05 Javascript
js纯前端实现腾讯cos文件上传功能的示例代码
2019/05/14 Javascript
基于vue的video播放器的实现示例
2021/02/19 Vue.js
[00:32]DOTA2上海特级锦标赛 Ehome战队宣传片
2016/03/03 DOTA
Python实现的百度站长自动URL提交小工具
2014/06/27 Python
Python实现模拟登录及表单提交的方法
2015/07/25 Python
Python字符串处理实例详解
2017/05/18 Python
详解python编译器和解释器的区别
2019/06/24 Python
python不使用for计算两组、多个矩形两两间的iou方式
2020/01/18 Python
关于keras.layers.Conv1D的kernel_size参数使用介绍
2020/05/22 Python
Python中的With语句的使用及原理
2020/07/29 Python
python 实现Requests发送带cookies的请求
2021/02/08 Python
节省高达65%的城市景点费用:Go City
2019/07/06 全球购物
咖啡店的创业计划书,让你hold不住
2014/01/03 职场文书
模具专业毕业推荐信
2014/03/08 职场文书
奉献演讲稿范文
2014/05/21 职场文书
受资助学生感谢信
2015/01/21 职场文书
纪委立案决定书
2015/06/24 职场文书
2015年美容师个人工作总结
2015/10/14 职场文书
2016入党积极分子党课培训心得体会
2016/01/06 职场文书
Python机器学习之逻辑回归
2021/05/11 Python
Win11软件图标固定到任务栏
2022/04/19 数码科技