AderTemplate只能运行于.NET2.0之上.
这里有一个简单例子:
Thank You for your order #order.billFirstName# #order.billLastName#.
<
br
>
Your Order Total is: #format(order.total, "C")#
<
br
>
<
ad:if
test
="#order.shipcountry isnot "
US"#"
>
Your order will arrive in 2-3 weeks
<
ad:else
>
Your order will arrive in 5-7 days
</
ad:if
>
模版文件可以含有表达式,if/elseif/else语句,foreach/for/set语句和其他模版文件.
Templates API:在模版引擎中有两个主要的类:
Template和TemplateManager.
Template含有一个简单的模版文件实例,TemplateManager被用来处理模版.
创建模版对象Template实例的方法是通过Template或者TemplateManager的静态方法:
Template template
=
Template.FromString(
string
name,
string
data)
Template template
=
Template.FromFile(
string
name,
string
filename)
然后可以用它来实例化TemplateManager:
TemplateManager mngr
=
new
TemplateManager(template);
或者可以这么做:
TemplateManager mngr
=
TemplateManager.FromFile(filename);
TemplateManager mngr
=
TemplateManager.FromString(template);
使用FromString方法,参数string template可以包含模版代码.这个方法可以在没有模版文件的情况下,从动态生成的文本创建TemplateManager.
可以使用SetValue(string name, object value);来处理模版文件中的标签.
Ex:
mngr.SetValue(
"
customer
"
,
new
Customer(
"
Tom
"
,
"
Jackson
"
));
这样就可以在模版中使用customer标签,你可以使用任何类型的对象来替换标签,当变量的值被output的时候,ToString()方法会被调用.
- Expressions 表达式(标签,应该这么理解把)
在模版文件中标签是以#包起来的字符串:
#FirstName#
这个例子会输出first name的值.如果要输出#,只要连写两个#即可.
Ex:
Your SS## is #ssnumber#
使用标签你可以输出任何变量(对象):
#somevar#
输出对象的一个属性或字段:
#somestring.Length#
属性名称不区分大小写,所以你可以:#string.length# or #string.LENGTH#
或者调用一个函数:#trim(somename)#
#customer.firstname.length#
你可以调用任何对象的方法:
#firstname.substring(0, 5)# 或者 #customer.isValid()#
Ver2.1允许你调用指定下标的Array项:
#somearray[3]# - 得到Array的第三项
#hastable["somekey"]# - 得到somekey的值从hashtable.
有一些现成的函数和很方便就能添加的函数,这些函数是:
equals(obj1, obj2) - 检查obj1和obj2是否相等,返回boolean真假
notequals(obj1, obj2) - 返回!equals(obj1, obj2). 相当于调用: not(equals(obj1, obj2))
iseven(num) - tests whether number is an even number
isodd(num) - tests whether number is an odd number
isempty(string) - 测试字符串是否为空. 和equals(string.Length, 0)相同
isnotempty(string) - 测试字符串是否含有至少1个字符
isnumber(num) - 测试num是否为数字格式
toupper(string) - 不说了
tolower(string) - 不说了
isdefined(varname) - 测试varname是否被定义
ifdefined(varname, value) - 如果varname被定义,那么返回value的值.例如:#ifdefined("name", name)# -如果name被定义的话,返回name的值,否则返回nothing.
len(string) - 返回字符串的长度.
tolist(collection, property, delim) -以delim为分隔符,把collection转化为字符串.prototype是collection的某个属性,如果prototype不为空,将返回以delim分隔的该属性的值.如果没有prototype,collection将被使用.
Ex:
假设list如下:
ArrayList list
=
new
ArrayList();
list.Add(
"
one
"
);
list.Add(
"
two
"
);
list.Add(
"
three
"
);
template.SetValue(
"
mylist
"
, list);
那可以在模版中这样写:#toList(mylist, " & ")#
最后的输出将是:one & two & three
假设list如下:
list.Add(
new
Customer(
"
Tom
"
,
"
Whatever
"
));
list.Add(
new
Customer(
"
Henry
"
,
"
III
"
));
list.Add(
new
Customer(
"
Tom
"
,
"
Jackson
"
));
template.SetValue(
"
mylist
"
, list);
在模版中:#toList(mylist, "firstName", ",")#
最后的输出将是:Tom,Henry,Tom
isnull(obj) - 测试对象是否为null
not(boolvalue) - -_-不说了
iif(booleanExpression, iftruevalue, iffalsevalue) - 和c#中的三元表达式一样: booleanExpression ? iftruevalue : iffalsevalue
Ex:
#iif(isodd(i), "bgcolor=yellow", "bgcolor=red")#
will output bgcolor=yellow if i is odd number and bgcolor=red if i is not odd number
format(object, formatstring) - 将会调用object的ToString(formatstring).
Ex:
(如果total是货币型1208.45)
#format(total, "C")#
会输出: $1,208.45
trim(string) - 略
filter(collection, booleanproperty) - will return new List from collection for those objects whose booleanproperty property evaluates to true
gt(obj1, obj2) - 如果obj1>obj2返回true.obj1和obj2必须继承于相同的类型.
lt(obj1, obj2) - 如果obj1<obj2返回true.obj1和obj2必须继承于相同的类型.
compare(obj1, obj2) - 如果obj1<obj2,返回-1;如果obj1==obj2,返回0,如果obj1>obj2返回1.obj1和obj2必须继承于相同的类型.
or(bool1, bool2) - 如果bool1为真或bool2为真,返回真
ex:
#or(equals(state, "IL"), equals(state, "NY"))# - 如果state=="IL"或者state=="NY"返回真
and(bool1, bool2) - 不罗嗦了
comparenocase(string1, string2) - will do case insenstive comparison of string1 and string2 and return true if they are equal
stripnewlines(string) - 在string后换行
typeof(object) - Ex: typeof("hello") return "string". typeof(3) returns int
cint(value) - 调用Convert.ToInt32 from .net library
cdouble(value) - 转换为double类型
cdate(value) - 转换为datetime类型.Ex: #cdate("2005-5-1")#
createtypereference(type) - Ex:
#createtypereference("System.Math").Round(3.39789)#
#createtypereference("System.Math").PI#
or
<
ad:set
name
="MyMath"
value
="#createtypereference("
System.Math")#"
/>
#MyMath.Round(3.3)#
#MyMath.PI#
(未完,等续)
AderTemplate官方网站:
http://www.adersoftware.com
AderTemplate dll下载地址:
http://www.aspxon.com/ShowSoft/15.aspx
AderTemplate源码下载地址(含有演示):
AderTemplate(dll)模版引擎(c#源码)