c#常用模板引擎Razor、Nveocity、TemplateEngine2.0、Vtemplate介绍

it2025-12-25  9

NET 常用的模板引擎:Razor、Nveocity、TemplateEngine2.0、Vtemplate。

1.Razor模板引擎介绍 

Razor有VS自动提示。使用起来会方便一点。但是Razor大多是在MVC下使用的。非MVC下使用Razor需要借助开源的RazorEngine,我们就可以在非asp.net 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等文件,任何文件都可以生成,只需要配置写好固定的生成模板即可。

nvelocity下载地址:http://www.zhaodll.com/dll/n/201209/223477.html 找到NVELOCITY这一项进行下载即可。

建一个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("file.resource.loader.modificationCheckInterval", (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: #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 >

用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) 测试字符串是否为0isnotempty(string) 测试字符串是否大于0isnumber(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,否则输出iffalsevalueformat(object, formatstring)格式化字符串,相当于ToString(formatstring)例子: #format(total, "C")# will output: $1,208.45

函数列表 trim(string) 去除前后空格filter(collection, booleanproperty) 返回一个新的组所有符合booleanproperty要求的gt(obj1,obj2) 如果 obj1 > obj2 返回为真,否则为falselt(obj1,obj2) 如果 obj1 < obj2 返回为真,否则为falsecompare(obj1, obj2) 如果 obj1<obj2 返回-1 obj1=obj2 返回0 如果obj1>obj2 返回1or(bool1,bool2) 有一个为真返回就是trueand(bool1, bool2) 两个都为真时返回truecomparenocase(string1, string2)  相等时返回为true 否则为falsestripnewlines(string) 返回 所有\r\n 用space 代替的字符串typeof(object) 返回object 类型,如typeof("abcd234") 返回 "string" typeof(3) 返回 intcint(value) 返回整数 等同于Convert.toInt32()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#

最新回复(0)