使用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 相关文章推荐
extjs 学习笔记 四 带分页的grid
Oct 20 Javascript
jquery 实现二级/三级/多级联动菜单的思路及代码
Apr 08 Javascript
JS控制文本框textarea输入字数限制的方法
Jun 17 Javascript
jquery next nextAll nextUntil siblings的区别介绍
Oct 05 Javascript
JavaScript?Apple设备检测示例代码
Nov 15 Javascript
jquery 设置style:display的方法
Jan 29 Javascript
JS网页在线获取鼠标坐标值的方法
Feb 28 Javascript
JavaScript实现点击自动选择TextArea文本的方法
Jul 02 Javascript
jQuery EasyUI常用数据验证汇总
Sep 18 Javascript
Vue2.0使用过程常见的一些问题总结学习
Apr 10 Javascript
解决Layui 表单提交数据为空的问题
Aug 15 Javascript
vue-better-scroll 的使用实例代码详解
Dec 03 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 代码优化的42条建议 推荐
2009/09/25 PHP
php中使用Imagick实现图像直方图的实现代码
2011/08/30 PHP
php中rename函数用法分析
2014/11/15 PHP
PHP defined()函数的使用图文详解
2019/07/20 PHP
Yii框架分页技术实例分析
2019/08/30 PHP
Thinkphp 框架扩展之行为扩展原理与实现方法分析
2020/04/23 PHP
Javascript 作用域使用说明
2009/08/13 Javascript
Javascript 网页黑白效果实现代码(兼容IE/FF等)
2010/04/23 Javascript
ymPrompt的doHandler方法来实现获取子窗口返回值的方法
2010/06/25 Javascript
基于jquery跨浏览器显示的file上传控件
2011/10/24 Javascript
js单向链表的具体实现实例
2013/06/21 Javascript
JS调试必备的5个debug技巧
2014/03/07 Javascript
js生成验证码并直接在前端判断
2015/05/15 Javascript
AngularJS学习笔记之基本指令(init、repeat)
2015/06/16 Javascript
js+css实现文字散开重组动画特效代码分享
2015/08/21 Javascript
JavaScript数组的定义及数字操作技巧
2016/06/06 Javascript
JavaScript定义及输出螺旋矩阵的方法详解
2017/12/01 Javascript
node.js微信小程序配置消息推送的实现
2019/02/13 Javascript
JavaScript数组去重的几种方法
2019/04/07 Javascript
利用js-cookie实现前端设置缓存数据定时失效
2019/06/18 Javascript
js实现内置计时器
2019/12/16 Javascript
浅谈vuex为什么不建议在action中修改state
2020/02/02 Javascript
利用js canvas实现五子棋游戏
2020/10/11 Javascript
微信小程序实现首页弹出广告
2020/12/03 Javascript
python中datetime模块中strftime/strptime函数的使用
2018/07/03 Python
python BlockingScheduler定时任务及其他方式的实现
2019/09/19 Python
Python3标准库之functools管理函数的工具详解
2020/02/27 Python
pycharm解决关闭flask后依旧可以访问服务的问题
2020/04/03 Python
canvas拼图功能实现代码示例
2018/11/21 HTML / CSS
俄罗斯有趣和原创礼物网上商店:MagicMag
2019/08/01 全球购物
2014年社区植树节活动方案
2014/02/28 职场文书
计算机科学与技术专业求职信
2014/09/03 职场文书
2014年度党员自我评议
2014/09/13 职场文书
初中毕业生自我评价
2015/03/02 职场文书
2015年外贸业务员工作总结范文
2015/05/23 职场文书
Apache自带的ab压力测试工具的实现
2022/07/23 Servers