博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
抛弃NVelocity,来玩玩Razor
阅读量:7103 次
发布时间:2019-06-28

本文共 3638 字,大约阅读时间需要 12 分钟。

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

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

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

     好了,我们先看看怎么玩,首先我们去codeplex上下两个dll。 

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

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

 

一:简单的占位符替换

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

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

 

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

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

    
@* 看看if语句怎么玩 *@ @if (DateTime.Now.Hour == 23) { 你好,现在是午夜 } else { 现在时间是:@DateTime.Now.ToString() }
    @* 看看foreach语句怎么玩 *@ @foreach (var item in @Model.StudentList) {
  • @item.Name
  • }
再看看后台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
() { 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类

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

///     /// 自定义razor原有模板,增加一些自定义的全局方法    ///     /// 
public abstract class MyCustomTemplateBase
: TemplateBase
{ 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中定义
    
hello @MyUpper(Model.Name)

大功搞成,看看效果。

 

 四:文件嵌套

 我们知道页面一般都有公共的东西,比如头部,尾部,导航等等,只可惜的是在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
() { 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

转载地址:http://tguhl.baihongyu.com/

你可能感兴趣的文章
squid
查看>>
Aspose.Cells 8月新版17.8发布 | 附下载
查看>>
php连接mysql速度慢的问题解决
查看>>
2003服务器安全设
查看>>
对centos6下时间同步(ntp)操作的讨论
查看>>
概率论与数理统计(一)古典概型
查看>>
kafka学习:入门
查看>>
Object.assign()的用法
查看>>
什么是次世代游戏
查看>>
矢量图形引擎库VectorDraw Developer Framework 更新至v7.7011.0.4
查看>>
SSH 内网端口转发实战
查看>>
Git 系列(二):初步了解 Git
查看>>
2M宽带多快
查看>>
JS常用正则表达式备忘录
查看>>
Phoenix三贴之二:Phoenix二级索引系统
查看>>
java中servletContextListener、httpSessionListener和servletRequestListener三者概述
查看>>
非本专业就当不了数据分析师?
查看>>
接口 (interface)
查看>>
solr搜索
查看>>
AngularDart Material Design 选择
查看>>