对于内容型,不易变动的东西我们都希望给它来个静态化,还有种情况就是比如新浪云不支持.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相关推荐

  1. jackson 驼峰注解_jackson 常用注解,比如忽略某些属性,驼峰和下划线互转

    一般情况下使用JSON只使用了java对象与字符串的转换,但是,开发APP时候,我们经常使用实体类来做转换:这样,就需要用到注解: Jackson默认是针对get方法来生成JSON字符串的,可以使用注 ...

  2. php 模板 头部 尾部,网站头部尾部模板

    浅谈SharePoint 2013 站点模板开发 一直以来所接触的SharePoint开发,都是Designer配合Visual Studio,前者设计页面,后者开发功能,相互合作,完成SharePo ...

  3. .NET Mvc Razor也可以这样玩!

    忙碌的工作总是占据了生活的大部分的时间!所以我的博客到现在还是寥寥的几篇文章,技术是用来分享和学习的,对技术有不同的见解,大家都可以分享下,如果如下文章有问题之处请各位指出来,在这个闲下来的时间给大家 ...

  4. razor生成html,MVC Razor模板引擎输出HTML或者生产HTML文件

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

  5. ASP.Net MVC开发基础学习笔记:三、Razor视图引擎、控制器与路由机制学习

    一.天降神器"剃须刀" - Razor视图引擎 1.1 千呼万唤始出来的MVC3.0 在MVC3.0版本的时候,微软终于引入了第二种模板引擎:Razor.在这之前,我们一直在使用W ...

  6. Razor视图引擎、控制器与路由机制学习

    1.1 千呼万唤始出来的MVC3.0 在MVC3.0版本的时候,微软终于引入了第二种模板引擎:Razor.在这之前,我们一直在使用WebForm时代沿留下来的ASPX引擎或者第三方的NVelocity ...

  7. ASP.Net MVC开发基础学习笔记(3):Razor视图引擎、控制器与路由机制学习

    一.天降神器"剃须刀" - Razor视图引擎 1.1 千呼万唤始出来的MVC3.0 在MVC3.0版本的时候,微软终于引入了第二种模板引擎:Razor.在这之前,我们一直在使用W ...

  8. [转]ASP.Net MVC开发基础学习笔记(3):Razor视图引擎、控制器与路由机制学习

    [出处]http://www.cnblogs.com/edisonchou/p/3923475.html 关于机制的介绍,讲得不错,觉得可以参考着学习一下 1.1 千呼万唤始出来的MVC3.0 在MV ...

  9. Flash被全世界抛弃,到底经历了什么

    今天打开电脑的第一刻,接收到google浏览器的一封通知,如下: For 20 years, Flash has helped shape the way that you play games, w ...

最新文章

  1. 运行时异常 检查时异常
  2. ggplot2笔记3:工具箱——误差线、加权数、展示数据分布
  3. java-类(class)继承,重写,重构,抽象,接口等
  4. MVC-RedirectToAction跳转到其他Area
  5. jira服务断电导致索引文件损坏问题解决
  6. Clustered Data ONTAP Fundamentals课程学习(1)
  7. 【Caffe代码解析】Blob
  8. 错误:created a ThreadLocal with key of type ……but failed to remove it when the web application was sto
  9. IBM Rhapsody 报错找不到 VC11 目录的解决方法
  10. matlab曲线拟合幅频特性曲线_频域稳定性与matlab指令计算
  11. 射频功放学习之基础篇(一)
  12. 什么样的Python培训机构才是好机构?
  13. 计算机主机结构和名称图,计算机结构图
  14. 如何使用 Alink 进行中文情感分析?
  15. 通用mapper——自定义搭配继承Mapper
  16. 智能机器人的核心技术和技术指标总结
  17. JavaScript数组函数
  18. AutoCAD 2014 新特性概览
  19. databinder.eval绑定数据的时候显示html标签,c#教程之基于DataBinder.Eval方法的数据绑定...
  20. 3D实时渲染中的BSP树和多边形剔除

热门文章

  1. 金明的预算方案(洛谷-P1064)
  2. 求逆序对(信息学奥赛一本通-T1311)
  3. 信息学奥赛C++语言:重组
  4. python判断文件是否存在 中文_python如何判断文件是否存在
  5. Linux通过GPIO状态实现按键上报(按键功能)
  6. simplexml php,PHP 使用 SimpleXML 遇到冒号「:」的解法
  7. 初一数学计算机教案,初一数学教案
  8. Win10+VSCode搭建opencv+C++环境(2)
  9. 解决:vue项目的页面刷新之 title被重置问题
  10. Topsky酒店管理系统v1.4.2.3