1、VTemplate模板引擎的简介

VTemplate模板引擎也简称为VT,是基于.NET的模板引擎,它允许任何人使用简单的类似HTML语法的模板语言来引用.NET里定义的对象。当VTemplate应用于web开发时,界面设计人员可以和程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只关注页面的显示效果,而由程序开发人员关注业务逻辑编码。VTemplate将.NET程序代码从web页面中分离出来,这样为web站点的长期维护提供了便利,同时也为我们在ASP.NET WebForm开发之外又提供了一种可选的方案。 VTemplate也可以作为动态文本生成工具,生成HTML、XML、邮件、程序源代码或其它文本等。

2、VTemplate模板的特色:

2.1、VT是一种解释型的模板引擎,所以你可以随时更改你的模板代码以获得不同的输出,而不需要重新编译程序代码
2.2、VT支持缓存,也就是模板只需要解析一次,下次就可以直接从内存里构建您的模板对象而不需要再次解析模板代码,除非相关的模板文件已被修改。
2.3、VT的模板标签语法是基于HTML规范定义的元素,所以对页面设计人员来说是非常友好的。
2.4、VT模板支持循环、条件判断、数值表达式计算等,以方便你在模板里直接进行逻辑处理。

2.5、VT支持直接调用对象里的方法
例子:
------------模板代码--------------
<vt:function var="data" method="GetData" type="$user" />
<vt:set var="data" value="$user.GetData()" />
----------------------------------

上面模板里第一种采用function标签调用user对象的GetData方法,第二种则直接采用变量表达式执行方法。

2.6、VT可以很灵活的直接获取对象的属性、字段、集合项等数据。
例子:
------------模板代码--------------
<h4>姓名:{$user.name}</h4>
----------------------------------

上面的变量元素里,user可以为

public class user{
 public string name;
}

也可以为
public class user{
 public string name{get;set;}
}

也可以为
var user = new Dictionary<string, string>();
user.Add("name","张三");

VT会自动判断user对象的name是存在于对象的字段、属性还是集合项里。

3、VTemplate模板范例

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
<html> 
<head> 
<title> test1 </title> 
</head> 
<body> 
<vt:for from="1" to="9" index="i"> 
<vt:for from="1" to="$i" index="j"> 
<vt:expression var="r" args="$i" args="$j" expression="{0}*{1}" />{$:i}*{$:j}={$:r}&nbsp;&nbsp;&nbsp;&nbsp; 
</vt:for> 
<br /> 
</vt:for> 
</body> 
</html>

以上模板代码经过VTemplate解析运行后将输出一个99乘法表,如下:

1*1=1     
2*1=2     2*2=4     
3*1=3     3*2=6     3*3=9     
4*1=4     4*2=8     4*3=12     4*4=16     
5*1=5     5*2=10     5*3=15     5*4=20     5*5=25     
6*1=6     6*2=12     6*3=18     6*4=24     6*5=30     6*6=36     
7*1=7     7*2=14     7*3=21     7*4=28     7*5=35     7*6=42     7*7=49     
8*1=8     8*2=16     8*3=24     8*4=32     8*5=40     8*6=48     8*7=56     8*8=64     
9*1=9     9*2=18     9*3=27     9*4=36     9*5=45     9*6=54     9*7=63     9*8=72     9*9=81

而程序处理代码则只有简单的两行,如下: 
注:假设上面的模板代码存放在test1.html文件上

TemplateDocument document = new TemplateDocument(Server.MapPath("template/test1.html"), Encoding.UTF8); 
document.Render(Response.Output);

4、什么是VT模板元素?

VT模板元素VTemplate模板引擎定义的有特殊作用的模板语言元素,分为标签元素变量元素

4.1、标签元素都是程序逻辑控制元素,是标准的HTML标签元素,如上例中用于循环处理的<vt:for>标签和用于计算表达式值的<vt:expression>标签等

4.2、变量元素是数据输出元素,其格式是以“{$:”字符开头,以“}”字符结束。 如上例中的{$:i}、{$:j}和{$:r}等

注:3.7版本后,变量元素的定义可以取消“:”号,即以“{$”字符开头,如{$i}、{$j}与上面的定义不同,但都是一样输出变量的值。

5、变量、变量标识、变量表达式

5.1、变量是VTemplate模板引擎中的核心元素,用于存储或控制数据的输出,其类似于程序语言中的“变量”概念,定义格式也是一样。如上例中的i,j,r变量。

5.2、变量标识由两部分组成:变量前缀与变量(名)。其中“变量前缀”可以省略,如“#.i”,“#u.i”,“u“

变量前缀:以#号开头后跟模板块的Id值,用于指示此变量是取自于对应Id的模板块下的变量,如#my.user则表示user变量是取自于Id为my的模板块下的变量;如果省略Id 号,即前缀只为#号,则表示是当前模板块下的变量;而如果前缀是“##”,则表示是当前模板块的父模板块(如果不存在父级模板块则为当前模板块)下的变量;如果省略前缀,则表示是文档(根)模板块的变量。

5.3、变量表达式则是定义获取变量中某个字段、属性或函数方法结果值。

定义格式为:“变量标识.变量字段/属性/函数方法/索引值”。

变量字段/属性/函数方法/索引值:表示要从变量中取得数据的字段/属性/函数方法/索引值(数字),其中函数方法只支持不带参数的方法。此段可以定义0次或多次。

例子:

#my.user Id为my的模板块下的变量user的值
#my.user.age Id为my的模板块下的变量user的age属性/字段值
#my.user.location.getcity() Id为my的模板块下的变量user的location属性/字段值的getcity方法返回的值
#.user 当前模板块下的变量user的值
#.user.age.tostring() 当前模板块下的变量user的age属性/字段值的tostring方法返回的值
##.user.location.city 当前模板块的父级模板块的变量user的location属性/字段值的city属性/字段的值
user.age 文档(根)模板块的变量user的age属性/字段值
weeks.0 文档(根)模板块的变量weeks的0索引位置的值
#.users.0.name 当前模板块下变量users的0索引位置的值的name字段/属性值

注:变量表达式可在“变量元素”或“标签元素”的部分属性值中使用。

6、标签元素

6.1、<vt:template>模板块标签元素

此标签用于定义模板块。在VTemplate的模板规范中,变量是基于模板块存在的,同模板块下同名的变量都是引用同一个变量实例,但不同模板块中的同名变量都是互相独立互不影响的。

标签样例:

<vt:template id="mytemplate" name="mytemplate">…………………………</vt:template>

或自闭合的样例:

<vt:template id="filetemplate" file="include/myfile.html" charset="utf-8" />

标签中已定义的属性列表:

名称 说明
id 标签元素的Id,建议唯一但不强制。(可不定义)
name 标签元素的名称。(可不定义)
file 模板块数据文件的路径地址,可以绝对或相对地址
charset 模板块数据文件的编码,如果未定义则如果存在父级模板块的话则采用父级模板块的编码,否则采用系统默认编码
render 定义用于处理此模块数据的实例,可以为字符串常量或变量表达式(以$字符开头),格式:"类实例,程序集"。如果已定义此属性但未定义rendermethod属性,则类实例必须已实现ITemplateRender接口。(可不定义)
rendermethod 定义用于处理此模块数据的类实例的方法,可以为字符串常量或变量表达式(以$字符开头),此方法必须已标记TemplateRenderMethodAttribute特性。(可不定义)

6.2、<vt:include>文件包含标签元素

此标签用于包含外部文件。

标签样例:

<vt:include file="include/myfile.html" charset="utf-8">…………………………</vt:include>

或自闭合的样例:

<vt:include file="include/myfile.html" charset="utf-8" />

标签中已定义的属性列表:

名称 说明
id 标签元素的Id,建议唯一但不强制。(可不定义)
name 标签元素的名称。(可不定义)
file 模板块数据文件的路径地址,可以绝对或相对地址
charset 模板块数据文件的编码,如果未定义此属性则如果存在父级模板块的话则采用父级模板块的编码,否则采用系统默认编码

6.3、<vt:for>循环标签元素

此标签用于定义数据循环,类似于程序语言中的for循环。

标签样例:

<vt:for from="1" to="9" index="i">…………………………</vt:for>

标签中已定义的属性列表:

名称 说明
id 标签元素的Id,建议唯一但不强制。(可不定义)
name 标签元素的名称。(可不定义)
from 循环起始值,可为一个数值常量(如:1)或变量表达式(必须以$字符开头,如:$i)
to 循环结束值,可为一个数值常量(如:1)或变量表达式(必须以$字符开头,如:$i)
step 循环值的步值,可为一个数值常量(如:1)或变量表达式(必须以$字符开头,如:$i),如果未定义此属性,则默认为1
index 定义存储循环索引值的变量标识,注:此索引值是一个LoopIndex实例。(可不定义)

6.4、<vt:foreach>集合数据循环标签元素

此标签用于定义处理集合数据的循环,类似于程序语言中的foreach循环。

标签样例:

<vt:foreach from="users" item="user" index="i">…………………………</vt:foreach>

标签中已定义的属性列表:

名称 说明
id 标签元素的Id,建议唯一但不强制。(可不定义)
name 标签元素的名称。(可不定义)
from 变量表达式
item 定义存储当前循环值的变量标识。(可不定义)
index 定义存储循环索引值的变量标识,注:此索引值是一个LoopIndex实例。(可不定义)
groupsize

设置拆分数据集合时的组大小,可以为数值常量(如:2)或变量表达式(以$字符开头)。(可不定义)
如果定义此属性值,并且值大于1,则模板引擎在解析此foreach标签时,先将from属性定义的变量表达式的结果值折分成一组组集合数据再进行解析。

例如:from的变量表达式的结果值原是“1,2,3,4,5,6”数组集合,如果groupsize设置为2,则将会拆成"[1,2],[3,4],[5,6]"的数据集合,再用此新的数据集合进行循环解析。

6.5、<vt:foreachelse>空集合数据循环标签元素

此标签用于定义当集合数据为空(数量为0)时显示处理的节点。此标签必须在<vt:foreach>标签中定义,并且此标签为单节点标签(即不需要配对的结束标签)。

标签样例:

<vt:foreach from="users" item="user" index="i">

{$:i}、我叫{$:user.name},今年{$:user.age}岁

<vt:foreachelse />

没有任何用户

</vt:foreach>

注:当users集合数据为空时则显示"没有任何用户"字样,否则不显示此字样。

标签中已定义的属性列表:

名称 说明
id 标签元素的Id,建议唯一但不强制。(可不定义)
name 标签元素的名称。(可不定义)

6.6、<vt:if>条件判断标签元素

此标签用于定义数据条件判断,类似于程序语言中的if语句。

标签样例:

<vt:if var="user.age" value="20" compare=">">…………………………</vt:if>

标签中已定义的属性列表:

名称 说明
id 标签元素的Id,建议唯一但不强制。(可不定义)
name 标签元素的名称。(可不定义)
var 用于判断条件的变量表达式
value 用于比较条件的值,可为数值/字符串常量或变量表达式(必须以$字符开头,如:$i) 
注:此属性可以多次定义,当var变量表达式中的值和其中一个value属性值匹配时即符合条件。
compare

比较的方式,可以为字符串常量或变量表达式(以$字符开头),值的定义范围: 
> : 大于 
>= : 大于等于 
< : 小于 
<= : 小于等于 
!=或<> : 不等于 
= 或== : 相等

^= : 判断是否以某些值开始(字符比较)

$= : 判断是否以某些值结束(字符比较)

*= : 判断是否包含有某些值(字符比较)
如果未定义此属性则表示采用“相等”比较。

expression 定义需要简单运算的表达式,可以为字符串常量或变量表达式(以$字符开头),表达式中支持 “{0}”标记,用于代替var属性的变量表达式的值。(可不定义)

6.7、<vt:elseif>条件分支判断标签元素

此标签用于定义数据条件的分支判断。类似于程序语言中的else if语句。此标签可以同时支付一个或多个。此标签只能在<vt:if>标签中定义,并且此标签为单节点标签(即不需要配对的结束标签)。

标签样例:

<vt:if var="user.age" value="20">

20岁用户 
<vt:elseif value="30” />

30岁用户

<vt:elseif value="40” />

40岁用户

</vt:if>

标签中已定义的属性列表:

名称 说明
id 标签元素的Id,建议唯一但不强制。(可不定义)
name 标签元素的名称。(可不定义)
var 用于判断条件的变量表达式。如果未定义此属性,则为标签所在的<vt:if>标签中的var属性值
value 用于比较条件的值,可为数值/字符串常量或变量表达式(必须以$字符开头,如:$i) 
注:此属性可以多次定义,当var变量表达式中的值和其中一个value属性值匹配时即符合条件。
compare

比较的方式,可以为字符串常量或变量表达式(以$字符开头),值的定义范围: 
> : 大于 
>= : 大于等于 
< : 小于 
<= : 小于等于 
!=或<> : 不等于 
= 或== : 相等

^= : 判断是否以某些值开始(字符比较)

$= : 判断是否以某些值结束(字符比较)

*= : 判断是否包含有某些值(字符比较)
如果未定义此属性则表示采用“相等”比较。

expression 定义需要简单运算的表达式,可以为字符串常量或变量表达式(以$字符开头),表达式中支持 “{0}”标记,用于代替var属性的变量表达式的值。(可不定义)

6.8、<vt:else>条件分支判断标签元素

此标签用于定义数据条件的分支判断,即当<vt:if>标签中的所有条件分支都条件不成立时用于显示处理的节点。类似于程序语言中的else语句。此标签只能在<vt:if>标签中定义,并且此标签为单节点标签(即不需要配对的结束标签)。

标签样例:

<vt:if var="user.age" value="20">

20岁用户 
<vt:elseif value="30” />

30岁用户

<vt:else />

未知岁数

</vt:if>

标签中已定义的属性列表:

名称 说明
id 标签元素的Id,建议唯一但不强制。(可不定义)
name 标签元素的名称。(可不定义)

6.9、<vt:expression>表达式标签元素

此标签用于对变量表达式进行简单数据运算。

标签样例:

<vt:expression var="r" args="$i" args="$j" expression="{0}*{1}" />

标签中已定义的属性列表:

名称 说明
id 标签元素的Id,建议唯一但不强制。(可不定义)
name 标签元素的名称。(可不定义)
var 存储表达式运算结果的变量标识
args 参与表达式计算的数值或变量表达式(以$字符开头)。(可不定义) 
注:此属性可以多次定义,在表达式中分别以{0},{1}表示各个args属性的变量表达式值
expression 要进行运算的表达式,可以为字符串常量或变量表达式(以$字符开头)。
output 是否在解析标签时输出标签的结果值true/false,如果定义此属性且值设为true,则可以不定义var属性(即不存储结果值),默认不输出标签结果值。(可不定义) 

6.10、<vt:serverdata>服务器数据标签元素

此标签用于获取服务器的部分数据,如Session、Application、DateTime等等。

标签样例:

<vt:serverdata var="session" type="session" item="username" />

标签中已定义的属性列表:

名称 说明
id 标签元素的Id,建议唯一但不强制。(可不定义)
name 标签元素的名称。(可不定义)
var 存储服务器数据的变量标识
type

要获取服务器数据的类型,可以为字符串常量或变量表达式(以$字符开头)。值的定义:

类型 说明
Time

获取服务器时间

item 属性值可定义为以下值:

today = 获取今天的日期(不带时间部分)

yesterday = 获取昨天的日期(不带时间部分)

tomorrow = 获取明天的日期(不带时间部分)

其它值 = 获取服务器现在的时间

Random

获取一个0---1之间的双精度随机数

item 属性不需要定义

Application

获取服务器当前上下文的HttpApplicationState对象.如果模板引擎不在Web程序上使用则无效

item 属性值则为Application集合的键值key

Session

获取服务器当前上下文的HttpSessionState对象.如果模板引擎不在Web程序上使用则无效

item 属性值则为Session集合的键值key

Cache

获取服务器当前上下文的缓存对象

item 属性值则为Cache集合的键值key

QueryString

获取服务器当前上下文的Request.QueryString数据集合.如果模板引擎不在Web程序上使用则无效

item 属性值则为Request.QueryString集合的键值key

Form 获取服务器当前上下文的Request.Form数据集合.如果模板引擎不在Web程序上使用则无效

item 属性值则为Request.Form集合的键值key

Cookie

获取服务器当前上下文的Request.Cookie数据集合.如果模板引擎不在Web程序上使用则无效

item 属性值则为Request.Cookie集合的键值key,如果item值包含“.”号,则表示属于某个Cookie下的某个Value值,例如:

item="user"则表示是Request.Cookie["user"]值;
item="user.name"则表示是Requst.Cookie["user"]["name"]值

ServerVariables 获取服务器当前上下文的Request.ServerVariables数据集合.如果模板引擎不在Web程序上使用则无效

item 属性值则为Request.ServerVariables集合的键值key

RequestParams 获取服务器当前上下文的Request.Params数据集合.如果模板引擎不在Web程序上使用则无效

item 属性值则为Request.Params集合的键值key

Request 获取服务器当前上下文的HttpRequest对象.如果模板引擎不在Web程序上使用则无效

item 属性不需要定义

Environment 获取服务器系统平台的环境参数

item 属性不需要定义

AppSetting 获取当前应用程序配置文件里的AppSettings配置参数

item 属性值则为ConfigurationManager.AppSettings集合的键值key

item 要获取的数据项,此属性值根据type值而具有不同的意义,具体的看上表,可以为字符串常量或变量表达式(以$字符开头)。
output 是否在解析标签时输出标签的结果值true/false,如果定义此属性且值设为true,则可以不定义var属性(即不存储结果值),默认不输出标签结果值。(可不定义)

6.11、<vt:datareader>数据读取标签元素

此标签用于直接从数据源读取数据。
注意:此标签必须采用TagOpenMode=Full的TemplateDocumentConfig时才允许使用。

标签样例:

<vt:datareader var="members" connection="memberdb" commandtext="select * from [member]" />

标签中已定义的属性列表:

名称 说明
id 标签元素的Id,建议唯一但不强制。(可不定义)
name 标签元素的名称。(可不定义)
var 存储返回数据的变量标识
connection

数据源名称.此名称必须已在项目配置文件(如:web.config)里的connectionStrings节点里定义,可以为字符串常量或变量表达式(以$字符开头).

commandtext 数据查询语句(SQL语句) ,可以为字符串常量或变量表达式(以$字符开头)
commandtype

数据查询语句的类型。值范围对应于System.Data.CommandType枚举,可以为字符串常量(如:Text)或变量表达式(以$字符开头)。(可不定义)

注:当未定义时默认为CommandType.CommandText值

rowindex 要获取行的行号,可以为数值常量(如:1)或变量表达式(以$字符开头)(可不定义)
注:当此值不定义时将返回一个表结构(DataTable),而如果定义此值,则将返回对应行的数据行(DataRow),如果行不存在则返回null
parameters

数据查询语句中的附加参数的数值/字符串常量或变量表达式(以$字符开头)(可不定义)
注:此属性可以多次定义,在数据查询语句中分别以@p0,@p1表示各个parameters属性的变量表达式值

例子:
<vt:datareader var="members" connection="db" commandtext="select * from [member] where id>=@p0 and sex=@p1" parameters="id" parameters="sex" />

ParameterFormat

数据查询参数的格式,可以为字符串常量或变量表达式(以$字符开头),默认为"@p{0}",其中"{0}"是占位符,表示各查询参数的索引数字(也即是parameters属性的先后顺序)。(可不定义)

注:如果定义此属性则commandtext里的语句也必须相应更改。

例子:
<vt:datareader var="members" connection="db" commandtext="select * from [member] where id>=&par0 and sex=&par1" parameters="id" parameters="sex" parameterformat="&par{0}" />

6.12、<vt:function>函数调用标签元素

此标签用于直接调用函数。标签样例:

<vt:function var="days" method="DaysInMonth" type="System.DateTime" args="2009" args="10" />
<vt:function var="UTCTime" method="ToUniversalTime" type="$time" />

标签中已定义的属性列表:

名称 说明
id 标签元素的Id,建议唯一但不强制。(可不定义)
name 标签元素的名称。(可不定义)
var 存储函数返回值的变量标识
method

函数方法名,可以为字符串常量或变量表达式(以$字符开头)

type 包含静态函数方法的类型或包含函数方法的类型,可以为字符串常量或变量表达式(必须以$字符开头,如:$i) (可不定义)
注:当未定义此属性时,将从模板块里获取注册的“用户自定义函数”,函数的原型参考UserDefinedFunction委托。
args

参与函数运算的参数,可为数值/字符串常量或变量表达式(必须以$字符开头,如:$i) (可不定义)
注:此属性可以多次定义,但其定义顺序必须与函数方法的参数顺序一致。

output 是否在解析标签时输出标签的结果值true/false,如果定义此属性且值设为true,则可以不定义var属性(即不存储结果值),默认不输出标签结果值。(可不定义)

6.13、<vt:property>获取字段或属性值标签元素

此标签用于直接获取字段或属性值。标签样例:

<vt:property var="time" field="Now" type="System.DateTime" />
<vt:property var="year" field="Year" type="$time" />

标签中已定义的属性列表:

名称 说明
id 标签元素的Id,建议唯一但不强制。(可不定义)
name 标签元素的名称。(可不定义)
var 存储字段或属性值的变量标识
field

字段或属性名,可以为字符串常量或变量表达式(以$字符开头).

type 包含静态字段或属性的类型或包含字段或属性的类型,可以为字符串常量或变量表达式(必须以$字符开头,如:$i)
output 是否在解析标签时输出标签的结果值true/false,如果定义此属性且值设为true,则可以不定义var属性(即不存储结果值),默认不输出标签结果值。(可不定义)

6.14、<vt:set>变量赋值标签元素

此标签用于向模板变量赋值。标签样例:

<vt:set var="time" value="2009-08-09" />
<vt:set var="time" value="$year" value="$month" value="$day" format="{0}-{1}-{2}" />

标签中已定义的属性列表:

名称 说明
id 标签元素的Id,建议唯一但不强制。(可不定义)
name 标签元素的名称。(可不定义)
var 需要赋值的变量标识
value

要赋于变量的值,可为数值/字符串常量或变量表达式(必须以$字符开头,如:$i)
注:此属性可以多次定义,但如果多次定义则必须定义format属性。

format 用于格式化变量值的格式,可以为字符串常量或变量表达式(以$字符开头)。(可不定义)
注:在格式表达式中分别以{0},{1}表示各个value属性的变量值
output 是否在解析标签时输出标签的结果值true/false,如果定义此属性且值设为true,则可以不定义var属性(即不存储结果值),默认不输出标签结果值。(可不定义)

6.15、<vt:output>数据输出标签元素

此标签可输出某个标签或文件的数据。标签样例:

<vt:output tagid="user" />
<vt:output file="output.html" charset="gb2312" />

标签中已定义的属性列表:

名称 说明
id 标签元素的Id,建议唯一但不强制。(可不定义)
name 标签元素的名称。(可不定义)
tagid 需要输出数据的其它标签元素Id,可以为字符串常量或变量表达式(以$字符开头)。(可不定义)
注:如果未定义此属性则需要定义file属性
file

需要输出数据的文件,可以为绝对路径或相对路径,可以为字符串常量或变量表达式(以$字符开头)。(可不定义)

注:如果未定义此属性则需要定义tagid属性

charset 读取文件时使用的编码,可以为字符串常量或变量表达式(以$字符开头)。(可不定义)

6.16、<vt:import>类型导入标签元素

此标签可导入某个类型。标签样例:

<vt:import var="math" type="System.Math" />

<vt:import var="utils" type="Kingthy.Utils" assembly="c:\dll\kingthy.utils.dll"  />
  
标签中已定义的属性列表:

名称 说明
id 标签元素的Id,建议唯一但不强制。(可不定义)
name 标签元素的名称。(可不定义)
var 用于保存类型的变量标识
type

需要导入的类型,可以为字符串常量或变量表达式(以$字符开头)

assembly 需要导入的类型所在的程序集,可以为字符串常量或变量表达式(以$字符开头),值可以定义为某个程序集文件或程序集名称。(可不定义)

6.17、<vt:panel>数据面板标签元素

此标签可方便用于实现“母版页”(MasterPage)的功能。标签样例:

定义容器面板:

<vt:panel id="header" />

定义内容数据面板,此内容标签里的数据将在对应的容器面板里输出。

<vt:panel container="header">

这是头部内容

</vt:panel >

上面定义的标签的数据将会在id="header"里的panel标签里输出。

标签中已定义的属性列表:

名称 说明
id 标签元素的Id,建议唯一但不强制。如果定义了此id则表示此面板标签可以做为一个容器面板使用(可不定义)
name 标签元素的名称。(可不定义)
container 定义输出容器面板的id。如果定义此属性则表示此面板数据只在容器面板里输出。(可不定义)

注意:此标签必须定义id或者container之一属性,或者全都定义

7、变量元素

变量元素主要用于输出变量表达式的值。其定义格式为:

{$:变量表达式 属性="属性值"}

或3.7版本以上可以这样定义(建议)

{$变量表达式 属性="属性值"}

例子:

{$:i}、{$:user.age format=”00”}、{$:user.name length=”20” htmlencode=”true”}

{$:#my.i}、{$:##.user.age}、{$:#my.user.location.getcity() htmlencode=”true”}

元素中已定义的属性列表:

名称 说明
htmlencode 输出变量表达式的值时是否需要进行HTML字符编码。true/false,默认为false(可不定义)
urlencode 输出变量表达式的值时是否需要进行URL字符编码。true/false,默认为false(可不定义)
xmlencode 输出变量表达式的值时是否需要进行XML字符编码。true/false,默认为false(可不定义)
textencode 输出变量表达式的值时是否需要进行文本字符编码(先进行HTML字符编码,再将“空格”转换为"&nbsp;”;“回车换行”转换为"<br />”字符)。true/false,默认为false(可不定义)
jsencode 输出变量表达式的值时是否需要进行Javascript脚本字符编码。true/false,默认为false(可不定义)
format 用于格式化变量表达式的值的格式(如果变量表达的值已实现IFormattable接口则调用接口方法,否则调用String.Format方法)。(可不定义)
length 输出变量表达的值时的最大长度。如果值的字符长度超出此定义的值,则将进行字符截取。默认为0不截取(可不定义)
charset 定义在进行urlencode或length截取字符时采用的编码。默认为所在模板块的charset(可不定义)
appendtext

定义文本在输出时如果被裁剪后要附加显示的文本。(可不定义) 
注: 此属性必须和length属性配合使用。

removehtml 定义在数据输出时是否将数据里的HTML字符删除。(可不定义)
call 在输出变量表达式的值前需要调用的函数名称。(可不定义) 
注:此属性可以多次定义,模板引擎将根据定义顺序先后调用函数。函数的原型参考UserDefinedFunction委托

8、注释标签:

注:注释标签只在2.1以上版本有效

格式:<!--vt[注释文字]-->

注释标签在解析输出时不会被输出显示,并且注释里面可以书写任何的标签元素,都不会被VTemplate模板引擎解析。

例子:

<!--vt[这是VT的注释代码,下面的标签不会被解析到<vt:serverdata type="time" output="true" />。]-->

9、项目托管: 
VTemplate项目托管在Google code上。 
URL: http://net-vtemplate.googlecode.com/ 
SVN: http://net-vtemplate.googlecode.com/svn/src/VTemplate.Engine/

例子请参考VTemplate.WebTester项目

http://net-vtemplate.googlecode.com/svn/src/VTemplate.WebTester/

注:已建立VTemplate模板引擎技术交流QQ群,欢迎各位加入参与项目开发或技术探讨。QQ群:884468

基于.NET的免费开源的模板引擎---VTemplate(转)的更多相关文章

  1. 基于tp5的免费开源企业官网系统

    基于tp5的免费开源企业官网系统 基本功能: 自定义菜单,单页 添加新闻文章前台展示 前台页面自动适配电脑与手机端等.后台模板用的是:AdminLTE 项目放在github上有兴趣开源下载看看 htt ...

  2. httl开源JAVA模板引擎,动态HTML页面输出

    HTTL(Hyper-Text Template Language)是一个适用于HTML输出的开源JAVA模板引擎,适用于动态HTML页面输出,可用于替代JSP页面,它的指令类似于Velocity. ...

  3. 基于ABP做一个简单的系统——实战篇:4.基于富文本编辑器,Razor模板引擎生成内容并导出Word 填坑记录

    起因 需求是这样的,有一种协议需要生成,协议的模板是可配置的,在生成过程中,模板中的内容可以根据约定的标记进行替换(就像mvc的razor模板一样).生成后的内容还需要导出成word或pdf. 常见的 ...

  4. apache的开源项目-模板引擎(Velocity)(转)

    然后修改conf文件下的server.xml文件,在server.xml里的           <Connector port="8080" .... />字段后   ...

  5. .NET Core/.NET5/.NET6 开源项目汇总13:模板引擎

    系列目录     [已更新最新开发文章,点击查看详细] 开源项目是众多组织与个人分享的组件或项目,作者付出的心血我们是无法体会的,所以首先大家要心存感激.尊重.请严格遵守每个项目的开源协议后再使用.尊 ...

  6. *关于httl开源Java模板的使用心得

    1.简介 HTTL (Hyper-Text Template Language) 是一个高性能的开源JAVA模板引擎, 适用于动态HTML页面输出, 可替代JSP页面, 指令和Velocity相似. ...

  7. 从HTTL模板引擎看软件设计原则

    HTTL (Hyper-Text Template Language) 是一个高性能的开源JAVA模板引擎, 适用于动态HTML页面输出, 可替代JSP页面, 指令和Velocity相似.作者是阿里巴 ...

  8. Spring Boot (三)模板引擎FreeMarker集成

    一.FreeMaker介绍 FreeMarker是一款免费的Java模板引擎,是一种基于模板和数据生成文本(HMLT.电子邮件.配置文件.源代码等)的工具,它不是面向最终用户的,而是一款程序员使用的组 ...

  9. HTML5模板引擎 Thymeleaf 教程(转)

    原文:http://www.open-open.com/lib/view/open1383622135586.html Thymeleaf是一个XML/XHTML/HTML5模板引擎,可用于Web与非 ...

随机推荐

  1. Maven个人手册

    一.Maven基本使用与设置 1.安装maven插件 1).下载maven并解压到指定目录,到该目录下复制当前路径path 2).在eclipse的dropins目录下编辑maven.link,将ma ...

  2. URL Schemes

    APP 被唤醒离不开对URL Schemes的认知. 苹果选择沙盒来保障用户的隐私和安全,但沙盒也阻碍了应用间合理的信息共享,于是有了 URL Schemes 这个解决办法. URL Schemes ...

  3. Asp.net MVC Comet推送

    一.简介 在Asp.net MVC实现的Comet推送的原理很简单. 服务器端:接收到服务器发送的AJAX请求,服务器端并不返回,而是将其Hold住,待到有东西要通知客户端时,才将这个请求返回. 客户 ...

  4. [Git] Git基础

    远程仓库 查看远程仓库: git remote -v 添加远程仓库: git remote add <repoName> <url> 拉取远程仓库数据: git fetch & ...

  5. PHP合并2个数字键数组的值

    先要了解一个基础知识点:PHP数组合并+与array_merge的区别分析 & 对多个数组合并去重技巧 <?php /** * PHP合并2个数字键数组的值 * * @param arr ...

  6. C语言运算符优先级 详细列表

    首先还是插入原博客的地址http://blog.csdn.net/huangblog/article/details/8271791 另外还有一个参考博客http://www.slyar.com/bl ...

  7. 7.2WebApi2中的全局异常处理

    现在在WebApi中还没有一种简单的方式去记录或者处理全局的异常.一些未处理的异常可以处理通过异常过滤器,但有大量的异常是异常过滤器不能处理的.例如: 从控制器的构造函数引发的异常. 从消息处理程序引 ...

  8. Android 学习笔记

    1.sleep(),wait(),notify(),notifyAll() sleep()是线程类的静态方法,阻塞线程一定时间后再次使线程处于可以被调度运行的状态wait(),notify(),not ...

  9. 难道这就是JavaScript中的"闭包"

    其实对于JavaScript中的"闭包"还没真正理解,这次在实际Coding中似乎遇到了"闭包"的问题,仅此摘录,以待深究. 表现为jQuery的post方法回 ...

  10. Excel 导出

    admin = Context.Request.Cookies["user"].Values["username"].ToString();           ...