使用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 相关文章推荐
跟着JQuery API学Jquery 之三 筛选
Apr 09 Javascript
JSON 和 JavaScript eval使用说明
Jun 13 Javascript
jQuery实现设置、移除文本框默认值功能
Jan 13 Javascript
JQuery中$.each 和$(selector).each()的区别详解
Mar 13 Javascript
基于AngularJS+HTML+Groovy实现登录功能
Feb 17 Javascript
Ajax实现不刷新取最新商品
Mar 01 Javascript
Bootstrap 设置datetimepicker在屏幕上面弹出设置方法
Mar 21 Javascript
面包屑导航详解
Dec 07 Javascript
jQuery操作cookie的示例代码
Jun 05 jQuery
p5.js临摹动态图形实现方法详解
Oct 23 Javascript
微信小程序在text文本实现多种字体样式
Nov 08 Javascript
vue自动添加浏览器兼容前后缀操作
Aug 13 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操作文件方法问答
2007/03/16 PHP
php中mysql模块部分功能的简单封装
2011/09/30 PHP
php二分查找二种实现示例
2014/03/12 PHP
Laravel与CI框架中截取字符串函数
2016/05/08 PHP
php添加数据到xml文件的简单例子
2016/09/08 PHP
PHP清除缓存的几种方法总结
2017/09/12 PHP
JavaScript Chart 插件整理
2010/06/18 Javascript
JavaScript ( (__ = !$ + $)[+$] + ({} + $)[_/_] +({} + $)[_/_] )
2011/02/25 Javascript
jquery时间下拉框小例子
2013/04/15 Javascript
IE7浏览器窗口大小改变事件执行多次bug及IE6/IE7/IE8下resize问题
2015/08/21 Javascript
基于javascript实现根据身份证号码识别性别和年龄
2016/01/22 Javascript
AngularJS压缩JS技巧分析
2016/11/08 Javascript
Angular.JS内置服务$http对数据库的增删改使用教程
2017/05/07 Javascript
vue3.0 CLI - 2.5 - 了解组件的三维
2018/09/14 Javascript
微信小程序实现判断是分享到群还是个人功能示例
2019/05/03 Javascript
原生javascript制作的拼图游戏实现方法详解
2020/02/23 Javascript
浅谈vue中document.getElementById()拿到的是原值的问题
2020/07/26 Javascript
uniapp开发小程序实现滑动页面控制元素的显示和隐藏效果
2020/12/10 Javascript
[33:39]DOTA2上海特级锦标赛C组小组赛#2 LGD VS Newbee第二局
2016/02/27 DOTA
Python 字符串操作方法大全
2014/03/11 Python
python使用ctypes模块调用windowsapi获取系统版本示例
2014/04/17 Python
python处理圆角图片、圆形图片的例子
2014/04/25 Python
Python装饰器decorator用法实例
2014/11/10 Python
Python的类实例属性访问规则探讨
2015/01/30 Python
介绍Python中的一些高级编程技巧
2015/04/02 Python
python批量查询、汉字去重处理CSV文件
2018/05/31 Python
利用arcgis的python读取要素的X,Y方法
2018/12/22 Python
python地震数据可视化详解
2019/06/18 Python
关于Python 的简单栅格图像边界提取方法
2019/07/05 Python
几款Python编译器比较与推荐(小结)
2020/10/15 Python
Django haystack实现全文搜索代码示例
2020/11/28 Python
LTD Commodities:礼品,独特发现,家居装饰,家用器皿
2017/08/11 全球购物
娇韵诗香港官网:Clarins香港
2020/08/13 全球购物
自我评价正确写法范文
2013/12/10 职场文书
五月的鲜花活动方案
2014/08/21 职场文书
交通事故委托书范本(2篇)
2014/09/21 职场文书