本文主要讲述了在asp.net mvc中,页面静态化的几种思路和方法。对于网站来说,生成纯html静态页面除了有利于seo外,还可以减轻网站的负载能力和提高网站性能。在asp.net mvc中,视图的Razor引擎和控制器为我们静态化提供了新的思路和方法,我们可以利用视图引擎和重写过滤器进行静态操作。

 

先说下本人目前已知的静态化思路,大概有4种方法:

一、使用html模板搭配自定义占位符标识

这是最常见的方法,这种方法需要先编写一个html模板页,模板中定义好需要替换的占位符标识,在需要生成HTML页面的时候,将自定义的占位符标识替换成要展现的内容。比如模板html页面中,有个@template_placeholder_articlecontent标识(表示文章的内容),我们就可以使用string.Replace方法将标识替换成所需的文章内容,或者使用正则表达式进行替换。

最后将生成的静态网页内容通过IO保存为html页面,具体的实现步骤可以看下这篇文章:ASP.NET MVC使用HTML模板进行静态化操作

二、使用ASP.NET MVC的视图引擎生成静态HTML页面

这种方式是我比较推荐的方法,因为可以使用视图文件作为静态模板,还可搭配布局页来使用,这样动态界面和静态界面都是同一套模板,减少了额外编写静态模板的时间!并且在静态化时,填充数据也十分简单,依旧是使用模型数据!

大概说下思路,首先使用ViewEngines类找到要静态化的View视图,然后通过ViewContext类将数据模型填充到视图中,再使用ViewContext.View.Render(ViewContext viewContext, TextWriter writer)方法将获取视图页面的输出流,最后通过File.WriteAllText(string path, string contents)方法将页面内容写入到磁盘中。

我另外写了一篇文章来详细的说明:ASP.NET MVC 使用视图引擎实现页面静态化。毕竟这种方式需要涉及到多个MVC特性的使用,文章中会分享一个已经写好的帮助类,可以很容易的进行调用和操作。

PS:外国猿类同胞的思路:Rendering ASP.NET MVC Views to String

三、ASP.NET MVC中通过重写操作和结果过滤器实现静态化

我们可以通过重写过滤器来实现一个自定义的静态操作过滤器。通过继承IResultFilter接口,利用HttpResponse.Filter将页面内容输出到流中,最后通过IO操作生成静态页面。

可以查阅这篇文章:利用ResultFilter实现asp.net mvc3 页面静态化

另外利用Response.Filter属性本身也是一种生成静态页的方法,网上也是有很多相关资料。

四、直接在后台编写和生成HTML页面的代码

本人十分不推荐使用这种方法,这种方法是直接在服务端用字符串拼接html代码,最后保存为.html后缀的静态网页。通过拼接字符串,对于维护、优化、代码查看来说,都是非常不友好的,有可能会坑了以后维护代码的兄弟。毕竟一大堆的StringBuilder.Append方法是和很不雅观的,而且也十分不灵活,需要使用大量的转义符号!

五、使用XML+XSL生成HTML

这里我建议看这篇文章:使用XML及XSL生成简单HTML

这种方式主要是将数据保存成XML,通过与XSL模板进行转换后(相当于数据填充到模板中),形成纯HTML页面字符串,最后进行IO操作保存并生成静态页面,这也算是另外一种方式的静态化。

另外听说可以使用自定义基架模板,比如MVC中默认的T4模板(Text Template Transformation Toolkit),具体我也不太了解,有兴趣的朋友可以看下。

这里额外的说下生成静态页面的时机,一般是根据业务需求来决定,有条件也可以编写一个服务程序,在服务器上自动定时生成纯静态的HTML页面。当然也可以在进行添加、删除、修改页面等操作后再进行静态化处理。


ASP.NET MVC 页面静态化操作的思路的更多相关文章

  1. Asp.Net MVC页面静态化功能实现一:利用IHttpModule,摒弃ResultFilter

    上一篇有提到利用IHttpModule和ResultFilter实现页面静态化功能.后来经过一些改动,将ResultFilter中要实现的功能全部转移到IHttpModule中来实现 Asp.Net ...

  2. Asp.Net MVC页面静态化功能实现一:利用IHttpModule和ResultFilter

    由于公司现在所采用的是一套CMS内容管理系统的框架,所以最近项目中有一个需求提到要求实现页面静态化的功能.在网上查询了一些资料和文献,最后采用的是小尾鱼的池塘提供的 利用ResultFilter实现a ...

  3. Asp.Net MVC页面静态化功能实现二:用递归算法来实现

    上一篇提到采用IHttpModule来实现当用户访问网站的时候,通过重新定义Response.Filter来实现将返回给客户端的html代码保存,以便用户下一次访问是直接访问静态页面. Asp.Net ...

  4. 利用ResultFilter实现asp.net mvc 页面静态化

    为了提高网站性能.和网站的负载能力,页面静态化是一种有效的方式,这里对于asp.net mvc3 构架下的网站,提供一种个人认为比较好的静态话方式. 实现原理是通过mvc提供的过滤器扩展点实现页面内容 ...

  5. Asp.net Mvc 页面静态化

    http://www.cnblogs.com/gowhy/archive/2013/01/01/2841472.html

  6. Asp.net动态页面静态化之初始NVelocity模板引擎

    Asp.net动态页面静态化之初始NVelocity模板引擎 静态页面是网页的代码都在页面中,不须要运行asp,php,jsp,.net等程序生成client网页代码的网页,静态页面网址中一般不含&q ...

  7. MVC页面静态化

    MVC 页面静态化   最近工作需要,实现页面静态化,以前在ASP时代,都是FSO自己手动生成的. 新时代,MVC了,当然也要新技术,网上一搜,找到一种解决方案,是基于MVC3的,实现原理是通过mvc ...

  8. MVC 页面静态化

    最近工作需要,实现页面静态化,以前在ASP时代,都是FSO自己手动生成的. 新时代,MVC了,当然也要新技术,网上一搜,找到一种解决方案,是基于MVC3的,实现原理是通过mvc提供的过滤器扩展点实现页 ...

  9. 利用ResultFilter实现asp.net mvc3 页面静态化

    为了提高网站性能.和网站的负载能力,页面静态化是一种有效的方式,这里对于asp.net mvc3 构架下的网站,提供一种个人认为比较好的静态话方式. 实现原理是通过mvc提供的过滤器扩展点实现页面内容 ...

随机推荐

  1. Spring Boot进阶系列一

    笔者最近在总结一个 Spring Boot实战系列,以方便将来查找和公司内部培训用途. 1.Springboot从哪里来 SpringBoot是由Pivotal团队在2013年开始研发.2014年4月 ...

  2. C#控制台程序入口函数 Main(string[] args) 参数详解

    学习C#编程最常见的示例程序是在控制台应用程序中输出Hello World! using System; namespace DemoMainArgs { class Program { static ...

  3. 【Beta】Scrum meeting 4

    目录 写在前面 进度情况 任务进度表 Beta-1阶段燃尽图 遇到的困难 照片 commit记录截图 小程序前端仓库 技术博客 写在前面 例会时间:5.8 22:30-23:00 例会地点:微信群语音 ...

  4. C# 序列化与反序列化Serialization之Json Xml Binary Soap JavaScript序列化

    所谓的序列化其实就是把一个内存中的对象信息转化成一个可以持久化保存的形式,方便保存数据库和文件或着用于传输, 序列化的主要作用是不同平台之间进行通信与信息的传递保存等,常用的有序列化有Json Xml ...

  5. Refused to execute script from '...' because its MIME type ('') is not executable, and strict MIME type checking is enabled.

    写在前面 部署项目到weblogic上启动首页访问空白, 浏览器控制台报如题错误. web.xml中把响应头添加防止攻击的报文过滤器禁用就行了(仅仅是为了启动), 以下为转载内容, 可以根据需要自行测 ...

  6. R3300L按reset键无法进入USB Burning模式的问题分析

    最开始并没有注意到这个问题, 因为从设备拿到手, 用USB Burning Tool刷入潜龙版的安卓4.4.2, 再到运行EmuELEC, Armbian, 再到给Kernel 5.3的Armbian ...

  7. paddlepaddle如何预加载embedding向量

    使用小批量数据时,模型容易过拟合,所以需要对全量数据进行处理,我是用的是word2vec训练的词向量. 那么训练好对词向量如何加载呢? #!/usr/bin/env python # -*- codi ...

  8. odoo开发笔记 -- 当前时间&时间运算相关

    当前日期/时间: from datetime import datetime, timedelta now_time = datetime.now() today_date_format = now_ ...

  9. 【GMT43智能液晶模块】例程二十一:DMA LAN实验——高速数据传输测速

    源代码下载链接: 链接:https://pan.baidu.com/s/1wQomZvOUP9_ZslZus_NSIA 提取码:3fmf 复制这段内容后打开百度网盘手机App,操作更方便哦 GMT43 ...

  10. 【GM4008】GM4008升级固件发布(版本V4.2.1.1)

    ===================== GM4008固件升级发布 ===================== 〇.简介:GM4008 8通道0-24mA电流采集模块,采用全电气隔离方案,配合高性能 ...