对于内容型,不易变动的东西我们都希望给它来个静态化,还有种情况就是比如新浪云不支持.net,为了能跑起我们的网站,

只能放些静态页面上面,外加jsonp来实现交互,我们知道.net中有很多模板引擎,但都不是原装的,所以基本都没有代码提示,

用起来比较不爽,自razor出来后,私活中也抛弃了原先使用的NVelocity,而采用原装的razor。

好了,我们先看看怎么玩,首先我们去codeplex上下两个dll。http://razorengine.codeplex.com/

我想razor语法,大家都已经滚瓜烂熟了,不过我快一年都没接触mvc了,也忘了差不多了,就简单介绍一些吧~~~

一般来说,只要razor支持四样特性,80%的功能都可以完成。

一:简单的占位符替换

由于太简单了,就不花力气从cshtml文件中读取了,而用字符串替代。

怎么样,简单的占位符替换是不是很简单,比那些{0},{1}是不是更有语意化一些~

二:能实现的if,foreach等流程控制语句

先看看在模板中怎么玩,最最关键的是有代码提示,完完全全是我们熟悉的C#语法

 <!DOCTYPE html>

 <html lang="en">

 <head>
<meta charset="utf-8" />
@* 看看if语句怎么玩 *@
@if (DateTime.Now.Hour == 23)
{
<title>你好,现在是午夜</title>
}
else
{
<title>现在时间是:@DateTime.Now.ToString()</title>
}
</head> <body>
<ul>
@* 看看foreach语句怎么玩 *@
@foreach (var item in @Model.StudentList)
{
<li>@item.Name</li>
}
</ul>
</body>
</html>

再看看后台C#代码

   class Program
{
static void Main(string[] args)
{
string path1 = Environment.CurrentDirectory + "../../../index.cshtml"; var index = System.IO.File.ReadAllText(path1, Encoding.GetEncoding("GBK")); var list = new List<Student>()
{
new Student(){ Name="张三" },
new Student(){ Name="李四" },
new Student(){ Name="王五" },
}; var result = Razor.Parse(index, new { StudentList = list }); }
} public class Student
{
public string Name { get; set; }
}

然后我们看看生成的文本,嘿嘿,是不是找到了写mvc的感觉呢

三:添加自定义方法

在静态化中,添加自定义方法也是非常实用的一项功能,razor实现起来也很简单,我们可以重写原有的TemplateBase类

来实现我们自定义的类,然后加上一些我们自定义的方法即可~

     /// <summary>
/// 自定义razor原有模板,增加一些自定义的全局方法
/// </summary>
/// <typeparam name="T"></typeparam>
public abstract class MyCustomTemplateBase<T> : TemplateBase<T>
{
public string MyUpper(string name)
{
return name.ToUpper();
}
}

这里实现个简单的“大写化”方法,很简单,然后使用  Razor.SetTemplateBase(typeof(MyCustomTemplateBase<>))进行设置。

         static void Main(string[] args)
{
Razor.SetTemplateBase(typeof(MyCustomTemplateBase<>)); string index_path = Environment.CurrentDirectory + "../../../index.cshtml"; //index内容
var index = System.IO.File.ReadAllText(index_path, Encoding.GetEncoding("GBK")); var result = Razor.Parse(index, new { Name = "ctrip" });
}

再看看我们前端的index.cshtml中定义

 <!DOCTYPE html>

 <html lang="en">

 <head>
<meta charset="utf-8" />
<title>hello</title>
</head> <body>
@MyUpper(Model.Name)
</body>
</html>

大功搞成,看看效果。

四:文件嵌套

 我们知道页面一般都有公共的东西,比如头部,尾部,导航等等,只可惜的是在razor中是不支持layout的,而是使用razor

给我们提供的include加上后台的Compile预编译方法。

第一步:定义一个header.cshtml模板文件

第二步:定义个index.cshtml模板文件,然后在heder区域中用include定义起来,第一个参数Header是给Header.cshtml

       的命名,Model是作为Header.cshtml中的实体参数。

第三步: 分别读取header.cshtml和index.cshtml中的内容,将前者编译成一个变量Header。

     class Program
{
static void Main(string[] args)
{
//header文件的路径
string header_path = Environment.CurrentDirectory + "../../../header.cshtml"; //index文件的路径
string index_path = Environment.CurrentDirectory + "../../../index.cshtml"; //header内容
var header = System.IO.File.ReadAllText(header_path, Encoding.GetEncoding("GBK")); //index内容
var index = System.IO.File.ReadAllText(index_path, Encoding.GetEncoding("GBK")); //将header.cshtml内容预变成为header变量,对应到index.cshtml中的include
Razor.Compile(header, "Header"); var list = new List<Student>()
{
new Student(){ Name="张三" },
new Student(){ Name="李四" },
new Student(){ Name="王五" },
}; var result = Razor.Parse(index, new { Name = "我的测试页面", StudentList = list }); }
} public class Student
{
public string Name { get; set; }
}

好了,如果掌握了上面四样基本功能,现在你也可以用razor实战到自己的静态化中去啦o(∩_∩)o

抛弃NVelocity,来玩玩Razor的更多相关文章

  1. Razor - 模板引擎 / 代码生成 - RazorEngine

    目录 Brief Authors Official Website RazorEngine 的原理 - 官方解释 安装记录 Supported Syntax (默认实现支持的语法) 测试记录 - ca ...

  2. Razon模板

    转:http://www.cnblogs.com/huangxincheng/p/3644313.html 随笔- 119 文章- 0 评论- 2039 抛弃NVelocity,来玩玩Razor   ...

  3. c#项目架构搭建经验

    读过.Net项目中感觉代码写的不错(备注1)有:bbsMax(可惜唧唧喳喳鸟像消失了一样),Umbraco(国外开源的cms项目),Kooboo(国内做开源cms).本人狭隘,读的代码不多,范围也不广 ...

  4. 用Razor語法寫範本-RazorEngine組件介紹【转——非常好,可以用它来代替NVelocity】

    RazorEngine 官網網址:http://razorengine.codeplex.com 在找到RazorEngine之前曾經想過其他的方案,如T4與V8 Engine載jquery.temp ...

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

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

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

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

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

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

  8. Razor 在WebApp 框架的运用

    前面有两章介绍了WebApp框架<WebApp MVC,“不一样”的轻量级互联网应用程序开发框架>和<WebApp MVC 框架的开发细节归纳>,其中视图引擎是用的Nveloc ...

  9. MVC Razor模板引擎输出HTML或者生产HTML文件

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

随机推荐

  1. MSSQL N张表关联查询

    declare @newTime varchar(50); declare @lasetTime varchar(50); set @newTime= getdate(); set @lasetTim ...

  2. (旧)子数涵数·C语言——hello world

    一说起hello world想必你们就知道我要干什么了,毕竟hello world基本是每个高级语言的第一个案例. 好,切入正题,我们开始用C语言编写hello world! 一.打开C语言的IDE( ...

  3. Oracle EBS Form Builder使用Java beans创建窗体

    最近有个项目,需要研究一下Oracle的E-Business Sutie(EBS),对于以前没接触此套件的我来说,简直太痛苦了.在网上找了一堆资料,试着进行Form二次开发,也遇到各类奇葩问题.目前遇 ...

  4. 优秀案例:12个精美的设计工作室 & 设计公司网站

    如果你正在为自己的作品集网站设计寻找灵感,那么学习设计机构 & 设计公司的网站是如何制作的是一个良好的开端.在这篇稳重,我们已经聚集了一组设计机构的优秀作品集网站,你可以借鉴很多设计理念.当你 ...

  5. angular源码分析:angular的源代码目录结构说明

    一.读源码,是选择"编译合并后"的呢还是"编译前的"呢? 有朋友说,读angular源码,直接看编译后的,多好,不用管模块间的关系,从上往下读就好了.但是在我看 ...

  6. Objective-C instancetype关键字

     instancetype是clang 3.5开始,clang提供的一个关键字 表示某个方法返回的未知类型的Objective-C对象 instancetype会告诉编译器当前的类型,这点和NSObj ...

  7. 将PostGIS转化为GeoJSON

    #!/usr/bin/env python # -*- coding: utf-8 -*- import psycopg2 import json from geojson import loads, ...

  8. 内网渗透测试思路-FREEBUF

    (在拿到webshell的时候,想办法获取系统信息拿到系统权限) 一.通过常规web渗透,已经拿到webshell.那么接下来作重要的就是探测系统信息,提权,针对windows想办法开启远程桌面连接, ...

  9. 图文详细解说DevExpress 2015新版亮点【附文档下载】

    历时两个月,翻译自官网的更新说明文档,最后整理成册,文末附PDF地址. DevExpress 在今年6月份发布了正式的2015版本,2015在旧版基础上有明显的升级改进,尤其是DevExtreme.W ...

  10. 在ArcGIS中如何进行POI点抽稀

    对POI点添加权重等级类型信息.例如添加短整形字段Weight,并根据业务逻辑设置不同种类的POI的权重值,如分5类,0代表重要性最低的POI,4代表重要性最高. 在ArcMap的标注管理栏中,设置使 ...