使用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 获取表单元素里面的值示例代码
Jul 28 Javascript
整理Javascript基础语法学习笔记
Nov 29 Javascript
Javascript动画效果(1)
Oct 11 Javascript
js移动端事件基础及常用事件库详解
Aug 15 Javascript
Three.js 再探 - 写一个微信跳一跳极简版游戏
Jan 04 Javascript
微信小程序App生命周期详解
Jan 31 Javascript
vue v-model实现自定义样式多选与单选功能
Jul 05 Javascript
Angular-UI Bootstrap组件实现警报功能
Jul 16 Javascript
微信小游戏之使用three.js 绘制一个旋转的三角形
Jun 10 Javascript
js表达式与运算符简单操作示例
Feb 15 Javascript
vue添加锚点,实现滚动页面时锚点添加相应的class操作
Aug 10 Javascript
详解Vue的options
May 15 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
PHP APC的安装与使用详解
2013/06/13 PHP
ThinkPHP实现动态包含文件的方法
2014/11/29 PHP
Tab页界面 用jQuery及Ajax技术实现(php后台)
2011/10/12 Javascript
js获取php变量的实现代码
2013/08/10 Javascript
jQuery的:parent选择器定义和用法
2014/07/01 Javascript
JavaScript判断数组是否包含指定元素的方法
2015/07/01 Javascript
jQuery中$this和$(this)的区别介绍(一看就懂)
2015/07/06 Javascript
jQuery模仿阿里云购买服务器选择购买时间长度的代码
2016/04/29 Javascript
JavaScript中的跨浏览器事件操作的基本方法整理
2016/05/20 Javascript
js removeChild 方法深入理解
2016/08/16 Javascript
总结十个Angular.js由浅入深的面试问题
2016/08/26 Javascript
js实现html table 行,列锁定的简单实例
2016/10/13 Javascript
jQuery图片轮播实现并封装(一)
2016/12/03 Javascript
vue.js加载新的内容(实例代码)
2017/06/01 Javascript
详解小程序云开发数据库
2019/05/20 Javascript
jstree中的checkbox默认选中和隐藏示例代码
2019/12/29 Javascript
使用JavaScript通过前端发送电子邮件
2020/05/22 Javascript
Ubuntu 14.04+Django 1.7.1+Nginx+uwsgi部署教程
2014/11/18 Python
Python守护进程和脚本单例运行详解
2017/01/06 Python
使用Python对MySQL数据操作
2017/04/06 Python
基于Python数据可视化利器Matplotlib,绘图入门篇,Pyplot详解
2017/10/13 Python
Python定时器实例代码
2017/11/01 Python
python3下使用cv2.imwrite存储带有中文路径图片的方法
2018/05/10 Python
python实现按首字母分类查找功能
2019/10/31 Python
TensorFlow实现checkpoint文件转换为pb文件
2020/02/10 Python
Keras:Unet网络实现多类语义分割方式
2020/06/11 Python
基于OpenCV的网络实时视频流传输的实现
2020/11/15 Python
django中ImageField的使用详解
2020/12/21 Python
Ashford台湾:以折扣价提供奢华的男女用表款
2019/12/04 全球购物
承诺书的格式范文
2014/03/28 职场文书
践行三严三实心得体会
2014/10/13 职场文书
第二批党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
婚宴邀请函
2015/01/30 职场文书
综合素质自我评价评语
2015/03/06 职场文书
党员志愿者服务倡议书
2015/04/29 职场文书
建党伟业电影观后感
2015/06/01 职场文书