c#常⽤模板引擎Razor、Nveocity、TemplateEngine2.0、
Vtem。。。
NET 常⽤的模板引擎:Razor、Nveocity、TemplateEngine2.0、Vtemplate。
1.Razor模板引擎介绍
Razor有VS⾃动提⽰。使⽤起来会⽅便⼀点。但是Razor⼤多是在MVC下使⽤的。⾮MVC下使⽤Razor需要借助开源的RazorEngine,我们就可以在⾮asp mvc项⽬中使⽤Razor引擎了。甚⾄在winform项⽬中都可以使⽤Razor(就可以写⼀些灵活度较⾼的代码⽣成器了)。
⼯作流程
Razor使⽤⽅法
1.导⼊DLL
2.创建cshtml
在⾮mvc项⽬中创建cshtml⽂件(cshtml⽂件可以⽤⾃动提⽰)
⽅法很简单,新建⼀个html,新建的时候改名为XX.cshtml即可。
像这样我们的前期准备⼯作就做完了!开始玩⼉起来吧。
3.⽤c#语法在cshtml中写⼀个循环
@{}中可以写C#代码,C#代码可以和html代码混排,
像下图这样写是可以的,让⼩编想起了做php的岁⽉。
4.在⼀般处理程序中读取
从开头的流程图得知,想让程序转起来,还得⽤Razor对象,读取⼀下cshtml。让他形成⼀个程序集,再⽣成html。
图上画这绕,其实⽤起来并不太复杂。
像下图这样就可以了。
5)cshtml如何读取对象中的值
1)⾸先在⼀般处理程序中,调⽤Parse⽅法的时候多给⼀个参数。
这个参数,就是你在cshtml中想要读取对象。(理论上啥都⾏)
2)然后再cshtm中就可以到这个对象了。
@Model.Age
@Model.Name
可以把这段代码写在cshtml中,想在哪输出就在哪输出。
2.Nveocity模板引擎介绍
NVelocity功能⾮常强⼤,像很多的模板引擎⼀样,以特定的语法编写好模板,然后为模板提供数据源,最终就会渲染⽣成出想要⽂件,可
以⽣成html、cs、java等⽂件,任何⽂件都可以⽣成,只需要配置写好固定的⽣成模板即可。
建⼀个Application,名称随便取,然后在项⽬中添加Nvelocity的引⽤, 然后在项⽬⾥,添加⼀个⽂件夹并且命名为template,作为存放
模板的⽬录,这与上⾯代码⾥设置的模板⽬录要对应⼀致,添加⼀个⽂件夹并且命名为Files,作为存放模板⽣成对应的⽂件。
VelocityEngine velocityEngine = new VelocityEngine();
ExtendedProperties props = new ExtendedProperties();
props.AddProperty(RuntimeConstants.RESOURCE_LOADER, "file");
//props.AddProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, HttpContext.Current.Server.MapPath(templatDir);
props.AddProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, path);
//props.AddProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, Path.GetDirectoryName(HttpContext.Current.Request.PhysicalPath));            props.AddProperty(RuntimeConstants.INPUT_ENCODING, "utf-8");
props.AddProperty(RuntimeConstants.OUTPUT_ENCODING, "utf-8");
//模板的缓存设置
props.AddProperty(RuntimeConstants.FILE_RESOURCE_LOADER_CACHE, true);              //是否缓存
props.AddProperty("dificationCheckInterval", (Int64)30);    //缓存时间(秒)
velocityEngine.Init(props);
//为模板变量赋值
VelocityContext context = new VelocityContext();
context.Put("Time", "20170613");
context.Put("Title", "模板⽣成");
context.Put("Body", "内容");
//  Template template = velocityEngine.GetTemplate(@"D:\ProgrammingFolder\C#\NVelocityDemo\NVelocityDemo\bin\Debug\Template");
//从⽂件中读取模板
Template template = velocityEngine.GetTemplate("\\Value.vm");
//合并模板
免费模板生成器
using (StreamWriter writer = new StreamWriter(@"D:\ProgrammingFolder\C#\NVelocityDemo\NVelocityDemo\Files\123.java", false))
{
template.Merge(context, writer);
}
后台代码,还要加⼊模板代码:
<p>$Title</p>
<p>$Time</p>
<p>$Body</p>
NVelocity还可以将对象绑定进去,和上⾯context.Put("Time", "20170613");类似,只不过将"20170613"换为对象即可。所以说,想
⽣成什么模板都可以满⾜。值得注意的是,NVelocity写模板的时候有固定的语法,语法去⽹上搜⼀下看
看即可。
3.Template Engine模板引擎介绍
Template Engine主要是两个类在使⽤:Template 和TemplateManager,Template 是⼀个基本模板, TemplateManager是扩展的模板语法介绍:
Thank You for your order #order.billFirstName# #order.billLastName#.
< br >
Your Order Total is: #al, "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 >
⽤Template或TemplateManager 是⾮常容易创建模板的
Template template = Template.FromString(string name, string data)
Template template = Template.FromFile(string name, string filename)
⽤TemplateManager
TemplateManager mngr =new TemplateManager(Template template);
或者
TemplateManager mngr = TemplateManager.FromFile(string filename);
TemplateManager mngr = TemplateManager.FromString(string template);
当调⽤FromString ⽅法时,string是模板的代码。这个⽅法能动态的加载⽂本到template中。FormFile是指调⽤的模板⽂件。TemplateManager有个属性 SetValue可以⽤来设置模板的变量和变量的内容
mngr.SetValue("xx", "xxxxxxxxxxxxxx");
输出模板
Response.Write(mngr.Process());
这⼀切都⾮常的简单。
函数列表
equals(obj1.obj2) ⽐较两个变量是否⼀样,返回bool型
notequals(obj1,obj2)⽐较两个变量是否不⼀样,返回 bool型 也可以 not(equals(obj1,obj2))
iseven(num) 测试是否是偶数
isodd(num)测试是否奇数
isempty(string) 测试字符串是否为0
isnotempty(string) 测试字符串是否⼤于0
isnumber(num) 测试是否为整型
toupper(string) 转化成⼤写
tolower(string) 转化成⼩写
isdefined(varname) 测试变量是否有定义
ifdefined(varname, value) 返回 value 如果varname 是有定义的,
特别有⽤:#ifdefined("name", name)# 将输出value 如果varname没有定义,其它情况不输出
len(string)返回字符串长度
tolist(collection, property, delim) 简单的输出列表
例1:
ArrayList list =new ArrayList();
list.Add("one");
list.Add("two");
list.Add("three");
template.SetValue("mylist", list);
你的模板内容:
#toList(mylist, " & ")#
输出:one & two & three
例2:
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
函数列表
snull(obj) 测试是否为空
not(boolvalue)  返回not(!)的bool型
iif(booleanExpression, iftruevalue, iffalsevalue) 如果booleanExpression为真,输出iftruevalue,否则输出iffalsevalue format(object, formatstring)格式化字符串,相当于ToString(formatstring)
例⼦:
#format(total, "C")#
will output: $1,208.45
函数列表
trim(string) 去除前后空格
filter(collection, booleanproperty) 返回⼀个新的组所有符合booleanproperty要求的
gt(obj1,obj2) 如果 obj1 > obj2 返回为真,否则为false
lt(obj1,obj2) 如果 obj1 < obj2 返回为真,否则为false
compare(obj1, obj2) 如果 obj1<obj2 返回-1 obj1=obj2 返回0 如果obj1>obj2 返回1
or(bool1,bool2) 有⼀个为真返回就是true
and(bool1, bool2) 两个都为真时返回true
comparenocase(string1, string2)  相等时返回为true 否则为false
stripnewlines(string) 返回 所有\r\n ⽤space 代替的字符串
typeof(object) 返回object 类型,如typeof("abcd234") 返回 "string" typeof(3) 返回 int
cint(value) 返回整数 等同于Int32()
cdouble(value) 返回双精度
cdate(value) 返回⼀个datetime 型
createtypereference(type) 引⽤⼀个静态的类型,但格式必须是<ad:set tag
例:
#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#
还⽀持c#内置的⼀些⽅法,如还可以这样使⽤
#xx.Length#

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。