以前做CMS的时候都会根据模板来生成输出HTML或者生成HTML文件。 常用的引擎有VTemplate、NVelocity等等,这个我就布做介绍了。 这里我想说的是。当mvc出现Razor模板引擎的时候。我就在想怎么利用这个MVC自带的模板生产HTML文件。 想利用Razor模板引擎来生成

以前做CMS的时候都会根据模板来生成输出HTML或者生成HTML文件。

常用的引擎有VTemplate、NVelocity等等,这个我就布做介绍了。

这里我想说的是。当mvc出现Razor模板引擎的时候。我就在想怎么利用这个MVC自带的模板生产HTML文件。

想利用Razor模板引擎来生成文件,首先你该了解MVC的生命周期。这个在此我也不做多做介绍了。

入主题吧:

1.我的想法比较简单,在一个control中进行模板生产。第一步就是找到你设定的模板。这个比较简单,用mvc提供的方法,找到这个视图。如果路径和控制器的规则一样的话你就写个模板文件的名字,否则全路径吧。

IView v = ViewEngines.Engines.FindView(cc, tempUrl, "").View;

2.传入请求信息和初始化模板中页面的变量值。

当找到模板后我们是不是要把模板中和我们设定的信息结合在一起生成我们想要的html呢?其实这个我们也不用考虑很多,既然用MVC的Razor模板引擎,那我们就考虑使用ViewContext

public static string OutHtml(ControllerContext cc, stringtempUrl, ViewDataDictionary vd, TempDataDictionary td)

{string html = string.Empty;

IView v= ViewEngines.Engines.FindView(cc, tempUrl, "").View;using (StringWriter sw = newStringWriter())

{

ViewContext vc= newViewContext(cc, v, vd, td, sw);

vc.View.Render(vc, sw);

html=sw.ToString();

}returnhtml;

}

3.到这一步我们基本上就能获取到加载模板后生产的html字符了。

在control中我们可以这些写。

publicActionResult CreateHtml()

{

ViewBag.Title= "输出的HTML页面";//这个变量在模板页中有声明的话就会传入模板页最终替换模板页面的变量(和mvc的razor一样用)

ViewBag.my = "动态生成,。。。。。";string outHtml= RazorHtml.OutHtml(this.ControllerContext, "Title", this.ViewData, this.TempData);

ViewBag.HtmlContent=outHtml;returnView();

}

在模板中写上我们定义好的参数

@ViewBag.Title

@ViewBag.my

运行一下看一下结果

到了这一步生成也没什么问题了吧。

4.接下来我们看页面文件生成吧。这方面没什么好说的直接贴上代码,(很久以前的了文件生成代码了。)

public static string OutHtml(ControllerContext cc, stringtempUrl, ViewDataDictionary vd, TempDataDictionary td)

{string html = string.Empty;

IView v= ViewEngines.Engines.FindView(cc, tempUrl, "").View;using (StringWriter sw = newStringWriter())

{

ViewContext vc= newViewContext(cc, v, vd, td, sw);

vc.View.Render(vc, sw);

html=sw.ToString();

}returnhtml;

}public static void SaveHtml(ControllerContext cc, string tempUrl, ViewDataDictionary vd, TempDataDictionary td, string savePath, string fileName, stringExtension, Encoding encoding)

{string html = string.Empty;

IView v= ViewEngines.Engines.FindView(cc, tempUrl, "").View;using (StringWriter sw = newStringWriter())

{

ViewContext vc= newViewContext(cc, v, vd, td, sw);

vc.View.Render(vc, sw);

html=sw.ToString();

}

CreateSaveFile(savePath, encoding, html);

}///

///写入文件///

/// 保存地址

/// 编码类型

/// 内容

///

public static bool SaveFile(string filePath, Encoding enconding, stringcontent)

{try{

File.SetAttributes(System.Web.HttpContext.Current.Server.MapPath(filePath), FileAttributes.Normal);using (FileStream fs = newFileStream(System.Web.HttpContext.Current.Server.MapPath(filePath), FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite))

{//fs.a = fs.Attributes & ~FileAttributes.ReadOnly & ~FileAttributes.Hidden;

Byte[] info =enconding.GetBytes(content);

fs.Write(info,0, info.Length);

fs.Close();return true;

}

}catch(Exception)

{return false;

}

}///

///创建文件///

/// 保存地址

/// 编码类型

/// 内容

///

public static bool CreateSaveFile(string filePath, Encoding enconding, stringcontent)

{try{if (!File.Exists(System.Web.HttpContext.Current.Server.MapPath(filePath)))//如果不存在就创建file文件夹

{

FileStream fs;

fs=File.Create(System.Web.HttpContext.Current.Server.MapPath(filePath));

fs.Close();

fs.Dispose();return true;

}

SaveFile(filePath, enconding, content);return true;

}catch(Exception)

{return false;

}

}

}

控制器中写上生成代码

ViewBag.Title = "输出的HTML页面";//这个变量在模板页中有声明的话就会传入模板页最终替换模板页面的变量(和mvc的razor一样用)

ViewBag.my = "动态生成,。。。。。";string outHtml= RazorHtml.OutHtml(this.ControllerContext, "Title", this.ViewData, this.TempData);

ViewBag.HtmlContent=outHtml;

RazorHtml.SaveHtml(this.ControllerContext, "Title", this.ViewData, this.TempData, "/StaticHtml/Loui.html", "Loui.html", "html", Encoding.UTF8);//生成的HTMLreturn View();

看一下结果,刚刚的

总结:只是一个突然的想法,也没做过其他的测试,不过我知道每次修改模板的mvc也会动态更新生成模板的cs文件。就是说你修改过一次模板然后页面的首次加载会很慢。以后就不会了。

razor生成html,MVC Razor模板引擎输出HTML或者生产HTML文件相关推荐

  1. PHP MVC及模板引擎

    连接到此文 模板引擎,这四个字听起来很高深的样子,一般用到"引擎"两字都会感觉比较高级,类似游戏3D引擎.Zend引擎等,其实都是唬人的,骗外行人的.所以在我初学PHP的那会,也因 ...

  2. ORM MVC、模板引擎介绍(建议收藏)

    ORM ORM 一.什么是ORM 二.认知 ORM 三.数据库和对象的映射关系 四.优缺点 五.常用的 ORM 库 MVC 什么是MVC 模板引擎 ORM 一.什么是ORM ORM是随着面向对象的软件 ...

  3. opencart html模板引擎,Opencart前台HTML、tpl文件的修改,附opencart文件目录

    △问题和服务可以联系微信:yangtuo1991 △文章浏览次数: 20,008 很多时候有些同学有需要修改opencart前台的一小部分样式和文字,修改版权信息.顶部和底部文字等一系列的需求.这里介 ...

  4. 使用 .NET Core模板引擎创建自定义的模板和项目

    本文要点 .NET CLI 包含了一个模板引擎,它可以直接利用命令行创建新项目和项目项.这就是"dotnet new"命令. 默认模板集涵盖了默认控制台和基于 ASP.NET 的应 ...

  5. DotLiquid模板引擎简介

    DotLiquid是一个在.Net Framework上运行的模板引擎,采用Ruby的Liquid语法,这个语法广泛的用在Ruby on rails和Django等网页框架中. DotLiquid相比 ...

  6. velocity模板引擎帮助

    Velocity用户手册是帮助页面设计者和内容提供者认识Velocity和其简单而功能强大的脚本语言――Velocity模板语言(VTL).在手册上的许多例子,都是用Velocity插入动态的内容到网 ...

  7. 模板引擎ejs与html,后台模板引擎ejs与前台模板引擎artTemplate的简单介绍

    动态网页是指前端页面当中的数据内容来源于后台数据库,前端的html代码会随着后台数据的变化而变化,是动态生成的.制作动态网页有两种方式,一种方式是在后台拿到前端的html模板,利用后台模板引擎(如ej ...

  8. thinkjs能在浏览器html文件,thinkjs框架的默认模板引擎Nunjucks的中文文档

    Node 端使用 $ npm install nunjucks 0 $npminstallnunjucks 下载后可直接 require('nunjucks') 使用 浏览器端使用 可直接使用 nun ...

  9. 简单实用的js模板引擎

    转自:微点阅读  https://www.weidianyuedu.com 不足50行的js模板引擎,支持各种js语法: <script id="test_list" typ ...

最新文章

  1. 【杂项】SVN服务器的本地搭建和使用
  2. leetcode—Valid Parentheses
  3. 阿里云服务器 安全狗外部访问mysql_阿里云linux/centos服务器安全狗安装
  4. TF-IDF算法百度附有代码 有解吧实现中文分词
  5. String和C#中的string有什么区别?
  6. 域上的全矩阵环是单环
  7. AndroidManifest.xml中Activity ConfigChanges属性的用法
  8. 《拯救人类》:很有可能改变人类历史进程的书
  9. fceux模拟器linux,超强FC模拟器fceux-2.2.3最新版
  10. 诺基亚的「翻身」之战
  11. JVM内存模型及垃圾回收算法
  12. excel提取文字拼音首字母
  13. 锐捷Ruijie交换机补丁升级及补丁卸载
  14. BES(恒玄) 平台 复杂按键 实现
  15. acmev2怎么用_lua-resty-acme: ACMEv2 客户端和 Let's Encrypt 证书的自动化管理
  16. Apache Dubbo(概念篇)
  17. python循环输出1到10_用Python编写一个程序,使用for循环输出0~10之间的整数
  18. Could not find resource xxx/xxxx/xxx.xml报错解决
  19. Linux 配置crash
  20. 从头开始学习JAVA

热门文章

  1. 重大要素改变中的机会选择包括_CCAA12月5日下午ISO90012015转版考试题A答案
  2. 三态门三个状态vhdl_基本逻辑门和三态门实验报告.docx
  3. qtQuick pdf 下载
  4. 2 magicwatch_荣耀MagicWatch 2怎么样?荣耀MagicWatch 2体验评测
  5. Androi调用相机和相册
  6. html编辑器完整保存网页,w3schools网站的HTML教程之HTML编辑器
  7. 随机过程与排队论 上海交大 2018试题
  8. SpringBoot非官方教程 | 第十七篇:上传文件
  9. 标签打印软件如何制作保修标志
  10. 华为服务器建虚拟机,在服务器上创建虚拟机