在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. PropertyGrid控件由浅入深(二):基础用法

    目录 PropertyGrid控件由浅入深(一):文章大纲 PropertyGrid控件由浅入深(二):基础用法 控件的外观构成 控件的外观构成如下图所示: PropertyGrid控件包含以下几个要 ...

  2. UniversalImageLoader的一个小问题

    最近在使用UniversalImageLoader时遇到了一个小问题,多个地方同时通过ImageLoader.getInstance().loadImage(url, new ImageSize(dp ...

  3. 如何通过源生js获取一个元素的具体样式值 /* getCss:获取指定元素的具体样式的属性值 curElement:[dom对象] attr:[string] */

    昨天的博客些的真的是惨不忍睹啊!!!但是我的人生宗旨就是将不要脸的精神进行到底,所以,今天我又来了.哈哈哈哈哈! 方法一:元素.style.属性名:(这个有局限性--只能获取行内样式的值,对于样式表或 ...

  4. SQL Server 游标运用:鼠标轨迹字符串分割

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 游标模板(Cursor Template) 鼠标轨迹字符串分割SQL脚本实现(SQL Code ...

  5. jackson简单使用,对象转json,json转对象,json转list

    添加jackson依赖: // https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core compile g ...

  6. ASP.NET Core 中文文档 第二章 指南(5) 在 Nano Server 上运行ASP.NET Core

    原文 ASP.NET Core on Nano Server 作者 Sourabh Shirhatti 翻译 娄宇(Lyrics) 校对 刘怡(AlexLEWIS).许登洋(Seay).谢炀(kile ...

  7. Javascript单例模式概念与实例

    前言 和其他编程语言一样,Javascript同样拥有着很多种设计模式,比如单例模式.代理模式.观察者模式等,熟练运用Javascript的设计模式可以使我们的代码逻辑更加清晰,并且更加易于维护和重构 ...

  8. Checkbox 模板和样式

    <Style TargetType="{x:Type CheckBox}"> <Setter Property="FontFamily" Va ...

  9. Bonobo创建新库出错,解决方案

    创建新库出错如下: Native library pre-loader is trying to load native SQLite library "D:\wwwroot\localho ...

  10. Java传值和传址

    调用函数时,传的参数过去可能是传值,也可能是传址.如果是传值,函数内部的操作对参数的值没有影响:如果是传址,函数内部的操作是对参数指向的内存进行操作,会影响参数的值. Java到底是传值还是传址?用下 ...