使用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 相关文章推荐
PHP+jQuery+Ajax实现多图片上传效果
Mar 14 Javascript
微信小程序 教程之注册程序
Oct 17 Javascript
Angular.JS中select下拉框设置value的方法
Jun 20 Javascript
微信小程序实现YDUI的ScrollNav组件
Feb 02 Javascript
Vue父子组建的简单通信之控制开关Switch的实现
Jun 04 Javascript
微信小程序适配iphoneX的实现方法
Sep 18 Javascript
angularJs提交文本框数据到后台的方法
Oct 08 Javascript
Javascript实现动态时钟效果
Nov 17 Javascript
vue使用pdfjs显示PDF可复制的实现方法
Dec 14 Javascript
JS立即执行函数功能与用法分析
Jan 15 Javascript
微信小程序实现签到弹窗动画
Sep 21 Javascript
vue使用v-model进行跨组件绑定的基本实现方法
Apr 28 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
一个没有MYSQL数据库支持的简易留言本的编写
2006/10/09 PHP
PHP语言中global和$GLOBALS[]的分析 之二
2012/02/02 PHP
简单的方法让你的后台登录更加安全(php中加session验证)
2012/08/22 PHP
php根据操作系统转换文件名大小写的方法
2014/02/24 PHP
PHP与SQL语句写一句话木马总结
2019/10/11 PHP
javascript 年月日联动实现核心代码
2009/12/21 Javascript
JavaScript 面向对象的之私有成员和公开成员
2010/05/04 Javascript
javascript开发随笔一 preventDefault的必要
2011/11/25 Javascript
JS中for循序中延迟加载动态效果的具体实现
2013/08/18 Javascript
简单的邮箱登陆的提示效果类似于yahoo邮箱
2014/02/26 Javascript
jQuery移除元素自动解绑事件实现思路及代码
2014/05/31 Javascript
js监听鼠标事件控制textarea输入字符串的个数
2014/09/29 Javascript
基于JavaScript如何制作遮罩层对话框
2016/01/26 Javascript
辨析JavaScript中的Undefined类型与null类型
2016/05/26 Javascript
Bootstrap优化站点资源、响应式图片、传送带使用详解3
2016/10/14 Javascript
Webpack+Vue如何导入Jquery和Jquery的第三方插件
2017/02/20 Javascript
Angularjs修改密码的实例代码
2017/05/26 Javascript
关于JavaScript语句后面的分号问题
2017/12/07 Javascript
从零开始搭建vue移动端项目到上线的步骤
2018/10/15 Javascript
json字符串对象转换代码实例
2019/09/28 Javascript
微信小程序实现页面左右滑动
2020/11/16 Javascript
Python实现购物评论文本情感分析操作【基于中文文本挖掘库snownlp】
2018/08/07 Python
Python中反射和描述器总结
2018/09/23 Python
推荐技术人员一款Python开源库(造数据神器)
2020/07/08 Python
matplotlib绘制正余弦曲线图的实现
2021/02/22 Python
CSS3为背景图设置遮罩并解决遮罩样式继承问题
2020/06/22 HTML / CSS
西班牙在线宠物商店:zooplus.es
2017/02/24 全球购物
武汉某公司的C#笔试题面试题
2015/12/25 面试题
一套C#面试题
2013/10/09 面试题
DELPHI面试题研发笔试试卷
2015/11/08 面试题
专营店会计助理岗位职责
2013/11/29 职场文书
记者岗位职责
2014/01/06 职场文书
珍珠奶茶店创业计划书
2014/01/11 职场文书
机电一体化求职信
2014/03/10 职场文书
各类场合主持词开场白范文集锦
2019/08/16 职场文书
Go 语言中 20 个占位符的整理
2021/10/16 Golang