继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

抛弃NVelocity,来玩玩Razor

安卓软件程序开发入门学习
关注TA
已关注
手记 289
粉丝 49
获赞 282

     对于内容型,不易变动的东西我们都希望给它来个静态化,还有种情况就是比如新浪云不支持.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     else13     {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 Student22     {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中的include18             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 Student33     {34         public string Name { get; set; }35     }

复制代码

 

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

 

 

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP