使用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的12个网站推荐
Apr 28 Javascript
自定义一个jquery插件[鼠标悬浮时候 出现说明label]
Jun 27 Javascript
jQuery EasyUI API 中文文档 - Pagination分页
Sep 29 Javascript
js 获取radio按钮值的实例
Aug 17 Javascript
IE中JS跳转丢失referrer问题的2个解决方法
Jul 18 Javascript
基于JS实现简单的样式切换效果代码
Sep 04 Javascript
跟我学习javascript的异步脚本加载
Nov 20 Javascript
jQuery 弹出层插件(推荐)
May 24 Javascript
Vue2单一事件管理组件通信
May 09 Javascript
详解vue添加删除元素的方法
Jun 30 Javascript
Vue-Cli 3.0 中配置高德地图的两种方式
Jun 19 Javascript
一文带你理解vue创建一个后台管理系统流程(Vue+Element)
May 18 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
PHP实现的比较完善的购物车类
2014/12/02 PHP
thinkPHP中验证码的简单使用方法
2015/12/26 PHP
PHP中new static()与new self()的比较
2016/08/19 PHP
PHP+Oracle本地开发环境搭建方法详解
2019/04/01 PHP
?牟┛途W扣了一??效果出?? target=
2007/05/27 Javascript
jqPlot jquery的页面图表绘制工具
2009/07/25 Javascript
分享14个很酷的jQuery导航菜单插件
2011/04/25 Javascript
Javascript 检测键盘按键信息及键码值对应介绍
2013/01/03 Javascript
jQuery实现图片放大预览实现原理及代码
2013/09/12 Javascript
用unescape反编码得出汉字示例
2014/04/24 Javascript
php读取sqlite数据库入门实例代码
2014/06/25 Javascript
jQuery EasyUI datagrid实现本地分页的方法
2015/02/13 Javascript
Bootstrap导航条鼠标悬停下拉菜单
2017/01/04 Javascript
js实现年月日表单三级联动
2020/04/17 Javascript
使用jQuery实现两个div中按钮互换位置的实例代码
2017/09/21 jQuery
详解element-ui设置下拉选择切换必填和非必填
2019/06/17 Javascript
vue中实现点击按钮滚动到页面对应位置的方法(使用c3平滑属性实现)
2019/12/29 Javascript
微信小程序自定义菜单切换栏tabbar组件代码实例
2019/12/30 Javascript
Python Threading 线程/互斥锁/死锁/GIL锁
2019/07/21 Python
python随机数分布random均匀分布实例
2019/11/27 Python
tensorflow获取预训练模型某层参数并赋值到当前网络指定层方式
2020/01/24 Python
Pycharm激活码激活两种快速方式(附最新激活码和插件)
2020/03/12 Python
Python3.9新特性详解
2020/10/10 Python
Python ConfigParser模块的使用示例
2020/10/12 Python
CSS3简单实现照片墙
2014/12/12 HTML / CSS
校园门卫岗位职责
2013/12/09 职场文书
会计专业的自荐信
2013/12/12 职场文书
工程质量承诺书范文
2014/03/27 职场文书
《穷人》教学反思
2014/04/08 职场文书
学校2014重阳节活动策划方案
2014/09/16 职场文书
学习三严三实心得体会
2014/10/13 职场文书
奖学金个人总结
2015/03/04 职场文书
2019中小学生安全过暑期倡议书
2019/06/24 职场文书
7个你应该知道的JS原生错误类型
2021/04/29 Javascript
React中的Context应用场景分析
2021/06/11 Javascript
sql server 累计求和实现代码
2022/02/28 SQL Server