对于内容型,不易变动的东西我们都希望给它来个静态化,还有种情况就是比如新浪云不支持.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是Java模板引擎Velocity的.Net版本。NVelocity目前官方版本为0.42。官方地址:http://nvelocity.sourceforge.net/,原作者已经申明不再对NVelocity做技术支持了,所以sourceforge上NVelocity版本一直是0.42...
在ASP.NET项目中,NVelocity可以作为视图引擎替代默认的Razor或WebForms,提供更灵活的模板语言。 总的来说,NVelocity为Java和C#开发者提供了一种强大且灵活的方式来生成动态HTML内容。理解并熟练掌握其语法,可以...
7. **错误处理**:NVelocity提供了异常处理机制,当模板语法错误或数据问题发生时,可以通过捕获`VelocityException`来处理。 8. **缓存(Caching)**:为了提高性能,NVelocity可以缓存编译后的模板,避免每次都重新...
在C#环境中,开发者通常会使用NVelocity的API来初始化模板引擎,加载模板文件,并将数据模型放入上下文。以下是一个简单的使用示例: ```csharp VelocityEngine engine = new VelocityEngine(); engine.Init(); //...
在NVelocity中,变量是通过 `$`符号来声明的,例如 `$customer.Name`。变量可以是基本类型,也可以是对象的属性或方法。NVelocity会根据策略选择合适的引用命令,例如`getaddress()`、`getAddress()`、`get("address...
在.NET环境中,NVelocity为开发者提供了便利的方式来生成静态或动态的输出,例如邮件模板、报告或者像在本例中的学员管理系统中的界面展示。 本项目“使用NVelocity实现的简单学员管理”显然利用了NVelocity的强大...
开发者首先创建一个VTL模板,然后在运行时将这个模板与数据模型结合,通过NVelocity的`Template`类和`Context`对象来解析和渲染模板,最后生成所需的输出。 在解压后的"NVelocity"目录中,可能包含了NVelocity的...
总的来说,NVelocity是一款强大的模板引擎,能够帮助ASP.NET开发者实现高效的视图层设计,提高代码的可维护性和可扩展性。通过熟练掌握NVelocity,你将能够更好地实现界面与逻辑的解耦,打造更高质量的Web应用程序。
总结来说,Velocity和NVelocity为开发者提供了强大的模板引擎,它们帮助我们实现表现层与业务逻辑的分离,简化了动态内容的生成过程。通过深入学习和实践,我们可以充分利用这些工具,提升软件开发的效率和质量。
通过以上介绍,我们可以看到NVelocity作为一个强大的模板引擎,为.NET开发者提供了一种高效、灵活的方式来生成动态内容。理解并熟练掌握NVelocity,能够极大地提升.NET应用的开发效率和代码质量。
.Net之NVelocity的三种用法 using NVelocity; using NVelocity.App; using NVelocity.Runtime; VelocityEngine vltEngine = new VelocityEngine(); vltEngine.SetProperty(RuntimeConstants.RESOURCE_LOADER, "file...
这通常通过NuGet包管理器来完成,搜索"NVelocity"并安装相应的包。安装完成后,你可以在项目中引入`NHibernate.Caches.Velocity`和`Velocity`命名空间。 接下来,创建一个模板文件,如`template.vm`,在其中定义你...
5. **性能优化**:NVelocity通过预编译模板来提升性能,将模板转化为.NET字节码,减少运行时解析的时间。 关于压缩包中的“Test”文件,这可能是NVelocity的测试用例或者示例程序,用于展示如何使用NVelocity引擎。...
总的来说,NVelocity.dll是.NET开发中一个强大的模板引擎,它为生成动态内容提供了一种灵活且易于维护的方式。通过理解其核心概念和应用场景,开发者可以有效地利用NVelocity提升项目的效率和质量。
对于初学者来说,理解.NET和NVelocity的结合使用是非常重要的一步。NVelocity的主要优点在于它的模板语言简洁且易于理解,它允许开发者将逻辑和视图分离开来,遵循MVC(Model-View-Controller)设计模式,提高代码的...
通过使用简单的模板语法,NVelocity使得非程序员(如网页设计师)也能参与到页面设计中来。 2. **模板语法** NVelocity模板语言(VTL)包含变量引用、控制结构(如if/else)、循环、宏定义和调用、以及包含其他...
2017年的这个资源集合包含了NVelocity的实例代码和相关教程,对初学者来说是宝贵的参考资料。通过阅读和实践这些案例,可以加深对NVelocity的理解,提高使用效率。 六、最佳实践 1. 尽量保持模板简洁,将复杂的逻辑...
2. **配置**: 在你的项目中,你需要创建一个`VelocityContext`实例来存储数据,然后初始化`VelocityEngine`,设置模板路径和其它配置项。 ```csharp var context = new VelocityContext(); context.Put("key", ...
总结来说,NVelocity是一个强大的Java模板引擎,它提供了一种简洁的方式来将静态模板和动态数据结合,生成动态内容。它的主要特点包括易于学习的语法、良好的可扩展性和与各种Java应用框架的兼容性。通过熟练掌握...
总的来说,Nvelocity是.NET平台上一个强大的模板引擎,对于构建高性能、易于维护的Web应用,尤其是真静态页面生成,是一个很好的选择。通过深入理解和实践这个案例,你将能够更好地掌握Nvelocity的使用,并将其应用...