使用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 相关文章推荐
js实现两个值相加alert出来精确到指定位
Sep 25 Javascript
JS随机漂浮广告代码具体实例
Nov 19 Javascript
JS实现图片放大镜效果的方法
Feb 27 Javascript
jQuery下拉友情链接美化效果代码分享
Aug 26 Javascript
jQuery中trigger()与bind()用法分析
Dec 18 Javascript
AngularJS使用angular-formly进行表单验证
Dec 27 Javascript
Vue.js报错Failed to resolve filter问题的解决方法
May 25 Javascript
浅谈angular2 组件的生命周期钩子
Aug 12 Javascript
jQuery实现鼠标移入移出事件切换功能示例
Sep 06 jQuery
详解小程序如何避免多次点击,重复触发事件
Apr 08 Javascript
Vue 中 filter 与 computed 的区别与用法解析
Nov 21 Javascript
sharp.js安装过程中遇到的问题总结
Apr 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
PHP网页游戏学习之Xnova(ogame)源码解读(五)
2014/06/23 PHP
最新版本PHP 7 vs HHVM 多角度比较
2016/02/14 PHP
JS array 数组详解
2009/03/22 Javascript
JavaScript 语言的递归编程
2010/05/18 Javascript
Js判断参数(String,Array,Object)是否为undefined或者值为空
2013/11/04 Javascript
jQuery删除节点的三个方法即remove()detach()和empty()
2013/12/27 Javascript
用js判断输入是否为中文的函数
2014/03/10 Javascript
javascript编写实用的省市选择器
2015/02/12 Javascript
浅谈toLowerCase和toLocaleLowerCase的区别
2016/08/15 Javascript
fullCalendar中文API官方文档
2017/02/07 Javascript
js 将input框中的输入自动转化成半角大写(税号输入框)
2017/02/16 Javascript
ReactRouter的实现方法
2021/01/25 Javascript
Python字符串转换成浮点数函数分享
2015/07/24 Python
Python中is与==判断的区别
2017/03/28 Python
python 遍历字符串(含汉字)实例详解
2017/04/04 Python
Python提取PDF内容的方法(文本、图像、线条等)
2019/09/25 Python
python 字典访问的三种方法小结
2019/12/05 Python
Python实现Appium端口检测与释放的实现
2020/12/31 Python
python中编写函数并调用的知识点总结
2021/01/13 Python
css3实现的多级渐变下拉菜单导航效果代码
2015/08/31 HTML / CSS
html5 标签
2009/07/16 HTML / CSS
Kathmandu新西兰官网:新西兰户外运动品牌
2019/07/27 全球购物
Dr. Martens马汀博士德国官网:马丁靴鼻祖
2019/12/26 全球购物
德国富尔达运动鞋店:43einhalb
2020/12/25 全球购物
J2EE面试题
2016/03/14 面试题
机械设计及其自动化专业推荐信
2013/10/31 职场文书
护士实习鉴定范文
2013/12/22 职场文书
企业为何需要商业计划书
2013/12/26 职场文书
人力资源经理的岗位职责
2014/03/02 职场文书
婚庆司仪主持词
2014/03/15 职场文书
战友聚会主持词
2014/04/02 职场文书
公司授权委托书
2014/04/04 职场文书
技术支持岗位职责
2015/02/13 职场文书
《吸血鬼幸存者》新内容发布 追加多个全新模式
2022/04/07 其他游戏
Golang 切片(Slice)实现增删改查
2022/04/22 Golang
git stash(储藏)的用法总结
2022/06/25 Servers