使用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 相关文章推荐
常用js脚本
Dec 03 Javascript
不错的JS中变量相关的细节分析
Aug 13 Javascript
jquery 学习之二 属性(类)
Nov 25 Javascript
标题过长使用javascript按字节截取字符串
Apr 24 Javascript
jQuery 过滤方法filter()选择具有特殊属性的元素
Jun 15 Javascript
js实现的Easy Tabs选项卡用法实例
Sep 06 Javascript
避免jQuery名字冲突 noConflict()方法
Jul 30 Javascript
JavaScript瀑布流布局实现代码
May 06 Javascript
探讨Vue.js的组件和模板
Oct 27 Javascript
详解Angular系列之变化检测(Change Detection)
Feb 26 Javascript
angularjs数组判断是否含有某个元素的实例
Feb 27 Javascript
JS定义函数的几种常用方法小结
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
实测在class的function中include的文件中非php的global全局环境
2013/07/15 PHP
PHP小教程之实现链表
2014/06/09 PHP
PHP获取ip对应地区和使用网络类型的方法
2015/03/11 PHP
PHP获取毫秒级时间戳的方法
2015/04/15 PHP
如何使用GDB调试PHP程序
2015/12/08 PHP
laravel5.6框架操作数据curd写法(查询构建器)实例分析
2020/01/26 PHP
Array.slice()与Array.splice()的返回值类型
2006/10/09 Javascript
利用js对象弹出一个层
2008/03/26 Javascript
JavaScript中获取元素索引的函数
2010/09/10 Javascript
为radio类型的INPUT添加客户端脚本(附加实现JS来禁用onClick事件思路代码)
2010/11/11 Javascript
javascript 终止函数执行操作
2014/02/14 Javascript
小议JavaScript中Generator和Iterator的使用
2015/07/29 Javascript
JavaScript ParseFloat()方法
2015/12/18 Javascript
Javascript将JSON日期格式化
2016/08/23 Javascript
vue实现列表的添加点击
2016/12/29 Javascript
Node.js数据库操作之连接MySQL数据库(一)
2017/03/04 Javascript
webpack学习教程之前端性能优化总结
2017/12/05 Javascript
vue 自定义全局方法,在组件里面的使用介绍
2018/02/28 Javascript
微信小程序开发问题之wx.previewImage
2018/12/25 Javascript
JavaScript设计模式之装饰者模式实例详解
2019/01/17 Javascript
vue使用nprogress实现进度条
2019/12/09 Javascript
js动态生成表格(节点操作)
2021/01/12 Javascript
python决策树之CART分类回归树详解
2017/12/20 Python
python事件驱动event实现详解
2018/11/21 Python
利用python绘制数据曲线图的实现
2020/04/09 Python
python实现与redis交互操作详解
2020/04/21 Python
在django中form的label和verbose name的区别说明
2020/05/20 Python
智能旅行箱:Horizn Studios
2018/04/30 全球购物
美国电子产品主要品牌的授权在线零售商:DataVision
2019/03/23 全球购物
计算机专业个人简短的自我评价
2013/10/23 职场文书
餐厅总厨求职信
2014/03/04 职场文书
环保倡议书范文
2014/05/12 职场文书
警察群众路线整改措施
2014/09/26 职场文书
杭州黄龙洞导游词
2015/02/10 职场文书
2015年服务员工作总结
2015/04/08 职场文书
python利用while求100内的整数和方式
2021/11/07 Python