在MVC下如何压缩输出的HTML代码,替换HTML代码中的空白,换行符等字符?

1.首先要了解MVC是如何输出HTML代码到客户端的,先了解下Controller这个类,里面有很多方法,我们需要的主要有两个:OnActionExecuting和OnResultExecuted

2.新建一个基类,继承自:System.Web.Mvc.Controller,代码如下:

  1. using System.IO;
  2. using System.Text;
  3. using System.Text.RegularExpressions;
  4. using System.Web;
  5. using System.Web.Mvc;
  6. using System.Web.UI;
  7. namespace WebApplication2.Controllers
  8. {
  9. /// <summary>
  10. /// Base
  11. /// </summary>
  12. public class BaseController : Controller
  13. {
  14. #region Private
  15. /// <summary>
  16. /// HtmlTextWriter
  17. /// </summary>
  18. private HtmlTextWriter tw;
  19. /// <summary>
  20. /// StringWriter
  21. /// </summary>
  22. private StringWriter sw;
  23. /// <summary>
  24. /// StringBuilder
  25. /// </summary>
  26. private StringBuilder sb;
  27. /// <summary>
  28. /// HttpWriter
  29. /// </summary>
  30. private HttpWriter output;
  31. #endregion
  32. /// <summary>
  33. /// 压缩html代码
  34. /// </summary>
  35. /// <param name="text">html代码</param>
  36. /// <returns></returns>
  37. private static string Compress(string text)
  38. {
  39. Regex reg = new Regex(@"\s*(</?[^\s/>]+[^>]*>)\s+(</?[^\s/>]+[^>]*>)\s*");
  40. text = reg.Replace(text, m => m.Groups[1].Value + m.Groups[2].Value);
  41. reg = new Regex(@"(?<=>)\s|\n|\t(?=<)");
  42. text = reg.Replace(text, string.Empty);
  43. return text;
  44. }
  45. /// <summary>
  46. /// 在执行Action的时候,就把需要的Writer存起来
  47. /// </summary>
  48. /// <param name="filterContext">上下文</param>
  49. protected override void OnActionExecuting(ActionExecutingContext filterContext)
  50. {
  51. sb = new StringBuilder();
  52. sw = new StringWriter(sb);
  53. tw = new HtmlTextWriter(sw);
  54. output = (HttpWriter)filterContext.RequestContext.HttpContext.Response.Output;
  55. filterContext.RequestContext.HttpContext.Response.Output = tw;
  56. base.OnActionExecuting(filterContext);
  57. }
  58. /// <summary>
  59. /// 在执行完成后,处理得到的HTML,并将他输出到前台
  60. /// </summary>
  61. /// <param name="filterContext"></param>
  62. protected override void OnResultExecuted(ResultExecutedContext filterContext)
  63. {
  64. string response = Compress(sb.ToString());
  65. output.Write(response);
  66. }
  67. }
  68. }

2.需要压缩的页面控制器,集成这个BaseController,就可以了,运行后的网页源代码如下图:

MVC下压缩输入的HTML内容的更多相关文章

  1. ASP.NET MVC下的四种验证编程方式[续篇]

    在<ASP.NET MVC下的四种验证编程方式>一文中我们介绍了ASP.NET MVC支持的四种服务端验证的编程方式("手工验证"."标注Validation ...

  2. ASP.NET MVC下的四种验证编程方式

    ASP.NET MVC采用Model绑定为目标Action生成了相应的参数列表,但是在真正执行目标Action方法之前,还需要对绑定的参数实施验证以确保其有效性,我们将针对参数的验证成为Model绑定 ...

  3. 在ASP.NET MVC下通过短信验证码注册

    以前发短信使用过短信猫,现在,更多地是使用第三方API.大致过程是: → 用户在页面输入手机号码→ 用户点击"获取验证码"按钮,把手机号码发送给服务端,服务端产生几位数的随机码,并 ...

  4. 《高可用MySQL》1 – Windows环境下压缩版MySQL安装

    近日在读O’REILIY系列的<高可用MySQL>, 自然少不了主从(Master-Slave)配置和横向扩展相关的内容.Master-Slave这东西吧,在许多公司都是标配,开发中基本天 ...

  5. linux下压缩与解压(zip、unzip、tar)详解

    linux下压缩与解压(zip.unzip.tar)详解 2012-05-09 13:58:39| 分类: linux | 标签:linux zip unzip tar linux命令详解 |举报|字 ...

  6. ASP.NET MVC下的四种验证编程方式[续篇]【转】

    在<ASP.NET MVC下的四种验证编程方式> 一文中我们介绍了ASP.NET MVC支持的四种服务端验证的编程方式(“手工验证”.“标注ValidationAttribute特性”.“ ...

  7. ASP.NET MVC下的四种验证编程方式【转】

    ASP.NET MVC采用Model绑定为目标Action生成了相应的参数列表,但是在真正执行目标Action方法之前,还需要对绑定的参数实施验证以确保其有效 性,我们将针对参数的验证成为Model绑 ...

  8. 转:MVC 下导航超链接本页面高亮的一种解决方案

    前言 导航高亮一直是一个让大家头疼的问题. 纯 Javascript 的话可以判断当前页面的地址和链接地址是否有关系. 这样的弊端就是自由度太低,MVC 下会出一定的问题 (MVC 下有默认的 Con ...

  9. MVC下用户登录状态校验的问题以及解决方案--------------Action全局过滤器的使用

    前言当我们访问某个网站的时候需要检测用户是否已经登录(通过Session是否为null),我们知道在WebForm中可以定义一个BasePage类让他继承System.Web.UI.Page,重写它的 ...

随机推荐

  1. TODO:字节的那点事Go篇

    TODO:字节的那点事Go篇 (本文go version go1.7.3 darwin/amd64) 在Golang中string底层是由byte数组组成的. fmt.Println(len(&quo ...

  2. oracle11g 重装操作系统后,如何利用原有oracle表空间文件还原数据库

    最近由于系统重装,在还原dmp备份文件时,由于数据原因(用exp命令导出时表没有导出全部),导致系统不能正常运行.根据网上的信息和个人实际情况,做个记录,便于后用. oracle 导出空表方法: 1. ...

  3. 环境搭建系列-系统安装之centos 6.5安装与配置

    按照国际惯例,系列目录先奉上: 系列一:系统安装之centos 6.5安装与配置 系列二:准备工作之Java环境安装 系列三:数据为先之MySQL读写集群搭建 系列四:谈分布式之RabbitMQ集群搭 ...

  4. WCF学习之旅—WCF服务部署到IIS7.5(九)

    上接   WCF学习之旅—WCF寄宿前的准备(八) 四.WCF服务部署到IIS7.5 我们把WCF寄宿在IIS之上,在IIS中宿主一个服务的主要优点是在发生客户端请求时宿主进程会被自动启动,并且你可以 ...

  5. 【.net 深呼吸】自定义特性(Attribute)的实现与检索方法

    在.net的各个语言中,尤其是VB.NET和C#,都有特性这一东东,具体的概念,大家可以网上查,这里老周说一个非标准的概念——特性者,就是对象的附加数据.对象自然可以是类型.类型成员,以及程序集. 说 ...

  6. 让DIV中文字换行显示

    1. <style> div { white-space:normal; word-break:break-all; word-wrap:break-word; } </style& ...

  7. 《JavaScript 源码分析》之 maxlength.js

    /* @author: Terry @params: feedback - the selector for the element that gives the user feedback. Not ...

  8. 用SignalR 2.0开发客服系统[系列3:实现点对点通讯]

    前言 交流群:195866844 目录: 用SignalR 2.0开发客服系统[系列1:实现群发通讯] 用SignalR 2.0开发客服系统[系列2:实现聊天室] 真的很感谢大家的支持,今天发表系列3 ...

  9. WCF学习系列汇总

    最近在学习WCF,打算把一整个系列的文章都”写“出来,包括理论和实践,这里的“写”是翻译,是国外的大牛写好的,我只是搬运工外加翻译.翻译的不好,大家请指正,谢谢了.如果觉得不错的话,也可以给我点赞,这 ...

  10. WPF DataGrid 行选中相关

    DataGrid选中行是有自带SelectionChanged的,可是当需要重复选中同一行时,该事件就不会触发了. 后来反复查资料找到了DataGrid上有个DataGridRow. DataGrid ...