Nvelocity模板引擎

A、nVelocity是一个基于.NET的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由.NET代码定义的对象。页面设计人员可以只关注页面的显示效果,而由.NET程序开发人员关注业务逻辑编码。

B、模板引擎处理流程:编写模板->处理数据->渲染HTML。

C、Nvelocity下载地址:http://www.castleproject.org/download/

D、一个简单的示例:

  新建一个Application,在项目中添加Nvelocity的引用,然后添加新建项,选择一般处理程序,命名为login.ashx,在ProcessRequest方法里写下面代码:

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/html";

            //是否载入
            string ispostback = context.Request["ispostback"];
            if (string.IsNullOrEmpty(ispostback))
            {
                //创建NVelocity实例对象
                VelocityEngine vltEngine = new VelocityEngine();
                vltEngine.SetProperty(RuntimeConstants.RESOURCE_LOADER, "file");

                //模板存放目录
                vltEngine.SetProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, HostingEnvironment.MapPath("/template"));
                vltEngine.Init();

                //定义一个模板上下文
                VelocityContext vltContext = new VelocityContext();

                //传入模板所需要的参数
                vltContext.Put("username", "");
                vltContext.Put("password", "");
                vltContext.Put("msg", "载入");

                //获取我们刚才所定义的模板,上面已设置模板目录
                Template vltTemplate = vltEngine.GetTemplate("login.htm");

                //根据模板的上下文,将模板生成的内容写进刚才定义的字符串输出流中
                StringWriter vltWriter = new StringWriter();
                vltTemplate.Merge(vltContext, vltWriter);
                string html = vltWriter.GetStringBuilder().ToString();
                context.Response.Write(html);
            }
        }

   然后在项目里,添加一个文件夹并且命名为template,作为存放模板的目录,这与上面代码里设置的模板目录要对应一致,然后添加新建项,选择HTML页,命名为login.htm,代码:

<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>登录</title>
</head>
<body>
<form action="../login.ashx">
用户名:<input type="text" name="username" value="$username" /><br />
密&nbsp;&nbsp;&nbsp; 码:<input type="text" name="password"  value="$password" /><br />
<input type="hidden" name="ispostback" value="true" />
<input type="submit" value="提交"/>
<p>$msg</p>
</form>
</body>
</html>

  直接运行HTML肯定只能看到模板的效果而已,我们工作的原理是,在一般处理程序ashx中读取模板来生成HTML,并且输出给客户端浏览器,所以我们要访问的应该是一般处理程序ashx。

E、Nvelocity模板语法

后台代码基本就是那样了,对于Nvelocity的重点应该是如何去编写适合需求的模板,上面的例子Put的时候,都是以字符串为例的,那么,假如Put一个对象、集合呢?

  1、基本用法

  vltContext.Put("username", username);
     在模板中可以通过$username来引用

  <input type="text" name="username" value="$username" />

  2、对象的属性

  下面演示一些更加高级的用法,直接Put一个对象,然后在模版中引用其属性。Nvelocity还可以支持对象的属性是对象的调用方法,引用的时候就好比$p.Name。

  先定义一个C#类,Person.cs

public class Person
    {
        public string name{ get; set; }
        public string age { get; set; }
    }

  然后,在处理的.ashx文件中初始化模板与输入:

Person p = new Person();
p.name = "Dragon";
p.age  = "11111";

//传入模板所需要的参数
vltContext.Put("p", p);

  在.htm文件中调用对象:

用户名:<input type="text" name="username" value= "$p.name" /><br />
年&nbsp;&nbsp;&nbsp; 龄:<input type="text" name="password"  value= "$p.age" /><br />

  3、对象的索引

  在.ashx文件初始化模板与输入:

Dictionary<string,string> dict = new Dictionary<string,string>();
dict["name"] = "Dragon";
dict["address"]  = "guangxi";

//传入模板所需要的参数
vltContext.Put("dict", dict);

  在.htm文件中调用对象:

$dict.name<br />
$dict.address

  4、ForEach遍历  

  用List方式

  在.ashx文件初始化模板与输入:

//List类型
List<Person> lstps = new List<Person>();
lstps.Add(new Person{ name = "Dragon",age = "30"});
lstps.Add(new Person{ name = "YYK", age = "28" });

  格式:

  #foreach($element in $list)

    This is $element

  #end

  在.htm文件中调用对象:

<ul>
#foreach($p in $lstps)
    <li>$p.name,$p.age</li>
#end
</ul>

  在前台的模版中,有关后台代码的编写,如果以#开头,比如#foreach ,因为没有大括号的约束,所以结束时以#end为标识,ForEach和If还可以嵌套使用,就像平时我们写后台代码的那样,只是语法稍稍有点不同而已。

  5、IF判断

  在.ashx文件初始化模板与输入:

//数组
string[] strs = {"Dragon","guangxi","web"};
//传入模板所需要的参数
vltContext.Put("strs", strs);

  在.htm文件中调用对象:

  格式:

  #if(condition)
  #elseif(condition)
  #else
  #end

<ul>
#foreach($str in $strs)
    #if ($str == "Dragon")
    <li>$str</li>
    #elseif($str == "guangxi")
    <li>$str</li>
    #end
#end
</ul>

  6、Parse和Include

  顾名思义,#include就是在模版中在将其他模版包括进来,就好比网站的头部,尾部,广告模版等等,这些内容都是相同的时候,就可以做成一个单独的模版供各处引用。

  #parse的用法跟#include相类似,如果将上面的代码改成#parse之后,效果是一样的,#parse的特殊功能在于,它可以解析Nvelocity元素,比如,body.html 模版使用Nvelocity变量  $body ,如果使用#parse引用head.html和footer.html两个模版,则在head.html、footer.html模版中继续可以使用$body这个变量,而#include做不到,并且相关的Nvelocity元素(#foreach、#if)也不起效果,只能原样输出,所以#parse > #inclued。

  7、使用#set

  前台的Nvelocity代码中,根据需要,我们可以声明一个供前台使用的参数,这样就免得后台代码再次传递过来了,对于一些简单逻辑,我们可以这样实现

  在.htm文件中调用对象:

#set($a=1+6)
<p style="text-align:center">A的值是:$a</p>

  使用匿名类来进行代码封装

对于Nvelocity我们的重点应该是放在编写适合需求的模板,后台的代码基本上是一次封装,多次调用即可了,只需要把要Put的对象做成一个可变参数,剩余的代码进行一个封装就行了,那么如何更好的调用,我建议使用匿名类,因为随着模板的编写,我们可能需要传递多种、多个数据,使用匿名类的好处就是,类属性自定义而不用像自定义一个类型那样,每次增加数据属性就得去修改一下类型,这样显得很优雅很随性简便。

//匿名类
var models = new { head = new { title = "匿名类测试",head = "电子政务系统" }, foot = new { content = "技术支持:Dragon" } };

Nvelocity模板引擎

时间: 2024-08-27 20:18:48

Nvelocity模板引擎的相关文章

只需一句话就能搞定NVelocity模板引擎,源码+解析+文档+资料+注释

好长时间不发技术方面的动态了,今天无聊就发篇关于NVelocity的技术文章吧,这门技术来源于java开源项目Velocity,比较好用,其他的我也不过多介绍了,没听过的在文章末尾会有介绍,下面我们就实战吧~ 咱们直接上最简单的方法,一句话搞定: DNTNvelocityHelper.NvelocityTemplate(context.Request.MapPath("~/NVelocity/templates/"), context, "Templater_index.dn

Asp.net动态页面静态化之初始NVelocity模板引擎

Asp.net动态页面静态化之初始NVelocity模板引擎 静态页面是网页的代码都在页面中,不须要运行asp,php,jsp,.net等程序生成client网页代码的网页,静态页面网址中一般不含"?"."="."&"等特殊符号. 静态页面不能自主管理公布更新的页面,假设想更新网页内容,要通过FTP软件把文件DOWN下来用网页制作软件改动(通过fso等技术例外) 常见的静态页面举例:.html扩展名的..htm扩展名的. 注意:静态页面并

WebPart中使用Nvelocity模板引擎来进行呈现

WebPart中使用Nvelocity模板引擎来进行呈现 分类: SharePoint2011-06-15 08:29 1479人阅读 评论(1) 收藏 举报 模板引擎encodingsharepointxml测试css NVelocity是一套强大的模板引擎,在我之前的随笔中,有过使用它来呈现页面及生成静态页的例子.通过使用它,我们可以达到界面与数据的完成分离(当然需要一些设计手段来支持).我在公司里的工作主要就是在office sharepoint2007的基础上进行一些类型信息系统的门户站

NVelocity模板引擎在项目中的应用

NVelocity是一个基于.NET的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来引用由.NET代码定义的对象.至于其他的一些别的NVelocity的的解释.和一些用法这里就不在提及. 具体的使用方法: 1,定义Velocity辅助类(VelocityHelper.cs) 提供下载  当然,这个辅助类需要添加NVelocity.dll的引用. 2,aspx页面和Template的结构说明 这个其实是需要根据个人喜好来定!为

C#模板引擎NVelocity实战项目演练

一.背景需求 很多人在做邮件模板.短信模板的时候,都是使用特殊标识的字符串进行占位,然后在后台代码中进行Replace字符串,如果遇到表格形式的内容,则需要在后台进行遍历数据集合,进行字符串的拼接,继而Replace模板中的占位符 !今天给大家分享一个WinForm方面的模板引擎的小技巧和小技能吧,本次课程阿笨给大家分享关于WinForm开发中如何通过模板引擎NVelocity根据动态数据生成漂亮的订单详细查看页面? 1.1.本次分享课程包含知识点如下: 1).WinForm中WebBrowse

强大的模板引擎开源软件NVelocity

背景知识NVelocity(http://sourceforge.net/projects/nvelocity )是从java编写的Velocity移植的.net版本,是java界超强的模版系统,.net版本的NVelocity目前版本为0.42.NVelocity拥有完善的.丰富的模板语言(VTL,Velocity Template Language) ,几乎所有高级语言的特性都可以在模板引擎语言中找到.(如流程控制语句.数学运算.关系和逻辑操作符.函数定义.注释等等) NVelocity可以

使用模板引擎(Nvelocity)写代码生成器

之前做了一个项目,由于数据库表比较多,每次都手写model,还有数据库操作之类的东西,感觉浪费时间,也没技术含量,还容易出错,最主要的原因还是懒,不想翻来覆去的写这种代码,于是想到要用代码生成器直接生成,在网上找到很多,但是生成的代码要么看着不安逸,毕竟每个人的风格不同,要么就是生成很多自己根本不需要的垃圾代码,正好最近闲来无事,决定自己动手写一个. 一开始我是想到使用stringbuilder拼接字符串来实现,但是字符串拼接起来相当麻烦,代码量也很多,看起乱糟糟的很不舒服,还有就是得注意格式,

前端模板引擎arttemplate,后端模板引擎Nvelocity

It's my first blog 大家好,我叫曾岑,朋友们都叫我包子,今年21岁,湖北人,刚大学毕业,学的.net开发.去年一年,在南京工作了一年,那时候还没有拿到毕业证,找工作也是蛮难的,别人说没毕业证,也没经验,工资只能给个基础工资,不过还好,和几个朋友一起结伴去的,一起租的房子住的.在南京的工作经历就不说那么多了,至少让我看到了编程的这个世界. 今年7月份,辞掉了南京的工作,来到了深圳这个城市,重新开始找工作,运气还算不错,第二天就面试上了,第三天就正式上班了,工资待遇对于我这种新手来

ASP.NET 模板引擎 - NVelocity

1,HTML的Form表单数据按Button提交数据以后,提交到 Action 指定的服务器端处理程序(.ashx)进行处理后 ,再响应的浏览器. 2,我们把 HTML的表单,写到 .ashx 一般处理程序页面中,这样就一般处理程序页面就可以显示 Form表单登陆,并且可以处理是否登陆成功的逻辑部分,前台显示和后天业务逻辑整合到了一起,如下: public void ProcessRequest(HttpContext context) { context.Response.ContentTyp