ASP.NET MVC 拓展ViewResult实现word文档下载
最近项目中有同事用到word文档导出功能,遇到了一些导出失败问题,帮其看了下解决问题的同事,看了下之前的代码发现几个问题:
- 代码编写不规范,word导出功能未收口
- 重复代码导出都是
- 实现逻辑比较复杂,不易于维护及使用
在帮其解决问题后,写了下面这个ViewResult拓展,依赖Razor视图,能够直接转换页面为word文档,但是不支持外联样式表,样式可以定义在<head>头部
废话不多说,直接上代码:
|
public { public
public WordFileResult(object model, string viewName, string fileName) { ViewData = new ViewName = viewName; FileName = fileName; }
public WordFileResult() : this(new {
}
public WordFileResult(string fileName) : this(new {
}
public WordFileResult(object model) : this(model, null, null) {
}
public WordFileResult(object model, string fileName) : this(model, null, fileName) {
}
protected { context.HttpContext.Response.Charset = "utf-8"; context.HttpContext.Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8"); if (string.IsNullOrWhiteSpace(FileName)) { FileName = ViewName; } context.HttpContext.Response.AppendHeader("Content-Disposition", string.Format("filename={0}.doc", FileName)); context.HttpContext.Response.ContentType = "application/msword"; ViewEngineResult result = ViewEngineCollection.FindView(context, ViewName, string.Empty); if (result.View != null) { return result; } return } }
public { public { return }
public { return }
public { return }
public { return }
} |
使用方式比较简单:
- 定义视图,使用Razor视图布局word内容,
|
@using RazorWord.Models @model List<LoginViewModel> @{ Layout = null; }
<!DOCTYPE html>
<html> <head> <meta name="viewport" content="width=device-width" /> <title>Export</title> <style type="text/css"> .table td, .table th { background-color: #fff !important; }
.table { border-collapse: collapse !important; background-color: #ffffff; width: 100%; margin-bottom: 20px; }
.table thead > tr > th, .table tbody > tr > th, .table tfoot > tr > th, .table thead > tr > td, .table tbody > tr > td, .table tfoot > tr > td { padding: 8px; line-height: 1.428571429; vertical-align: top; border-top: 1px solid #dddddd; }
.table thead > tr > th { vertical-align: bottom; border-bottom: 2px solid #dddddd; } </style> </head> <body> <div> <table class="table"> <tr> <th>电子邮件</th> <th>密码</th> <th>是否记住密码</th> </tr> @foreach (LoginViewModel item in Model) { <tr> <td>@item.Email</td> <td>@item.Password]</td> <td>@(item.RememberMe ? "Y" : "N")</td> </tr> } </table> </div> </body> </html> |
- 添加Action修改对应的Action方法返回值
|
public { List<LoginViewModel> models = new for (int i = 0; i < 20; i++) { models.Add(new { Email = $"{i}user@123.com", Password = new RememberMe = i % 2 == 0 ? true : false }); }
return }
public { List<LoginViewModel> models = new for (int i = 0; i < 20; i++) { models.Add(new { Email = $"{i}user@123.com", Password = new RememberMe = i % 2 == 0 ? true : false }); } return } |
还有一种更方便的方式:使用ActionFilterAttribute过滤器
直接上代码:
|
public { public public { var result = filterContext.Result as if (string.IsNullOrWhiteSpace(FileName)) { FileName = result == null ? DateTime.Now.ToString("yyyy_MM_dd") : result.ViewName; } filterContext.HttpContext.Response.AppendHeader("Content-Disposition", string.Format("filename={0}.doc", FileName)); filterContext.HttpContext.Response.ContentType = "application/msword"; base.OnResultExecuted(filterContext); } } |
使用方式:在一个Action方法上面添加特性:WordDocumentAttribute
|
[WordDocument(FileName = "下载文件名称")] public { return View(); } |
搞定word导出功能,抛砖引玉,希望能够帮助到大家,也希望有更好实现方式的同学能够一起讨论!!!!!!
ASP.NET MVC 拓展ViewResult实现word文档下载的更多相关文章
- SpringBoot+FreeMarker开发word文档下载,预览
背景: 开发一个根据模版,自动填充用户数据并下载word文档的功能 使用freemarker进行定义模版,然后把数据进行填充. maven依赖: <parent> <groupId& ...
- php将html转成word文档下载
<meta charset="utf-8" /> <?php class word{ function start(){ ob_start(); echo '&l ...
- django admin 中实现word文档下载
为了实现此功能,需要用到的知识点: (1)django admin 自定义字段: 参考:http://www.cnblogs.com/wumingxiaoyao/p/6928297.html ...
- Asp.Net MVC WebApi2 自动生成帮助文档
WebAPI Help文档配置 开发环境VS2013+mvc5+WebApi2 一.通过NuGet引用Web API Test Client 安装后会多一个Areas文件夹 二.设置xml文档项目-- ...
- MVC post 方法导出word文档
View code: function ExportWord(){ var html = $("#div_workInfo").html(); $("#hidWord&q ...
- FreeMarker生成Word文档
FreeMarker简介: FreeMarker是一款模板引擎:即一种基于模板和要改变的数据,并用来生成输出文本(HTML网页.电子邮件.配置文件.源代码等)的通用工具,它不是面向最终用户的,而是一个 ...
- Android中使用POI加载与显示word文档
最近打算实现一个功能:在Android中加载显示Word文档,当然这里不是使用外部程序打开.查看一些资料后,打算采用poi实现,确定了以下实现思路: 将ftp中的word文档下载到本地. 调用poi将 ...
- JSP生成WORD文档,EXCEL文档及PDF文档的方法
转自:https://www.jb51.net/article/73528.htm 本文实例讲述了JSP生成WORD文档,EXCEL文档及PDF文档的方法.分享给大家供大家参考,具体如下: 在web- ...
- C# 动态生成word文档 [C#学习笔记3]关于Main(string[ ] args)中args命令行参数 实现DataTables搜索框查询结果高亮显示 二维码神器QRCoder Asp.net MVC 中 CodeFirst 开发模式实例
C# 动态生成word文档 本文以一个简单的小例子,简述利用C#语言开发word表格相关的知识,仅供学习分享使用,如有不足之处,还请指正. 在工程中引用word的动态库 在项目中,点击项目名称右键-- ...
随机推荐
- 迷信again
当在VirtualBox中尝试安装Debian 8.3.0 三次都失败后 - 每次卡在安装软件这一步,我决定不再迷信Debian软件包质量高这件事.
- 读书笔记系列之java性能优化权威指南 一 第一章
主题:java性能优化权威指南 pdf 版本:英文版 Java Performance Tuning 忽略:(0~24页)Performance+Acknowledge 1.Strategies, A ...
- Scalaz(38)- Free :Coproduct-Monadic语句组合
很多函数式编程爱好者都把FP称为Monadic Programming,意思是用Monad进行编程.我想FP作为一种比较成熟的编程模式,应该有一套比较规范的操作模式吧.因为Free能把任何F[A]升格 ...
- 泛函编程(27)-泛函编程模式-Monad Transformer
经过了一段时间的学习,我们了解了一系列泛函数据类型.我们知道,在所有编程语言中,数据类型是支持软件编程的基础.同样,泛函数据类型Foldable,Monoid,Functor,Applicative, ...
- Linux练习
1.创建目录/perm ,在/perm目录下创建文件newfile ,授予/perm目录所有用户都有rwx权限: #创建perm目录 [root@CentOS62 ~]# mkdir perm [ro ...
- 放弃OT了,找了个新框架ThinkCMF
放弃OT了,找了个新框架ThinkCMF,感觉还不错,用用看. 选择OT的原因: 1. OT基于ThinkPHP 2. OT对ThinkPHP进行了封装,使得开发应用更加简单 3. yershop应用 ...
- Atitit 编程语言原理与概论attilax总结
Atitit 编程语言原理与概论attilax总结 1. 语言的分类1 2. 语言评价标准1 3. 编程语言原理(第10版) 目录: 2 4. 代码之髓:编程语言核心概念2 5. <编程语言实现 ...
- [moka同学笔记]Yii2中多表关联查询(join、joinwith) (摘录)
表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer (id customer_name) 订单表Order (id order_name cu ...
- 设计模式之 面向对象的养猪厂的故事,C#演示(一)
对于设计模式, 从本质上说, 其最大的用途就是适应需求的变化. 因为有了设计模式,我们可以在设计阶段就为未来可能发生的变化留下足够的空间. 我们通过一个建造现代化养猪场的故事, 来讨论一下设计模式与需 ...
- ScrollMe – 在网页中加入各种滚动动画效果
ScrollMe 是一款 jQuery 插件,用于给网页添加简单的滚动效果.当你向下滚动页面的时候,ScrollMe 可以缩放,旋转和平移页面上的元素.它易于设置,不需要任何自定义的 JavaScri ...