MVC批量导出数据方法
近段时间做了个数据平台,其中涉及到批量导出CSV格式数据的业务,主要使用了部分视图和视图之间传值等知识点,今天做了下整理,特此分享下:
主要分为四步:
1:要打印的数据格式陈列View;
2:自定义导出表头View呈现,在通过 @{Html.RenderAction(string actionName,object routeValues);}将步骤1的数据整合进来;
3:导出页面调用通用的导出方法,通过传参数,传视图名,获取到要导出的数据;
4:导出成指定格式数据。

下面开始说明详细导出流程,为了便于理解,从导出页面开始:
导出页面,已经查询到符合条件的所有数据了,然后这是导出按钮响应的操作:点击按钮【导出CSV】调用Export_DataInfo方法,如下所示

通用导出方法 Export_Datainfo :

通用方法中的RenderPartialViewTostring和ExportCSV方法:


-------------------------------------------------------------------------华丽分割线-------------------------------------------------------------
附件:
DayData_OutPutData:
@{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.Append("日期").Append(",").Append("列名1").Append(",,").Append("列名").Append(",,").Append("列名2").Append(",,")
.Append("列名3").Append(",,,,,,").Append("列名4").Append(",,,,,,,,").Append("列名5").Append(",,,,").Append("\n");
sb.Append(",").Append("列名6").Append(",").Append("列名7")
.Append(",").Append("列名8").Append(",").Append("列名9")
.Append(",").Append("列名10").Append(",").Append("列名11")
.Append(",").Append("列名12").Append(",").Append("列名13").Append(",").Append("列名14").Append(",").Append("列名15").Append(",").Append("列名16").Append(",").Append("列名17")
.Append(",").Append("列名18").Append(",").Append("列名19").Append(",").Append("列名20").Append(",").Append("列名21").Append(",").Append("列名22").Append(",").Append("列名23").Append(",").Append("列名24").Append(",").Append("列名25")
.Append(",").Append("列名26").Append(",").Append("列名27").Append(",").Append("列名28").Append(",").Append("列名29")
.Append("\n");
@sb.ToString()
}
@{Html.RenderAction("OutPutData_DayData", new
{
gameId = (int)ViewData["gameId"],
startdate = (string)ViewData["startdate"],
enddate = (string)ViewData["enddate"],
pageNum = ,
pageSize = ,
types = (string)ViewData["types"],
});}
导出公共方法:
/// <summary>
/// 通用导出方法
/// </summary>
/// <returns></returns>
[HttpPost]
public ActionResult Export_DataInfo(int gameId, string partialViewName, string startdate, string enddate, string fileName, string types, int dataType = )
{
Game game = gamebll.getGameById(gameId);
string text = "";
/* RenderPartialViewToString 将视图内容转化成string */
text = RenderPartialViewToString(this, partialViewName, gameId, startdate, enddate, dataType, types);
/* 将string导出成指定格式 */
return ExportCSV(text, "application/ms-excel", game.Name + fileName);
}
导出实现方法:
/// <summary>
/// 将视图内容转换成string
/// </summary>
/// <returns></returns>
protected string RenderPartialViewToString(Controller controller,string partialViewName,int gameId,string startdate,string enddate,int dataType,string types)
{
IView view = ViewEngines.Engines.FindPartialView(controller.ControllerContext, partialViewName).View;
ViewDataDictionary dicts =new ViewDataDictionary();
dicts.Add("gameId", gameId);
dicts.Add("startdate",startdate);
dicts.Add("enddate", enddate);
dicts.Add("dataType", dataType);//道具取前20位时,用来区别 日、周、月
dicts.Add("types", types);
using (System.IO.StringWriter writer = new System.IO.StringWriter())
{
ViewContext viewContext = new ViewContext(controller.ControllerContext, view, dicts, controller.TempData, writer);
viewContext.View.Render(viewContext, writer);
return writer.ToString();
}
}
/// <summary>
/// 导出方法
/// </summary>
/// <returns></returns>
public ActionResult ExportCSV(string contentStr, string contentType, string fileName)
{
byte[] fileContents = System.Text.Encoding.Default.GetBytes(contentStr);
var fileStream = new System.IO.MemoryStream(fileContents); return File(fileStream, contentType, System.Web.HttpContext.Current.Request.Browser.Browser.ToUpper() == "FIREFOX" ? fileName : Server.UrlEncode(fileName));
}
MVC批量导出数据方法的更多相关文章
- java操作Excel之POI(5)利用POI实现使用模板批量导出数据
后台导出方法: 在源文件夹src下面放个准备好的模板:/com/cy/template/userExportTemplate.xls,这个模板有头部一行: /** * 后台导出方法 * 利用POI实现 ...
- POI操作Excel(批量导出数据/下载excel)
目录 1.第一个demo:创建工作簿,创建sheet页,创建单元格 2.创建一个时间格式的单元格 3.遍历工作簿的行和列并获取单元格内容 4.文本提取 5.单元格对齐方式 ...
- PLSQL导入/导出数据方法
PLSQL导入/导出数据方法 PLSQL导入/导出数据方法 以前导数据库信息的时候,总是会先开启sql窗口,把自己手写的建表文件复制进去,然后再导入数据信息. 今天突然懒得去找以前的建表文件,而想用S ...
- C# 批量插入数据方法
批量插入数据方法 void InsertTwo(List<CourseArrangeInfo> dtF) { Stopwatch watch = new Stopwatch(); watc ...
- PHP批量导出数据为excel表格
之前用插件phoexcel写过批量导入数据,现在用到了批量导出,就记录一下,这次批量导出没用插件,是写出一个表格,直接输出 //$teacherList 是从数据库查出来的二维数组 $execlnam ...
- MySql导入导出数据方法
导出全库备份到本地的目录 mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 --routines --default-character-set=utf8 ...
- net core天马行空系列-各大数据库快速批量插入数据方法汇总
1.前言 hi,大家好,我是三合.我是怎么想起写一篇关于数据库快速批量插入的博客的呢?事情起源于我们工作中的一个需求,简单来说,就是有一个定时任务,从数据库里获取大量数据,在应用层面经过处理后再把结果 ...
- oracle多种导入导出数据方法
dmp格式: 1.dmp格式的导出可以通过客户端工具(PL/SQL)操作来完成,通过菜单栏---->Tools---->Export Tables,然后设置勾选相应参数即可,rows代表是 ...
- Servlet Struts2 SpringMVC 获取参数与导出数据 方法比较
servlet中通过request.getParameter()从网页获取参数 通过request session servletContext几个域对象的setAttribute(String ,O ...
随机推荐
- MVVM学习笔记
MVVM学习笔记 1.MVVM的简介 MVVM模式是Model-View-ViewModel模式的简称,也就是由模型(Model).视图(View).视图模型(ViewModel),其目的是为了实现将 ...
- switch case实现两个数的算术运算
方法一: package com.liaojianya.chapter1; import java.util.Scanner; public class SwitchDemo1 { public st ...
- 01_反射_04_反射类的main方法
[User.java] package com.Higgin.reflect; public class User { public User(){ System.out.println(" ...
- 17_AOP入门准备_Salay案例(利用动态代理)
[案例分析] 查看Salary: 1.启动日志 2.启动安全性的框架 3.检查权限:如果有查看工资的权限,则查看工资,否则提示"权限不足" [工厂截图] [SalaryManage ...
- 配置iSCSI
先查下yum list | grep iscsi, 存在iscsi包, 进行安装:yum install iscsi-initiator-utils.x86_64, cat /etc/iscsi/in ...
- P1417 烹调方案
P1417 烹调方案 题目提供者tinylic 标签 动态规划 难度 普及+/提高 题目背景 由于你的帮助,火星只遭受了最小的损失.但gw懒得重建家园了,就造了一艘飞船飞向遥远的earth星.不过飞船 ...
- STL之优先队列
STL 中优先队列的使用方法(priority_queu) 基本操作: empty() 如果队列为空返回真 pop() 删除对顶元素 push() 加入一个元素 size() 返回优先队列中拥有的元素 ...
- C程序的构成及动态内存分配
对一个程序,通常的理解就是,源码编译成机器代码,然后通过机器解释运行.不过是怎样编译成机器代码,和怎样运行的,无疑是个值得探讨的问题.怎样编译成机器代码,过程就是源码的编译.链接,编译器做了这些事.而 ...
- 如何在Html的div+css中去除<li>标签前面小黑点,和ul、LI部分属性方法
div是很多人做网站都会用到的,但在显示效果时前面总是会有一个小黑点,这个效果很多人不想要,但又不知到如何去除,然而我们可以用以下方法来清除. 1.在CSS中写入代码.找到相关性的CSS,在..li和 ...
- Redis — CentOS6.4安装Redis以及安装PHP客户端phpredis
一.安装Redis 1.下载安装包 wget http://download.redis.io/releases/redis-2.8.6.tar.gz 2.解压包 tar xzf redis-2.8. ...