近段时间做了个数据平台,其中涉及到批量导出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批量导出数据方法的更多相关文章

  1. java操作Excel之POI(5)利用POI实现使用模板批量导出数据

    后台导出方法: 在源文件夹src下面放个准备好的模板:/com/cy/template/userExportTemplate.xls,这个模板有头部一行: /** * 后台导出方法 * 利用POI实现 ...

  2. POI操作Excel(批量导出数据/下载excel)

    目录 1.第一个demo:创建工作簿,创建sheet页,创建单元格    2.创建一个时间格式的单元格    3.遍历工作簿的行和列并获取单元格内容    4.文本提取    5.单元格对齐方式    ...

  3. PLSQL导入/导出数据方法

    PLSQL导入/导出数据方法 PLSQL导入/导出数据方法 以前导数据库信息的时候,总是会先开启sql窗口,把自己手写的建表文件复制进去,然后再导入数据信息. 今天突然懒得去找以前的建表文件,而想用S ...

  4. C# 批量插入数据方法

    批量插入数据方法 void InsertTwo(List<CourseArrangeInfo> dtF) { Stopwatch watch = new Stopwatch(); watc ...

  5. PHP批量导出数据为excel表格

    之前用插件phoexcel写过批量导入数据,现在用到了批量导出,就记录一下,这次批量导出没用插件,是写出一个表格,直接输出 //$teacherList 是从数据库查出来的二维数组 $execlnam ...

  6. MySql导入导出数据方法

    导出全库备份到本地的目录 mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 --routines --default-character-set=utf8 ...

  7. net core天马行空系列-各大数据库快速批量插入数据方法汇总

    1.前言 hi,大家好,我是三合.我是怎么想起写一篇关于数据库快速批量插入的博客的呢?事情起源于我们工作中的一个需求,简单来说,就是有一个定时任务,从数据库里获取大量数据,在应用层面经过处理后再把结果 ...

  8. oracle多种导入导出数据方法

    dmp格式: 1.dmp格式的导出可以通过客户端工具(PL/SQL)操作来完成,通过菜单栏---->Tools---->Export Tables,然后设置勾选相应参数即可,rows代表是 ...

  9. Servlet Struts2 SpringMVC 获取参数与导出数据 方法比较

    servlet中通过request.getParameter()从网页获取参数 通过request session servletContext几个域对象的setAttribute(String ,O ...

随机推荐

  1. iOS 添加占位符

    添加占位符: 首先占位符的大小要比textView 的大小要小一些 1.添加一个取消键盘的通知 2.添加一个代理事件 1. // removeKeyBoard 添加通知收回键盘 [[NSNotific ...

  2. Codevs 1217 借教室 2012年NOIP全国联赛提高组

    1217 借教室 2012年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 在大学期间,经常需要租借教 ...

  3. python 访问php程序,实现定时

    #!/usr/bin/python #test2.py import sys import urllib2 j = True jj = 1##########用于统计,所以分页, url = 'htt ...

  4. Flume用来收集日志,zeppelin用来展示

    Flume:Flume是一个分布式,可依赖的,用于高效率的收集.聚类.移动大量数据的服务.Flume使用基于流数据的简单而且可扩展的架构.由于拥有可调的依赖机制和许多故障恢复机制,Flume是健壮而且 ...

  5. 在 IIS MIME 类型中添加 md 扩展名

    最近在了解 Knowledge Base (知识库)的内容,对两个平台比较感兴趣,一个是 Raneto,一个是 MDwiki,两者都是使用md文件作为内容存储. 需要注意的是,使用IIS部署网站后,需 ...

  6. 使用ajax和history.pushState无刷新改变页面URL onpopstate(转)

    Javascript代码 var htmlData1 = $.ajax(    {    url: "/getXXXResponse",    async: false }).re ...

  7. Xcode7 修改bundle identifier

    Xcode 7 与之前的版本在修改bundle identifier的时候一点需要注意: 除了需要在.plist文件中修改, 还需要在 build setting中的 Product Bundle I ...

  8. iOS 改变UILabel部分颜色

    //协议 UILabel *xieLabel = [[UILabel alloc] init]; xieLabel.textColor = TextGrayColor; xieLabel.font = ...

  9. ipad在非viewport 1:1下缩放问题

    1.最小会有980宽度,小于980应设置viewport 2.fix元素使用100%指定宽度时,默认会以min-width或980作为尺寸,可以选择给定与页面缩放时触发定宽来设置宽度,或设置设置bod ...

  10. 第 1 章 策略模式【Strategy Pattern】

    第 1 章 策略模式[Strategy Pattern] 以下内容出自: 24种设计模式介绍与6大设计原则.pdf 刘备要到江东娶老婆了,走之前诸葛亮给赵云(伴郎)三个锦囊妙计,说是按天机拆开解决棘手 ...