使用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检测浏览器的实现代码
May 14 Javascript
jQuery ajax dataType值为text json探索分享
Sep 23 Javascript
JavaScript的面向对象编程基础
Aug 13 Javascript
jQuery滚动加载图片实现原理
Dec 14 Javascript
Validform+layer实现漂亮的表单验证特效
Jan 17 Javascript
js中new一个对象的过程
Feb 20 Javascript
CodeMirror js代码加亮使用总结
Mar 25 Javascript
vue实现全选和反选功能
Aug 31 Javascript
vue2.0 根据状态值进行样式的改变展示方法
Mar 13 Javascript
JS实现520 表白简单代码
May 21 Javascript
jQuery实现点击自身以外区域关闭弹出层功能完整示例【改进版】
Jul 31 jQuery
JS实现瀑布流效果
Mar 07 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获取访问者IP地址汇总
2015/04/24 PHP
实例讲解php数据访问
2016/05/09 PHP
php如何实现不借助IDE快速定位行数或者方法定义的文件和位置
2017/01/17 PHP
javascript实现的距离现在多长时间后的一个格式化的日期
2009/10/29 Javascript
JS替换文本域内的回车示例
2014/02/18 Javascript
jQuery调用ajax请求的常见方法汇总
2015/03/24 Javascript
js控制元素显示在屏幕固定位置及监听屏幕高度变化的方法
2015/08/11 Javascript
原生JS实现-星级评分系统的简单实例
2016/08/21 Javascript
Javascript计算二维数组重复值示例代码
2016/12/18 Javascript
javascript 注释代码的几种方法总结
2017/01/04 Javascript
canvas压缩图片转换成base64格式输出文件流
2017/03/09 Javascript
jQuery插件HighCharts实现的2D条状图效果示例【附demo源码下载】
2017/03/15 Javascript
webpack开发跨域问题解决办法
2017/08/03 Javascript
js单页hash路由原理与应用实战详解
2017/08/14 Javascript
JavaScript数据结构与算法之二叉树添加/删除节点操作示例
2019/03/01 Javascript
ES6 Object属性新的写法实例小结
2019/06/25 Javascript
微信小程序实现简单文字跑马灯
2020/05/26 Javascript
vue之封装多个组件调用同一接口的案例
2020/08/11 Javascript
Jquery 获取相同NAME 或者id删除行操作
2020/08/24 jQuery
python中使用OpenCV进行人脸检测的例子
2014/04/18 Python
Python编写检测数据库SA用户的方法
2014/07/11 Python
python3使用PyMysql连接mysql数据库实例
2017/02/07 Python
在Pycharm中调试Django项目程序的操作方法
2019/07/17 Python
浅谈tensorflow 中的图片读取和裁剪方式
2020/06/30 Python
HTML5 语音搜索只需一句代码
2013/01/03 HTML / CSS
使用纯HTML5编写一款网页上的时钟的代码分享
2015/11/16 HTML / CSS
萨克斯第五大道精品百货店: Saks Fifth Avenue
2017/04/28 全球购物
德国高端单身人士交友网站:ElitePartner
2018/12/02 全球购物
网络工程师的自我评价
2013/10/02 职场文书
纪念建党演讲稿范文
2014/01/13 职场文书
幼儿运动会邀请函
2014/01/17 职场文书
高中物理教学反思
2014/02/08 职场文书
增员口号大全
2014/06/18 职场文书
助学贷款贫困证明
2014/09/23 职场文书
给病人的慰问信
2015/03/23 职场文书
解决MySQL存储时间出现不一致的问题
2021/04/28 MySQL