zoukankan      html  css  js  c++  java
  • MVC下压缩输入的HTML内容

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

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

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

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

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


  • 相关阅读:
    一个十分诡异的NullReferenceException异常!
    如何去掉TabControl控件默认添加的TabPage
    GDI+发生一般性错误的解决方法
    C#中各种数组的性能比较
    酷享娱乐新生活
    关于ImageList.Images集合的特殊行为!
    WinForm窗体之间交互的一些方法
    实现单实例应用程序的三种方案
    MySql_Close 释放资源
    数组之List
  • 原文地址:https://www.cnblogs.com/zcm123/p/6992045.html
Copyright © 2011-2022 走看看