`
pcajax
  • 浏览: 2200886 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

抛弃NVelocity,来玩玩Razor

 
阅读更多

     对于内容型,不易变动的东西我们都希望给它来个静态化,还有种情况就是比如新浪云不支持.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中文文档以及NVelocity.dll 1.0(适用用.net环境下)

    NVelocity是Java模板引擎Velocity的.Net版本。NVelocity目前官方版本为0.42。官方地址:http://nvelocity.sourceforge.net/,原作者已经申明不再对NVelocity做技术支持了,所以sourceforge上NVelocity版本一直是0.42...

    NVelocity语法 java or c#

    在ASP.NET项目中,NVelocity可以作为视图引擎替代默认的Razor或WebForms,提供更灵活的模板语言。 总的来说,NVelocity为Java和C#开发者提供了一种强大且灵活的方式来生成动态HTML内容。理解并熟练掌握其语法,可以...

    NVelocity操作基础代码

    7. **错误处理**:NVelocity提供了异常处理机制,当模板语法错误或数据问题发生时,可以通过捕获`VelocityException`来处理。 8. **缓存(Caching)**:为了提高性能,NVelocity可以缓存编译后的模板,避免每次都重新...

    nvelocity_模板_NVelocity_C#_模板引擎_

    在C#环境中,开发者通常会使用NVelocity的API来初始化模板引擎,加载模板文件,并将数据模型放入上下文。以下是一个简单的使用示例: ```csharp VelocityEngine engine = new VelocityEngine(); engine.Init(); //...

    NVelocity语法

    在NVelocity中,变量是通过 `$`符号来声明的,例如 `$customer.Name`。变量可以是基本类型,也可以是对象的属性或方法。NVelocity会根据策略选择合适的引用命令,例如`getaddress()`、`getAddress()`、`get("address...

    使用NVelocity实现的简单学员管理

    在.NET环境中,NVelocity为开发者提供了便利的方式来生成静态或动态的输出,例如邮件模板、报告或者像在本例中的学员管理系统中的界面展示。 本项目“使用NVelocity实现的简单学员管理”显然利用了NVelocity的强大...

    nvelocity 模型适配

    开发者首先创建一个VTL模板,然后在运行时将这个模板与数据模型结合,通过NVelocity的`Template`类和`Context`对象来解析和渲染模板,最后生成所需的输出。 在解压后的"NVelocity"目录中,可能包含了NVelocity的...

    Nvelocity模板引擎

    总的来说,NVelocity是一款强大的模板引擎,能够帮助ASP.NET开发者实现高效的视图层设计,提高代码的可维护性和可扩展性。通过熟练掌握NVelocity,你将能够更好地实现界面与逻辑的解耦,打造更高质量的Web应用程序。

    Velocity文档和NVelocity类库

    总结来说,Velocity和NVelocity为开发者提供了强大的模板引擎,它们帮助我们实现表现层与业务逻辑的分离,简化了动态内容的生成过程。通过深入学习和实践,我们可以充分利用这些工具,提升软件开发的效率和质量。

    NVelocity简单实例+资源包

    通过以上介绍,我们可以看到NVelocity作为一个强大的模板引擎,为.NET开发者提供了一种高效、灵活的方式来生成动态内容。理解并熟练掌握NVelocity,能够极大地提升.NET应用的开发效率和代码质量。

    Asp.Net之NVelocity的三种用法

    .Net之NVelocity的三种用法 using NVelocity; using NVelocity.App; using NVelocity.Runtime; VelocityEngine vltEngine = new VelocityEngine(); vltEngine.SetProperty(RuntimeConstants.RESOURCE_LOADER, "file...

    C# NVelocity模板调用实例

    这通常通过NuGet包管理器来完成,搜索"NVelocity"并安装相应的包。安装完成后,你可以在项目中引入`NHibernate.Caches.Velocity`和`Velocity`命名空间。 接下来,创建一个模板文件,如`template.vm`,在其中定义你...

    NVelocity1.1版及示例Demo(全源码)

    5. **性能优化**:NVelocity通过预编译模板来提升性能,将模板转化为.NET字节码,减少运行时解析的时间。 关于压缩包中的“Test”文件,这可能是NVelocity的测试用例或者示例程序,用于展示如何使用NVelocity引擎。...

    NVelocity.dll

    总的来说,NVelocity.dll是.NET开发中一个强大的模板引擎,它为生成动态内容提供了一种灵活且易于维护的方式。通过理解其核心概念和应用场景,开发者可以有效地利用NVelocity提升项目的效率和质量。

    .NET + NVelocity简单例子

    对于初学者来说,理解.NET和NVelocity的结合使用是非常重要的一步。NVelocity的主要优点在于它的模板语言简洁且易于理解,它允许开发者将逻辑和视图分离开来,遵循MVC(Model-View-Controller)设计模式,提高代码的...

    nvelocity 模版 例子

    通过使用简单的模板语法,NVelocity使得非程序员(如网页设计师)也能参与到页面设计中来。 2. **模板语法** NVelocity模板语言(VTL)包含变量引用、控制结构(如if/else)、循环、宏定义和调用、以及包含其他...

    2017年NVelocity引擎各种用法

    2017年的这个资源集合包含了NVelocity的实例代码和相关教程,对初学者来说是宝贵的参考资料。通过阅读和实践这些案例,可以加深对NVelocity的理解,提高使用效率。 六、最佳实践 1. 尽量保持模板简洁,将复杂的逻辑...

    NVelocity使用文档

    2. **配置**: 在你的项目中,你需要创建一个`VelocityContext`实例来存储数据,然后初始化`VelocityEngine`,设置模板路径和其它配置项。 ```csharp var context = new VelocityContext(); context.Put("key", ...

    模板引擎 - NVelocity

    总结来说,NVelocity是一个强大的Java模板引擎,它提供了一种简洁的方式来将静态模板和动态数据结合,生成动态内容。它的主要特点包括易于学习的语法、良好的可扩展性和与各种Java应用框架的兼容性。通过熟练掌握...

    Nvelocity真静态案例

    总的来说,Nvelocity是.NET平台上一个强大的模板引擎,对于构建高性能、易于维护的Web应用,尤其是真静态页面生成,是一个很好的选择。通过深入理解和实践这个案例,你将能够更好地掌握Nvelocity的使用,并将其应用...

Global site tag (gtag.js) - Google Analytics