抛弃NVelocity,来玩玩Razor

简介:

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

相关文章
|
4月前
|
开发框架 移动开发 前端开发
分享47个JavaScript框架源码,总有一款适合您
分享47个JavaScript框架源码,总有一款适合您
30 0
|
4月前
|
开发框架 前端开发 小程序
分享47个PHP框架源码,总有一款适合您
分享47个PHP框架源码,总有一款适合您
70 0
|
10月前
|
C# 计算机视觉 开发者
在Winform中一分钟入门使用好看性能还好的Blazor Hybrid
在Winform中一分钟入门使用好看性能还好的Blazor Hybrid
136 0
在Winform中一分钟入门使用好看性能还好的Blazor Hybrid
|
10月前
|
存储 算法 iOS开发
ZPhotoBrowser (基于之前的那篇文章PhotoKit初用)
作为一个iOS开发人员,我已经不知不觉的在帝都这个地方上干了块两年了。前一阵,由于公司的发展方向的问题,我被迫加入了找工作的大军之中。这可把我担心坏了,因为我之前的一个同事找了好久都没有找到工作,之后他就选择回老家发展了。做过iOS这行的都知道现在是什么行情了,我就不多说了。不过还好我找了一周左右吧,面试不少。但是现在招人的公司,真的不知道要招什么样的开发人员,面试草草了事的偏多。还有就是自认为大牛的比较多,我记得我面了一家智能家居的科技公司。那个面试我的面试官,看了我做过的产品。就给我说了一句:“你就是个调接口和写TableView的啊。”这话听起来真的让人难受,用一句很流行的话说,那就是“
C#Razor小笔记和某些细节
C#Razor小笔记和某些细节
108 0
|
人工智能 JavaScript 前端开发
开发常用代码笔记
开发常用代码笔记
开发常用代码笔记
|
JavaScript 前端开发
几个毫无节操纯属恶搞的JavaScript插件
fartscroll.js,为放屁而生 你知道么,有了这个js库,你的页面就可以——————————放屁勒! 打开下面的演示地址,然后滚动页面。 在线演示:http://theonion.github.
831 0
|
数据库
代码写的垃圾被嫌弃?这 3 个插件你值得拥有…
今天推荐三个插件,它们都是代码质量检测的神器。可以扫描检测出你项目中不符合规范的代码,他们分别是 SonarLint、SonarQube、Alibaba代码规约插件。
184 0
代码写的垃圾被嫌弃?这 3 个插件你值得拥有…
|
前端开发 C#
抛弃NVelocity,来玩玩Razor
原文:抛弃NVelocity,来玩玩Razor      对于内容型,不易变动的东西我们都希望给它来个静态化,还有种情况就是比如新浪云不支持.net,为了能跑起我们的网站, 只能放些静态页面上面,外加jsonp来实现交互,我们知道.net中有很多模板引擎,但都不是原装的,所以基本都没有代码提示, 用起来比较不爽,自razor出来后,私活中也抛弃了原先使用的NVelocity,而采用原装的razor。
1114 0

相关实验场景

更多