Welcome

首页 / 软件开发 / C# / VTemplate模版引擎的使用--进阶篇

VTemplate模版引擎的使用--进阶篇2010-06-22 cnblogs Kingthy1、<vt:template>与<vt:include>标签的不同

<vt:template>和<vt:include> 标签都包含file属性,如果这两个标签都设置file属性,那这两个标签看起来很相似,并且最终效果都是将文件的内容包含进来。但是对于模版引擎来说它们之间的差别却是非常的大。

<vt:template>标签是“模版块”标签,它能拥有自己的“变量”,它会成为它内部的标签的“宿主模版”(OwnerTemplate)。而<vt:include>则只是简单的将文件内容包含进来,它内部的标签的“宿主模版”与它相同。

现假如有一个VT模版文件: inc_content.html

我是包含文件里的变量 {$:#.var1}。
我是包含文件里的foreach标签:
<vt:foreach from=”#.names” item=”name” index=”i”>
包含文件的第{$:#.i}个名字叫{$:#.name}。
</vt:foreach>

现分别用<vt:template> 和 <vt:include>标签去包含上面的文件,如下:

A、<vt:template>包含:

我是外部的变量{$:#.var1}。
我是外部的foreach标签:
<vt:foreach from=”#.names” item=”name” index=”i”>
外部的第{$:#.i}个名字叫{$:#.name}。
</vt:foreach>
<vt:template id=”inc” file=”inc_content.html” />

B、<vt:include>包含:

我是外部的变量{$:#.var1}。
我是外部的foreach标签:
<vt:foreach from=”#.names” item=”name” index=”i”>
外部的第{$:#.i}个名字叫{$:#.name}。
</vt:foreach>
<vt:include id=”inc” file=”inc_content.html” />

上面两块的VT模版代码看起来很相似,但是经解析后A中的var1与inc这个<vt:template>模版块下的变量var1分别独立存在,互不影响!而B中的变量var1与inc这个<vt:include>的变量var1相等,都是引用同一个变量(其它变量类似)。

现假如A、B两块的VT模版代码都通过过下面的程序来处理:

this.Document.Variables.SetValue("var1", 1);
this.Document.Variables.SetValue("names", new string[] { "张三", "李四", "王五" });

也即是只对外部变量var1、names赋值,最终经模版引擎解析输出后,它们的输出结果如下:

从图可知,<vt:template>包含的没有数据输出,而用<vt:include>包含则有数据输出并且和外部数据一模一样!所以可把<vt:template>标签看成是程序语言里的类,它能拥有它自己的变量,改变外部变量的值不会影响到其内部的同名变量,并且外部标签可通过其id获取其内部变量!

具体的示例代码,请参考:http://net-vtemplate.googlecode.com/svn/src/VTemplate.WebTester/template_include_test.ashx.cs