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 ...
随机推荐
- js控制文本框输入数字和小数点等
1.文本框只能输入数字代码(小数点也不能输入) <input onkeyup="this.value=this.value.replace(/\D/g,'')" onafte ...
- 02_Jquery_02_元素选择器
[简述] 元素选择器就是通过元素名来查询元素 $("elementName")这里就可以通过元素名来获取jquery元素了. 但与id选择器不同的是,名称相同的元素有很多,所以获取 ...
- Java Lambda简明教程(一)
Lambda表达式背景 许多热门的编程语言如今都有一个叫做lambda或者闭包的语言特性,包括比较经典的函数式编程语言Lisp,Scheme,也有稍微年轻的语言比如JavaScript,Python, ...
- WEB开发原则
1.最小权限原则,只允许用户做****,而不是"不允许用户做****"2.浏览器查看的是服务端代码的执行输出的文本,除非服务器有漏洞,否则浏览者无法查看 服务端的ASPX,CS代码 ...
- gitlab ActionView::Template::Error (undefined method `[]' for nil:NilClass): 500错误
Started GET "/mygroup/myproject/tree/master/MyDirectory" for 127.0.0.1 at 2014-10-22 22:42 ...
- 将选择的图片显示在listview中,并显示filename,path和type
if (openFileDialog1.ShowDialog() == DialogResult.OK) { listView1.Items.Clear(); string[] files = ope ...
- PL/SQL学习(一)
原文参考:http://plsql-tutorial.com/ 组成: 声明部分(可选) 执行部分(必选) 异常处理(可选) 声明: DECLARE 执行: ...
- JavaScript中将JSON的字符串解析成JSON数据格式
1.一种为使用eval()函数 var jsonObj=eval("("+data+")"); 2.使用Function对象来进行返回解析 var jsonst ...
- yarn资源管理器高可用性的实现
资源管理器高可用性 . The ResourceManager (RM) is responsible for tracking the resources in a cluster, and sch ...
- tomcat https 配置
以前基本上笔者对于安全性考虑的并不多,最近因为saas平台要开始逐渐推广,所以需要开始逐渐加强xss/crsf/https等措施以避免潜在的安全性风险.本文简单的记录下tomcat下https的配置. ...