以前做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. 这个Python知识点,90%初学者没太整明白
  2. Denoising DNA deep sequencing data—high-throughput sequencing errors and their correction
  3. PowerDesigner连接Oracle数据库生成数据模型【本地连接方式】
  4. 在一个JS文件中包含中文字符串,通过innerHTML输出后中文乱码?
  5. LinbDesk --- 新的extjs4.2 desktop demo : 技术交流Q群:336584192
  6. java类快速构造_程序员有什么办法能快速梳理java知识点?有这八张图就够了
  7. 女儿是程序员爸爸的小棉袄,礼物太暖心
  8. ubuntu 设置php开机启动
  9. 专业设计服务器硬件主电路板工作室,电子设计教程: 电平转换电路
  10. 电商扣减库存_电商后台产品经理宝典
  11. 获取谷歌浏览器缓存视频方法
  12. 少年中国说 梁启超
  13. 电信主机托管费用_主机托管平均费用与托管流程
  14. Web在线报表设计器使用指南
  15. Github上3.5k star 的微博爬虫,很赞!
  16. 世界时间UT和协调世界时间UTC
  17. ubuntu 16:使用系统自带的中文输入法
  18. 中国石油大学《微观经济学》第一次在线作业
  19. ITSM常见问题之:自动指派工单给对应的技术员的三种简单方法
  20. 现代循环神经网络 - 序列到序列学习

热门文章

  1. winform的Textbox设置只读之后ForeColor无效的解决方法
  2. 如何将swf转换成MP4格式?视频转换器如何使用
  3. 一起来揭秘运营商大数据
  4. CentOS安装nvidia显卡驱动的正确方法
  5. 使用ccproxy共享局域网内主机Internet
  6. python粒子风暴代码_从WebSocket获取数据的粒子风暴动画
  7. 智能机那些事儿――第九讲 硬件
  8. 华为鸿蒙系统使用机型,华为鸿蒙系统支持哪些手机型号?华为鸿蒙系统开放机型大全_专题_53货源网...
  9. 题解 洛谷P1196 【[NOI2002]银河英雄传说】
  10. 将 Maxthon 1.6.7 识别成“傲游云浏览器” 腾讯电脑管家现“神”升级功能