抛弃NVelocity,来玩玩Razor
对于内容型,不易变动的东西我们都希望给它来个静态化,还有种情况就是比如新浪云不支持.net,为了能跑起我们的网站,
只能放些静态页面上面,外加jsonp来实现交互,我们知道.net中有很多模板引擎,但都不是原装的,所以基本都没有代码提示,
用起来比较不爽,自razor出来后,私活中也抛弃了原先使用的NVelocity,而采用原装的razor。
好了,我们先看看怎么玩,首先我们去codeplex上下两个dll。http://razorengine.codeplex.com/
我想razor语法,大家都已经滚瓜烂熟了,不过我快一年都没接触mvc了,也忘了差不多了,就简单介绍一些吧~~~
一般来说,只要razor支持四样特性,80%的功能都可以完成。
一:简单的占位符替换
由于太简单了,就不花力气从cshtml文件中读取了,而用字符串替代。
。
怎么样,简单的占位符替换是不是很简单,比那些{0},{1}是不是更有语意化一些~
二:能实现的if,foreach等流程控制语句
先看看在模板中怎么玩,最最关键的是有代码提示,完完全全是我们熟悉的C#语法
1 <!DOCTYPE html> 2 3 <html lang="en"> 4 5 <head> 6 <meta charset="utf-8" /> 7 @* 看看if语句怎么玩 *@ 8 @if (DateTime.Now.Hour == 23) 9 { 10 <title>你好,现在是午夜</title> 11 } 12 else 13 { 14 <title>现在时间是:@DateTime.Now.ToString()</title> 15 } 16 </head> 17 18 <body> 19 <ul> 20 @* 看看foreach语句怎么玩 *@ 21 @foreach (var item in @Model.StudentList) 22 { 23 <li>@item.Name</li> 24 } 25 </ul> 26 </body> 27 </html>
再看看后台C#代码
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 string path1 = Environment.CurrentDirectory + "../../../index.cshtml"; 6 7 var index = System.IO.File.ReadAllText(path1, Encoding.GetEncoding("GBK")); 8 9 var list = new List<Student>() 10 { 11 new Student(){ Name="张三" }, 12 new Student(){ Name="李四" }, 13 new Student(){ Name="王五" }, 14 }; 15 16 var result = Razor.Parse(index, new { StudentList = list }); 17 18 } 19 } 20 21 public class Student 22 { 23 public string Name { get; set; } 24 }
然后我们看看生成的文本,嘿嘿,是不是找到了写mvc的感觉呢
三:添加自定义方法
在静态化中,添加自定义方法也是非常实用的一项功能,razor实现起来也很简单,我们可以重写原有的TemplateBase类
来实现我们自定义的类,然后加上一些我们自定义的方法即可~
1 /// <summary> 2 /// 自定义razor原有模板,增加一些自定义的全局方法 3 /// </summary> 4 /// <typeparam name="T"></typeparam> 5 public abstract class MyCustomTemplateBase<T> : TemplateBase<T> 6 { 7 public string MyUpper(string name) 8 { 9 return name.ToUpper(); 10 } 11 }
这里实现个简单的“大写化”方法,很简单,然后使用 Razor.SetTemplateBase(typeof(MyCustomTemplateBase<>))进行设置。
1 static void Main(string[] args) 2 { 3 Razor.SetTemplateBase(typeof(MyCustomTemplateBase<>)); 4 5 string index_path = Environment.CurrentDirectory + "../../../index.cshtml"; 6 7 //index内容 8 var index = System.IO.File.ReadAllText(index_path, Encoding.GetEncoding("GBK")); 9 10 var result = Razor.Parse(index, new { Name = "ctrip" }); 11 }
再看看我们前端的index.cshtml中定义
1 <!DOCTYPE html> 2 3 <html lang="en"> 4 5 <head> 6 <meta charset="utf-8" /> 7 <title>hello</title> 8 </head> 9 10 <body> 11 @MyUpper(Model.Name) 12 </body> 13 </html>
大功搞成,看看效果。
四:文件嵌套
我们知道页面一般都有公共的东西,比如头部,尾部,导航等等,只可惜的是在razor中是不支持layout的,而是使用razor
给我们提供的include加上后台的Compile预编译方法。
第一步:定义一个header.cshtml模板文件
第二步:定义个index.cshtml模板文件,然后在heder区域中用include定义起来,第一个参数Header是给Header.cshtml
的命名,Model是作为Header.cshtml中的实体参数。
第三步: 分别读取header.cshtml和index.cshtml中的内容,将前者编译成一个变量Header。
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 //header文件的路径 6 string header_path = Environment.CurrentDirectory + "../../../header.cshtml"; 7 8 //index文件的路径 9 string index_path = Environment.CurrentDirectory + "../../../index.cshtml"; 10 11 //header内容 12 var header = System.IO.File.ReadAllText(header_path, Encoding.GetEncoding("GBK")); 13 14 //index内容 15 var index = System.IO.File.ReadAllText(index_path, Encoding.GetEncoding("GBK")); 16 17 //将header.cshtml内容预变成为header变量,对应到index.cshtml中的include 18 Razor.Compile(header, "Header"); 19 20 var list = new List<Student>() 21 { 22 new Student(){ Name="张三" }, 23 new Student(){ Name="李四" }, 24 new Student(){ Name="王五" }, 25 }; 26 27 var result = Razor.Parse(index, new { Name = "我的测试页面", StudentList = list }); 28 29 } 30 } 31 32 public class Student 33 { 34 public string Name { get; set; } 35 }
好了,如果掌握了上面四样基本功能,现在你也可以用razor实战到自己的静态化中去啦o(∩_∩)o
抛弃NVelocity,来玩玩Razor相关推荐
- jackson 驼峰注解_jackson 常用注解,比如忽略某些属性,驼峰和下划线互转
一般情况下使用JSON只使用了java对象与字符串的转换,但是,开发APP时候,我们经常使用实体类来做转换:这样,就需要用到注解: Jackson默认是针对get方法来生成JSON字符串的,可以使用注 ...
- php 模板 头部 尾部,网站头部尾部模板
浅谈SharePoint 2013 站点模板开发 一直以来所接触的SharePoint开发,都是Designer配合Visual Studio,前者设计页面,后者开发功能,相互合作,完成SharePo ...
- .NET Mvc Razor也可以这样玩!
忙碌的工作总是占据了生活的大部分的时间!所以我的博客到现在还是寥寥的几篇文章,技术是用来分享和学习的,对技术有不同的见解,大家都可以分享下,如果如下文章有问题之处请各位指出来,在这个闲下来的时间给大家 ...
- razor生成html,MVC Razor模板引擎输出HTML或者生产HTML文件
以前做CMS的时候都会根据模板来生成输出HTML或者生成HTML文件. 常用的引擎有VTemplate.NVelocity等等,这个我就布做介绍了. 这里我想说的是.当mvc出现Razor模板引擎的时 ...
- ASP.Net MVC开发基础学习笔记:三、Razor视图引擎、控制器与路由机制学习
一.天降神器"剃须刀" - Razor视图引擎 1.1 千呼万唤始出来的MVC3.0 在MVC3.0版本的时候,微软终于引入了第二种模板引擎:Razor.在这之前,我们一直在使用W ...
- Razor视图引擎、控制器与路由机制学习
1.1 千呼万唤始出来的MVC3.0 在MVC3.0版本的时候,微软终于引入了第二种模板引擎:Razor.在这之前,我们一直在使用WebForm时代沿留下来的ASPX引擎或者第三方的NVelocity ...
- ASP.Net MVC开发基础学习笔记(3):Razor视图引擎、控制器与路由机制学习
一.天降神器"剃须刀" - Razor视图引擎 1.1 千呼万唤始出来的MVC3.0 在MVC3.0版本的时候,微软终于引入了第二种模板引擎:Razor.在这之前,我们一直在使用W ...
- [转]ASP.Net MVC开发基础学习笔记(3):Razor视图引擎、控制器与路由机制学习
[出处]http://www.cnblogs.com/edisonchou/p/3923475.html 关于机制的介绍,讲得不错,觉得可以参考着学习一下 1.1 千呼万唤始出来的MVC3.0 在MV ...
- Flash被全世界抛弃,到底经历了什么
今天打开电脑的第一刻,接收到google浏览器的一封通知,如下: For 20 years, Flash has helped shape the way that you play games, w ...
最新文章
- 运行时异常 检查时异常
- ggplot2笔记3:工具箱——误差线、加权数、展示数据分布
- java-类(class)继承,重写,重构,抽象,接口等
- MVC-RedirectToAction跳转到其他Area
- jira服务断电导致索引文件损坏问题解决
- Clustered Data ONTAP Fundamentals课程学习(1)
- 【Caffe代码解析】Blob
- 错误:created a ThreadLocal with key of type ……but failed to remove it when the web application was sto
- IBM Rhapsody 报错找不到 VC11 目录的解决方法
- matlab曲线拟合幅频特性曲线_频域稳定性与matlab指令计算
- 射频功放学习之基础篇(一)
- 什么样的Python培训机构才是好机构?
- 计算机主机结构和名称图,计算机结构图
- 如何使用 Alink 进行中文情感分析?
- 通用mapper——自定义搭配继承Mapper
- 智能机器人的核心技术和技术指标总结
- JavaScript数组函数
- AutoCAD 2014 新特性概览
- databinder.eval绑定数据的时候显示html标签,c#教程之基于DataBinder.Eval方法的数据绑定...
- 3D实时渲染中的BSP树和多边形剔除
热门文章
- 金明的预算方案(洛谷-P1064)
- 求逆序对(信息学奥赛一本通-T1311)
- 信息学奥赛C++语言:重组
- python判断文件是否存在 中文_python如何判断文件是否存在
- Linux通过GPIO状态实现按键上报(按键功能)
- simplexml php,PHP 使用 SimpleXML 遇到冒号「:」的解法
- 初一数学计算机教案,初一数学教案
- Win10+VSCode搭建opencv+C++环境(2)
- 解决:vue项目的页面刷新之 title被重置问题
- Topsky酒店管理系统v1.4.2.3