使用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 相关文章推荐
ichart.js绘制虚线、平均分虚线效果的实现代码
May 05 Javascript
Javascript删除指定元素节点的方法
Jun 21 Javascript
JavaScript的变量声明提升问题浅析(Hoisting)
Nov 30 Javascript
详解js的异步编程技术的方法
Feb 09 Javascript
JS模拟超市简易收银台小程序代码解析
Aug 18 Javascript
JavaScript定义函数的三种实现方法
Sep 23 Javascript
纯JS实现的读取excel文件内容功能示例【支持所有浏览器】
Jun 23 Javascript
微信小程序实现选项卡效果
Nov 06 Javascript
jquery实现Ajax请求的几种常见方式总结
May 28 jQuery
js回溯法计算最佳旅行线路代码实例
Sep 11 Javascript
vue自定义正在加载动画的例子
Nov 14 Javascript
浅谈vuex为什么不建议在action中修改state
Feb 02 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
实时抓取YAHOO股票报价的代码
2006/10/09 PHP
PHP保留两位小数并且四舍五入及不四舍五入的方法
2013/09/22 PHP
php中unserialize返回false的解决方法
2014/09/22 PHP
CodeIgniter集成smarty的方法详解
2016/05/26 PHP
PHP 闭包详解及实例代码
2016/09/28 PHP
支付宝支付开发――当面付条码支付和扫码支付实例
2016/11/04 PHP
PHP实现针对日期,月数,天数,周数,小时,分,秒等的加减运算示例【基于strtotime】
2017/04/19 PHP
php变量与字符串的增删改查操作示例
2020/05/07 PHP
javascript笔试题目附答案@20081025_jb51.net
2008/10/26 Javascript
javascript history对象(历史记录)使用方法(实现浏览器前进后退)
2014/01/07 Javascript
你可能不知道的JavaScript的new Function()方法
2014/04/17 Javascript
浅谈JavaScript函数节流
2014/12/09 Javascript
jQuery $.each遍历对象、数组用法实例
2015/04/16 Javascript
jquery插件validation实现验证身份证号等
2015/06/04 Javascript
jQuery 调用WebService 实例讲解
2016/06/28 Javascript
判断js的Array和Object的实现方法
2016/08/29 Javascript
JavaScript 字符串常用操作小结(非常实用)
2016/11/30 Javascript
微信小程序实战之自定义toast(6)
2017/04/18 Javascript
js实现文字列表无缝滚动效果
2017/06/23 Javascript
laydate时间日历插件使用方法详解
2018/11/14 Javascript
vue使用pdfjs显示PDF可复制的实现方法
2018/12/14 Javascript
JavaScript闭包与作用域链实例分析
2019/01/21 Javascript
[38:51]2014 DOTA2国际邀请赛中国区预选赛 Orenda VS LGD-CDEC
2014/05/22 DOTA
Python自定义函数的创建、调用和函数的参数详解
2014/03/11 Python
Python调用C/C++动态链接库的方法详解
2014/07/22 Python
Python+Pandas 获取数据库并加入DataFrame的实例
2018/07/25 Python
python实现爬山算法的思路详解
2019/04/09 Python
在python中将list分段并保存为array类型的方法
2019/07/15 Python
Tensorflow不支持AVX2指令集的解决方法
2020/02/03 Python
html5播放视频且动态截图实现步骤与代码(支持safari其他未测试)
2013/01/06 HTML / CSS
html5 乒乓球(碰撞检测)实例二
2013/07/25 HTML / CSS
同学会邀请书大全
2014/01/12 职场文书
护士试用期自我鉴定
2014/02/08 职场文书
干部作风建设年活动剖析材料
2014/10/23 职场文书
如何用python反转图片,视频
2021/04/24 Python
Python爬虫中urllib3与urllib的区别是什么
2021/07/21 Python