vtemplate https://www.e-learn.cn/tag/vtemplate zh-hans 基于.NET的免费开源的模板引擎- https://www.e-learn.cn/topic/3940716 <span>基于.NET的免费开源的模板引擎-</span> <span><span lang="" about="/user/67" typeof="schema:Person" property="schema:name" datatype="">孤人</span></span> <span>2020-11-29 23:44:15</span> <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"> <p> <strong>1、VTemplate模板引擎的简介</strong> </p> VTemplate模板引擎也简称为VT,是基于.NET的模板引擎,它允许任何人使用简单的类似HTML语法的模板语言来引用.NET里定义的对象。当 VTemplate应用于web开发时,界面设计人员可以和程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只关注页面 的显示效果,而由程序开发人员关注业务逻辑编码。VTemplate将.NET程序代码从web页面中分离出来,这样为web站点的长期维护提供了便利, 同时也为我们在ASP.NET WebForm开发之外又提供了一种可选的方案。 VTemplate也可以作为动态文本生成工具,生成HTML、XML、邮件、程序源代码或其它文本等。 <p>   </p> <p>   </p> <p> <strong>2、VTemplate模板的特色:</strong> </p> <blockquote> <p> <span style="color:#FF0000;">2.1、</span>VT是一种解释型的模板引擎,所以你可以随时更改你的模板代码以获得不同的输出,而不需要重新编译程序代码<br /><span style="color:#FF0000;">2.</span><span style="color:#FF0000;">2、</span>VT支持缓存,也就是模板只需要解析一次,下次就可以直接从内存里构建您的模板对象而不需要再次解析模板代码,除非相关的模板文件已被修改。<br /><span style="color:#FF0000;">2.</span><span style="color:#FF0000;">3、</span>VT的模板标签语法是基于HTML规范定义的元素,所以对页面设计人员来说是非常友好的。<br /><span style="color:#FF0000;">2.</span><span style="color:#FF0000;">4、</span>VT模板支持循环、条件判断、数值表达式计算等,以方便你在模板里直接进行逻辑处理。 </p> <p> <span style="color:#FF0000;">2.</span><span style="color:#FF0000;">5、</span>VT支持直接调用对象里的方法<br /> 例子:<br /> ------------模板代码--------------<br /><span style="color:#808000;">&lt;vt:function var="data" method="GetData" type="$user" /&gt;</span><br /><span style="color:#808000;">&lt;vt:set var="data" value="$user.GetData()" /&gt;</span><br /> ---------------------------------- </p> <p> 上面模板里第一种采用function标签调用user对象的GetData方法,第二种则直接采用变量表达式执行方法。 </p> <p> <br /><span style="color:#FF0000;">2.6、</span>VT可以很灵活的直接获取对象的属性、字段、集合项等数据。<br /> 例子:<br /> ------------模板代码--------------<br /><span style="color:#808000;">&lt;h4&gt;姓名:{$user.name}&lt;/h4&gt;</span><br /> ---------------------------------- </p> <p> 上面的变量元素里,user可以为 </p> <p> <span style="color:#808000;">public class user{</span><br /><span style="color:#808000;"> public string name;</span><br /><span style="color:#808000;">}</span> </p> <p> 也可以为<br /><span style="color:#808000;">public class user{</span><br /><span style="color:#808000;"> public string name{get;set;}</span><br /><span style="color:#808000;">}</span> </p> <p> 也可以为<br /><span style="color:#808000;">var user = new Dictionary&lt;string, string&gt;();</span><br /><span style="color:#808000;">user.Add("name","张三");</span> </p> <p> <br /> VT会自动判断user对象的name是存在于对象的字段、属性还是集合项里。 </p> </blockquote> <p>   </p> <p> <br /></p> <p> <strong>3、VTemplate模板范例</strong>: </p> <table border="0" cellpadding="2" cellspacing="0"><tbody><tr><td> <p> &lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"&gt; <br /> &lt;html&gt; <br /> &lt;head&gt; <br /> &lt;title&gt; test1 &lt;/title&gt; <br /> &lt;/head&gt; <br /> &lt;body&gt; <br /> &lt;<span>vt:for</span> <span>from</span>="1" <span>to</span>="9" <span>index</span>="i"&gt; <br /> &lt;<span>vt:for</span> <span>from</span>="1" <span>to</span>="$i" <span>index</span>="j"&gt; <br /> &lt;<span>vt:expression</span> <span>var</span>="r" <span>args</span>="$i" <span>args</span>="$j" <span>expression</span>="{0}*{1}" /&gt;{<span>$:i</span>}*{<span>$:j</span>}={<span>$:r</span>}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; <br /> &lt;/<span>vt:for</span>&gt; <br /> &lt;br /&gt; <br /> &lt;/<span>vt:for</span>&gt; <br /> &lt;/body&gt; <br /> &lt;/html&gt; </p> </td> </tr></tbody></table><p> 以上模板代码经过VTemplate解析运行后将输出一个<span>99乘法表,</span>如下: </p> <table border="0" cellpadding="2" cellspacing="0"><tbody><tr><td> <p> 1*1=1     <br /> 2*1=2     2*2=4     <br /> 3*1=3     3*2=6     3*3=9     <br /> 4*1=4     4*2=8     4*3=12     4*4=16     <br /> 5*1=5     5*2=10     5*3=15     5*4=20     5*5=25     <br /> 6*1=6     6*2=12     6*3=18     6*4=24     6*5=30     6*6=36     <br /> 7*1=7     7*2=14     7*3=21     7*4=28     7*5=35     7*6=42     7*7=49     <br /> 8*1=8     8*2=16     8*3=24     8*4=32     8*5=40     8*6=48     8*7=56     8*8=64     <br /> 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    </p> </td> </tr></tbody></table><p> 而程序处理代码则只有简单的两行,如下: <br /> 注:假设上面的模板代码存放在test1.html文件上 </p> <table border="0" cellpadding="2" cellspacing="0"><tbody><tr><td> <span style="color:#2B91AF;">TemplateDocument </span>document = <span style="color:blue;">new </span><span style="color:#2B91AF;">TemplateDocument</span>(Server.MapPath(<span style="color:#A31515;">"template/test1.html"</span>), <span style="color:#2B91AF;">Encoding</span>.UTF8); <br /> document.Render(Response.Output); </td> </tr></tbody></table><p>   </p> <p>   </p> <p> <strong>4、什么是VT模板元素?</strong> </p> <p> VT模板元素VTemplate模板引擎定义的有特殊作用的模板语言元素,分为<strong>标签元素</strong>和<strong>变量元素</strong>。 </p> <blockquote> <p> 4.1、标签元素都是程序逻辑控制元素,是标准的HTML标签元素,如上例中用于循环处理的&lt;vt:for&gt;标签和用于计算表达式值的&lt;vt:expression&gt;标签等 </p> <p> 4.2、变量元素是数据输出元素,其格式是以“<span>{$:</span>”字符开头,以“<span>}</span>”字符结束。 如上例中的{<span>$:i</span>}、{<span>$:j</span>}和{<span>$:r</span>}等 </p> <p> 注:3.7版本后,变量元素的定义可以取消“<span style="color:#0000FF;">:</span>”号,即以“<span style="color:#0000FF;">{$</span>”字符开头,如{<span style="color:#FF0000;">$i</span>}、{<span style="color:#FF0000;">$j</span>}与上面的定义不同,但都是一样输出变量的值。 </p> </blockquote> <p> <strong>5、变量、变量标识、变量表达式</strong> </p> <blockquote> <p> <strong>5.1、</strong>变量是VTemplate模板引擎中的核心元素,用于存储或控制数据的输出,其类似于程序语言中的“变量”概念,定义格式也是一样。如上例中的<span>i</span>,<span>j</span>,<span>r</span>变量。 </p> <p> <strong>5.2、</strong>变量标识由两部分组成:变量前缀与变量(名)。其中“变量前缀”可以省略,如“#.i”,“#u.i”,“u“ </p> <p>         <span style="color:#993300;">变量前缀</span>:以#号开头后跟模板块的 Id值,用于指示此变量是取自于对应Id的模板块下的变量,如#my.user则表示user变量是取自于Id为my的模板块下的变量;如果省略Id 号,即前缀只为#号,则表示是当前模板块下的变量;而如果前缀是“##”,则表示是当前模板块的父模板块(如果不存在父级模板块则为当前模板块)下的变 量;如果<span>省略前缀,则表示是文档(根)模板块的变量</span>。 </p> <p> <strong>5.3、</strong>变量表达式则是定义获取变量中某个字段、属性或函数方法结果值。 </p> <p> 定义格式为:“<span>变量标识</span>.<span>变量字段/属性/函数方法/索引值</span>”。 </p> <p> <span>变量字段/属性/函数方法/索引值</span>:表示要从变量中取得数据的字段/属性/函数方法/索引值(数字),其中函数方法只支持不带参数的方法。此段可以定义0次或多次。 </p> <p> 例子: </p> <table border="0" cellpadding="2" cellspacing="0"><tbody><tr><td> #my.user </td> <td> Id为my的模板块下的变量user的值 </td> </tr><tr><td> #my.user.age </td> <td> Id为my的模板块下的变量user的age属性/字段值 </td> </tr><tr><td> #my.user.location.getcity() </td> <td> Id为my的模板块下的变量user的location属性/字段值的getcity方法返回的值 </td> </tr><tr><td> #.user </td> <td> 当前模板块下的变量user的值 </td> </tr><tr><td> #.user.age.tostring() </td> <td> 当前模板块下的变量user的age属性/字段值的tostring方法返回的值 </td> </tr><tr><td> ##.user.location.city </td> <td> 当前模板块的父级模板块的变量user的location属性/字段值的city属性/字段的值 </td> </tr><tr><td> user.age </td> <td> 文档(根)模板块的变量user的age属性/字段值 </td> </tr><tr><td> weeks.0 </td> <td> 文档(根)模板块的变量weeks的0索引位置的值 </td> </tr><tr><td> #.users.0.name </td> <td> 当前模板块下变量users的0索引位置的值的name字段/属性值 </td> </tr></tbody></table><p> 注:变量表达式可在“变量元素”或“标签元素”的部分属性值中使用。 </p> </blockquote> <p> <strong>6、标签元素</strong>: </p> <blockquote> <p> <strong>6.1、</strong>&lt;<span>vt:template</span>&gt;模板块标签元素 </p> <p> 此标签用于定义模板块。在VTemplate的模板规范中,变量是基于模板块存在的,同模板块下同名的变量都是引用同一个变量实例,但不同模板块中的同名变量都是互相独立互不影响的。 </p> <p> 标签样例: </p> <p> &lt;<span>vt:template</span> <span>id</span>="mytemplate" <span>name</span>="mytemplate"&gt;…………………………&lt;/<span>vt:template</span>&gt; </p> <p> 或自闭合的样例: </p> <p> &lt;<span>vt:template</span> <span>id</span>="filetemplate" <span>file</span>="include/myfile.html" <span>charset</span>="utf-8" /&gt; </p> </blockquote> <blockquote> <p> 标签中已定义的属性列表: </p> <table border="0" cellpadding="2" cellspacing="0"><tbody><tr><td> <strong>名称</strong> </td> <td> <strong>说明</strong> </td> </tr><tr><td> id </td> <td> 标签元素的Id,<span>建议唯一</span>但不强制。<span>(可不定义)</span> </td> </tr><tr><td> name </td> <td> 标签元素的名称。<span>(可不定义)</span> </td> </tr><tr><td> file </td> <td> 模板块数据文件的路径地址,可以绝对或相对地址 </td> </tr><tr><td> charset </td> <td> 模板块数据文件的编码,如果<span>未定义</span>则如果存在父级模板块的话则采用父级模板块的编码,否则采用系统默认编码 </td> </tr><tr><td> render </td> <td> 定义用于处理此模块数据的实例,可以为字符串常量或变量表达式(以$字符开头),格式:"<span>类实例</span>,<span>程序集</span>"。如果已定义此属性但未定义rendermethod属性,则<span>类实例</span>必须已实现<span style="color:#2B91AF;">ITemplateRender<span>接口。<span>(可不定义)</span></span></span> </td> </tr><tr><td> rendermethod </td> <td> 定义用于处理此模块数据的<span>类实例</span>的方法,可以为字符串常量或变量表达式(以$字符开头),此方法必须已标记<span style="color:#2B91AF;">TemplateRenderMethodAttribute<span>特性。<span>(可不定义)</span></span></span> </td> </tr></tbody></table><p>   </p> <p> <strong>6.2、</strong>&lt;<span>vt:include</span>&gt;文件包含标签元素 </p> <p> 此标签用于包含外部文件。 </p> <p> 标签样例: </p> <p> &lt;<span>vt:include</span> <span>file</span>="include/myfile.html" <span>charset</span>="utf-8"&gt;…………………………&lt;/<span>vt:include</span>&gt; </p> <p> 或自闭合的样例: </p> <p> &lt;<span>vt:include</span> <span>file</span>="include/myfile.html" <span>charset</span>="utf-8" /&gt; </p> <p> 标签中已定义的属性列表: </p> <table border="0" cellpadding="2" cellspacing="0"><tbody><tr><td> <strong>名称</strong> </td> <td> <strong>说明</strong> </td> </tr><tr><td> id </td> <td> 标签元素的Id,<span>建议唯一</span>但不强制。<span>(可不定义)</span> </td> </tr><tr><td> name </td> <td> 标签元素的名称。<span>(可不定义)</span> </td> </tr><tr><td> file </td> <td> 模板块数据文件的路径地址,可以绝对或相对地址 </td> </tr><tr><td> charset </td> <td> 模板块数据文件的编码,如果<span>未定义</span>此属性则如果存在父级模板块的话则采用父级模板块的编码,否则采用系统默认编码 </td> </tr></tbody></table><p>   </p> <p> <strong>6.3、</strong>&lt;<span>vt:for</span>&gt;循环标签元素 </p> <p> 此标签用于定义数据循环,类似于程序语言中的for循环。 </p> <p> 标签样例: </p> <p> &lt;<span>vt:for</span> <span>from</span>="1" <span>to</span>="9" <span>index</span>="i"&gt;…………………………&lt;/<span>vt:for</span>&gt; </p> <p> 标签中已定义的属性列表: </p> <table border="0" cellpadding="2" cellspacing="0"><tbody><tr><td> <strong>名称</strong> </td> <td> <strong>说明</strong> </td> </tr><tr><td> id </td> <td> 标签元素的Id,<span>建议唯一</span>但不强制。<span>(可不定义)</span> </td> </tr><tr><td> name </td> <td> 标签元素的名称。<span>(可不定义)</span> </td> </tr><tr><td> from </td> <td> 循环起始值,可为一个数值常量(如:1)或变量表达式(必须以$字符开头,如:$i) </td> </tr><tr><td> to </td> <td> 循环结束值,可为一个数值常量(如:1)或变量表达式(必须以$字符开头,如:$i) </td> </tr><tr><td> step </td> <td> 循环值的步值,可为一个数值常量(如:1)或变量表达式(必须以$字符开头,如:$i),如果<span>未定义</span>此属性,则默认为1 </td> </tr><tr><td> index </td> <td> 定义存储循环索引值的<span style="color:#993300;">变量标识</span>,注:此索引值是一个<span>LoopIndex</span>实例。<span>(可不定义)</span> </td> </tr></tbody></table><p> <strong></strong> </p> <p> <strong></strong> </p> <p> <strong>6.4、</strong>&lt;<span>vt:foreach</span>&gt;集合数据循环标签元素 </p> <p> 此标签用于定义处理集合数据的循环,类似于程序语言中的foreach循环。 </p> <p> 标签样例: </p> <p> &lt;<span>vt:foreach</span> <span>from</span>="users" <span>item</span>="user" <span>index</span>="i"&gt;…………………………&lt;/<span>vt:foreach</span>&gt; </p> <p> 标签中已定义的属性列表: </p> <table border="0" cellpadding="2" cellspacing="0"><tbody><tr><td> <strong>名称</strong> </td> <td> <strong>说明</strong> </td> </tr><tr><td> id </td> <td> 标签元素的Id,<span>建议唯一</span>但不强制。<span>(可不定义)</span> </td> </tr><tr><td> name </td> <td> 标签元素的名称。<span>(可不定义)</span> </td> </tr><tr><td> from </td> <td> 变量表达式 </td> </tr><tr><td> item </td> <td> 定义存储当前循环值的<span style="color:#993300;">变量标识</span>。<span>(可不定义)</span> </td> </tr><tr><td> index </td> <td> 定义存储循环索引值的<span style="color:#993300;">变量标识</span>,注:此索引值是一个<span>LoopIndex</span>实例。<span>(可不定义)</span> </td> </tr><tr><td> groupsize </td> <td> <p> 设置拆分数据集合时的组大小,可以为数值常量(如:2)或变量表达式(以$字符开头)。<span>(可不定义)</span><br /> 如果定义此属性值,并且值大于1,则模板引擎在解析此foreach标签时,先将from属性定义的变量表达式的结果值折分成一组组集合数据再进行解析。 </p> <p> 例如:from的变量表达式的结果值原是“1,2,3,4,5,6”数组集合,如果groupsize设置为2,则将会拆成"[1,2],[3,4],[5,6]"的数据集合,再用此新的数据集合进行循环解析。 </p> </td> </tr></tbody></table><p>   </p> <p> <strong>6.5、</strong>&lt;<span>vt:foreachelse</span>&gt;空集合数据循环标签元素 </p> <p> 此标签用于定义当集合数据为空(数量为0)时显示处理的节点。此标签必须在&lt;<span>vt:foreach</span>&gt;标签中定义,并且此标签为单节点标签(即不需要配对的结束标签)。 </p> <p> 标签样例: </p> <p> &lt;<span>vt:foreach</span> <span>from</span>="users" <span>item</span>="user" <span>index</span>="i"&gt; </p> <p> {$:i}、我叫{$:user.name},今年{$:user.age}岁 </p> <p> &lt;<span>vt:foreachelse /</span>&gt; </p> <p> 没有任何用户 </p> <p> &lt;/<span>vt:foreach</span>&gt; </p> <p> <span>注:当users集合数据为空时则显示"没有任何用户"字样,否则不显示此字样。</span> </p> <p>   </p> <p> 标签中已定义的属性列表: </p> <table border="0" cellpadding="2" cellspacing="0"><tbody><tr><td> <strong>名称</strong> </td> <td> <strong>说明</strong> </td> </tr><tr><td> id </td> <td> 标签元素的Id,<span>建议唯一</span>但不强制。<span>(可不定义)</span> </td> </tr><tr><td> name </td> <td> 标签元素的名称。<span>(可不定义)</span> </td> </tr></tbody></table><p> <strong></strong> </p> <p> <strong>6.6、</strong>&lt;<span>vt:if</span>&gt;条件判断标签元素 </p> <p> 此标签用于定义数据条件判断,类似于程序语言中的if语句。 </p> <p> 标签样例: </p> <p> &lt;<span>vt:if </span><span>var</span>="user.age" <span>value</span>="20" <span>compare</span>="&gt;"&gt;…………………………&lt;/<span>vt:if</span>&gt; </p> <p> 标签中已定义的属性列表: </p> <table border="0" cellpadding="2" cellspacing="0"><tbody><tr><td> <strong>名称</strong> </td> <td> <strong>说明</strong> </td> </tr><tr><td> id </td> <td> 标签元素的Id,<span>建议唯一</span>但不强制。<span>(可不定义)</span> </td> </tr><tr><td> name </td> <td> 标签元素的名称。<span>(可不定义)</span> </td> </tr><tr><td> var </td> <td> 用于判断条件的变量表达式 </td> </tr><tr><td> value </td> <td> 用于比较条件的值,可为数值/字符串常量或变量表达式(必须以$字符开头,如:$i) <br /><span>注:此属性可以多次定义,当var变量表达式中的值和其中一个value属性值匹配时即符合条件。</span> </td> </tr><tr><td> compare </td> <td> <p> 比较的方式,可以为字符串常量或变量表达式(以$字符开头),值的定义范围: <br /> &gt; : 大于 <br /> &gt;= : 大于等于 <br /> &lt; : 小于 <br /> &lt;= : 小于等于 <br /> !=或&lt;&gt; : 不等于 <br /> = 或== : 相等 </p> <p> ^= : 判断是否以某些值开始(字符比较) </p> <p> $= : 判断是否以某些值结束(字符比较) </p> <p> *= : 判断是否包含有某些值(字符比较)<br /> 如果<span>未定义</span>此属性则表示采用“相等”比较。 </p> </td> </tr><tr><td> expression </td> <td> 定义需要简单运算的表达式,可以为字符串常量或变量表达式(以$字符开头),表达式中支持 “{0}”标记,用于代替var属性的变量表达式的值。<span>(可不定义)</span> </td> </tr></tbody></table><p> <strong></strong> </p> <p> <strong>6.7、</strong>&lt;<span>vt:elseif</span>&gt;条件分支判断标签元素 </p> <p> 此标签用于定义数据条件的分支判断。类似于程序语言中的else if语句。此标签可以同时支付一个或多个。此标签只能在&lt;<span>vt:if</span><span>&gt;标签中定义,并且此标签为单节点标签(即不需要配对的结束标签)。</span> </p> <p> 标签样例: </p> <p> &lt;<span>vt:if </span><span>var</span>="user.age" <span>value</span>="20"&gt; </p> <p> 20岁用户 <br /> &lt;<span>vt:elseif </span><span>value</span>="30” /&gt; </p> <p> 30岁用户 </p> <p> &lt;<span>vt:elseif </span><span>value</span>="40” /&gt; </p> <p> 40岁用户 </p> <p> &lt;/<span>vt:if</span>&gt; </p> <p> 标签中已定义的属性列表: </p> <table border="0" cellpadding="2" cellspacing="0"><tbody><tr><td> <strong>名称</strong> </td> <td> <strong>说明</strong> </td> </tr><tr><td> id </td> <td> 标签元素的Id,<span>建议唯一</span>但不强制。<span>(可不定义)</span> </td> </tr><tr><td> name </td> <td> 标签元素的名称。<span>(可不定义)</span> </td> </tr><tr><td> var </td> <td> 用于判断条件的变量表达式。如果<span>未定义</span>此属性,则为标签所在的&lt;<span>vt:if</span><span>&gt;标签中的var属性值</span> </td> </tr><tr><td> value </td> <td> 用于比较条件的值,可为数值/字符串常量或变量表达式(必须以$字符开头,如:$i) <br /><span>注:此属性可以多次定义,当var变量表达式中的值和其中一个value属性值匹配时即符合条件。</span> </td> </tr><tr><td> compare </td> <td> <p> 比较的方式,可以为字符串常量或变量表达式(以$字符开头),值的定义范围: <br /> &gt; : 大于 <br /> &gt;= : 大于等于 <br /> &lt; : 小于 <br /> &lt;= : 小于等于 <br /> !=或&lt;&gt; : 不等于 <br /> = 或== : 相等 </p> <p> ^= : 判断是否以某些值开始(字符比较) </p> <p> $= : 判断是否以某些值结束(字符比较) </p> <p> *= : 判断是否包含有某些值(字符比较)<br /> 如果<span>未定义</span>此属性则表示采用“相等”比较。 </p> </td> </tr><tr><td> expression </td> <td> 定义需要简单运算的表达式,可以为字符串常量或变量表达式(以$字符开头),表达式中支持 “{0}”标记,用于代替var属性的变量表达式的值。<span>(可不定义)</span> </td> </tr></tbody></table><p> <strong></strong> </p> <p> <strong>6.8、</strong>&lt;<span>vt:else</span>&gt;条件分支判断标签元素 </p> <p> 此标签用于定义数据条件的分支判断,即当&lt;<span>vt:if</span><span>&gt;标签</span>中的所有条件分支都条件不成立时用于显示处理的节点。类似于程序语言中的else语句。此标签只能在&lt;<span>vt:if</span><span>&gt;标签中定义,并且此标签为单节点标签(即不需要配对的结束标签)。</span> </p> <p> 标签样例: </p> <p> &lt;<span>vt:if </span><span>var</span>="user.age" <span>value</span>="20"&gt; </p> <p> 20岁用户 <br /> &lt;<span>vt:elseif </span><span>value</span>="30” /&gt; </p> <p> 30岁用户 </p> <p> &lt;<span>vt:else </span>/&gt; </p> <p> 未知岁数 </p> <p> &lt;/<span>vt:if</span>&gt; </p> <p> 标签中已定义的属性列表: </p> <table border="0" cellpadding="2" cellspacing="0"><tbody><tr><td> <strong>名称</strong> </td> <td> <strong>说明</strong> </td> </tr><tr><td> id </td> <td> 标签元素的Id,<span>建议唯一</span>但不强制。<span>(可不定义)</span> </td> </tr><tr><td> name </td> <td> 标签元素的名称。<span>(可不定义)</span> </td> </tr></tbody></table><p>   </p> <p> <strong>6.9、</strong>&lt;<span>vt:expression</span>&gt;表达式标签元素 </p> <p> 此标签用于对变量表达式进行简单数据运算<span>。</span> </p> <p> 标签样例: </p> <p> &lt;<span>vt:expression</span> <span>var</span>="r" <span>args</span>="$i" <span>args</span>="$j" <span>expression</span>="{0}*{1}" /&gt; </p> <p>   </p> <p> 标签中已定义的属性列表: </p> <table border="0" cellpadding="2" cellspacing="0"><tbody><tr><td> <strong>名称</strong> </td> <td> <strong>说明</strong> </td> </tr><tr><td> id </td> <td> 标签元素的Id,<span>建议唯一</span>但不强制。<span>(可不定义)</span> </td> </tr><tr><td> name </td> <td> 标签元素的名称。<span>(可不定义)</span> </td> </tr><tr><td> var </td> <td> 存储表达式运算结果的<span style="color:#993300;">变量标识</span> </td> </tr><tr><td> args </td> <td> 参与表达式计算的数值或变量表达式(以$字符开头)。<span>(可不定义)</span> <br /><span>注:此属性可以多次定义,在表达式中分别以{0},{1}表示各个args属性的变量表达式值</span> </td> </tr><tr><td> expression </td> <td> 要进行运算的表达式,可以为字符串常量或变量表达式(以$字符开头)。 </td> </tr><tr><td> output </td> <td> 是否在解析标签时输出标签的结果值true/false,如果定义此属性且值设为true,则可以不定义var属性(即不存储结果值),默认不输出标签结果值。<span>(可不定义)</span> <br /></td> </tr></tbody></table><p>   </p> <p> <strong>6.10、</strong>&lt;<span>vt:serverdata</span>&gt;服务器数据标签元素 </p> <p> 此标签用于获取服务器的部分数据,如Session、Application、DateTime等等<span>。</span> </p> <p> 标签样例: </p> <p> &lt;<span>vt:<span>serverdata</span> </span><span>var</span>="session" <span>type</span>="session" <span>item</span>="username" /&gt; </p> <p>   </p> <p> 标签中已定义的属性列表: </p> <p> <br /></p> <table border="0" cellpadding="2" cellspacing="0"><tbody><tr><td> <strong>名称</strong> </td> <td> <strong>说明</strong> </td> </tr><tr><td> id </td> <td> 标签元素的Id,<span>建议唯一</span>但不强制。<span>(可不定义)</span> </td> </tr><tr><td> name </td> <td> 标签元素的名称。<span>(可不定义)</span> </td> </tr><tr><td> var </td> <td> 存储服务器数据的<span style="color:#993300;">变量标识</span> </td> </tr><tr><td> type </td> <td> <p> 要获取服务器数据的类型,可以为字符串常量或变量表达式(以$字符开头)。值的定义: </p> <p> <br /></p> <table style="width:765px;height:507px;" border="0" cellpadding="2" cellspacing="0"><tbody><tr><td> <strong>类型</strong> </td> <td> <strong>说明</strong> </td> </tr><tr><td> <span style="color:#0000FF;">Time</span> </td> <td> <p> 获取服务器时间 </p> <p> <span style="color:#800080;">item 属性值可定义为以下值:</span> </p> <p> today = 获取今天的日期(不带时间部分) </p> <p> yesterday = 获取昨天的日期(不带时间部分) </p> <p> tomorrow = 获取明天的日期(不带时间部分) </p> <p> 其它值 = 获取服务器现在的时间 </p> </td> </tr><tr><td> <span style="color:red;">Random</span> </td> <td> <p> 获取一个0---1之间的双精度随机数 </p> <p> <span style="color:#800080;">item 属性不需要定义</span> </p> </td> </tr><tr><td> Application </td> <td> <p> 获取服务器当前上下文的HttpApplicationState对象.如果模板引擎不在Web程序上使用则无效 </p> <p> <span style="color:#800080;">item 属性值则为Application集合的键值key</span> </p> </td> </tr><tr><td> Session </td> <td> <p> 获取服务器当前上下文的HttpSessionState对象.如果模板引擎不在Web程序上使用则无效 </p> <p> <span style="color:#800080;">item 属性值则为Session集合的键值key</span> </p> </td> </tr><tr><td> Cache </td> <td> <p> 获取服务器当前上下文的缓存对象 </p> <p> <span style="color:#800080;">item 属性值则为Cache集合的键值key</span> </p> </td> </tr><tr><td> QueryString </td> <td> <p> 获取服务器当前上下文的Request.QueryString数据集合.如果模板引擎不在Web程序上使用则无效 </p> <p> <span style="color:#800080;">item 属性值则为Request.QueryString集合的键值key</span> </p> </td> </tr><tr><td> Form </td> <td> 获取服务器当前上下文的Request.Form数据集合.如果模板引擎不在Web程序上使用则无效 <p> <span style="color:#800080;">item 属性值则为Request.Form集合的键值key</span> </p> </td> </tr><tr><td> Cookie </td> <td> <p> 获取服务器当前上下文的Request.Cookie数据集合.如果模板引擎不在Web程序上使用则无效  </p> <p> <span style="color:#800080;">item 属性值则为Request.Cookie集合的键值key,如果item值包含“.”号,则表示属于某个Cookie下的某个Value值,例如:</span> </p> <p> <span style="color:#800080;">item="user"则表示是Request.Cookie["user"]值;<br /> item="user.name"则表示是Requst.Cookie["user"]["name"]值</span> </p> </td> </tr><tr><td> ServerVariables </td> <td> 获取服务器当前上下文的Request.ServerVariables数据集合.如果模板引擎不在Web程序上使用则无效 <p> <span style="color:#800080;">item 属性值则为Request.ServerVariables集合的键值key</span> </p> </td> </tr><tr><td> RequestParams </td> <td> 获取服务器当前上下文的Request.Params数据集合.如果模板引擎不在Web程序上使用则无效 <p> <span style="color:#800080;">item 属性值则为Request.Params集合的键值key</span> </p> </td> </tr><tr><td> <span style="color:red;">Request</span> </td> <td> 获取服务器当前上下文的HttpRequest对象.如果模板引擎不在Web程序上使用则无效 <p> <span style="color:#800080;">item 属性不需要定义</span> </p> </td> </tr><tr><td> <span style="color:red;">Environment</span> </td> <td> 获取服务器系统平台的环境参数 <p> <span style="color:#800080;">item 属性不需要定义</span> </p> </td> </tr><tr><td> AppSetting </td> <td> 获取当前应用程序配置文件里的AppSettings配置参数 <p> <span style="color:#800080;">item 属性值则为ConfigurationManager.AppSettings集合的键值key</span> </p> </td> </tr></tbody></table></td> </tr><tr><td> item </td> <td> 要获取的数据项,此属性值根据type值而具有不同的意义,具体的看上表,可以为字符串常量或变量表达式(以$字符开头)。 </td> </tr><tr><td> output </td> <td> 是否在解析标签时输出标签的结果值true/false,如果定义此属性且值设为true,则可以不定义var属性(即不存储结果值),默认不输出标签结果值。<span>(可不定义)</span> </td> </tr></tbody></table><p>   </p> <p>    </p> <p> <strong>6.11、</strong>&lt;<span>vt:datareader</span>&gt;数据读取标签元素 </p> <p> 此标签用于直接从数据源读取数据<span>。<br /><strong>注意:此标签必须采用</strong><strong>TagOpenMode=Full</strong><strong>的TemplateDocumentConfig</strong><strong>时才允许使用。</strong></span> </p> <p> 标签样例: </p> <p> &lt;<span>vt:<span><span>datareader</span> </span></span><span>var</span>="members" <span>connection</span>="memberdb" <span>commandtext</span>="select * from [member]" /&gt; </p> <p>   <br /> 标签中已定义的属性列表: </p> <p> <br /></p> <table border="0" cellpadding="2" cellspacing="0"><tbody><tr><td> <strong>名称</strong> </td> <td> <strong>说明</strong> </td> </tr><tr><td> id </td> <td> 标签元素的Id,<span>建议唯一</span>但不强制。<span>(可不定义)</span> </td> </tr><tr><td> name </td> <td> 标签元素的名称。<span>(可不定义)</span> </td> </tr><tr><td> var </td> <td> 存储返回数据的<span style="color:#993300;">变量标识</span> </td> </tr><tr><td> connection </td> <td> <p> 数据源名称.此名称必须已在项目配置文件(如:web.config)里的connectionStrings节点里定义,可以为字符串常量或变量表达式(以$字符开头). </p> </td> </tr><tr><td> commandtext </td> <td> 数据查询语句(SQL语句) ,可以为字符串常量或变量表达式(以$字符开头) </td> </tr><tr><td> commandtype </td> <td> <p> 数据查询语句的类型。值范围对应于<span style="color:#3366FF;">System.Data.CommandType</span>枚举,可以为字符串常量(如:Text)或变量表达式(以$字符开头)。<span>(可不定义)</span> </p> <p> 注:当未定义时默认为<span>CommandType</span><span style="color:#3366FF;">.CommandText值</span> </p> </td> </tr><tr><td> rowindex </td> <td> 要获取行的行号,可以为数值常量(如:1)或变量表达式(以$字符开头)<span>(可不定义)<br /> 注:当此值不定义时将返回一个表结构(DataTable),而如果定义此值,则将返回对应行的数据行(DataRow),如果行不存在则返回null</span> </td> </tr><tr><td> parameters </td> <td> <p> 数据查询语句中的附加参数的数值/字符串常量或变量表达式(以$字符开头)<span>(可不定义)</span><br /><span>注:此属性可以多次定义,在数据查询语句中分别以@p0,@p1表示各个parameters属性的变量表达式值</span> </p> <p> <span>例子:<br /> &lt;vt:datareader var="members" connection="db" commandtext="select * from [member] where id&gt;=@p0 and sex=@p1" <span>parameters</span>="id" <span>parameters</span>="sex" /&gt;</span> </p> </td> </tr><tr><td> ParameterFormat </td> <td> <p> 数据查询参数的格式,可以为字符串常量或变量表达式(以$字符开头),默认为"@p{0}",其中"{0}"是占位符,表示各查询参数的索引数字(也即是parameters属性的先后顺序)。<span>(可不定义)</span> </p> <p> <span>注:如果定义此属性则commandtext里的语句也必须相应更改。</span> </p> <p> <span>例子:<br /> &lt;vt:datareader var="members" connection="db" commandtext="select * from [member] where id&gt;=&amp;par0 and sex=&amp;par1" parameters="id" parameters="sex" parameterformat="&amp;par{0}" /&gt;</span> </p> <p>   </p> </td> </tr></tbody></table><p>   </p> <p>   </p> <p>   </p> <p> <strong>6.12、</strong>&lt;<span>vt:function</span>&gt;函数调用标签元素 </p> <p> 此标签用于直接调用函数<span>。</span>标签样例: </p> <p> &lt;<span>vt:function<span> </span></span><span>var</span>="days" <span>method</span>="DaysInMonth" <span>type</span>="System.DateTime" <span style="color:#800080;">args</span>="2009" <span style="color:#800080;">args</span>="10" /&gt;<br /> &lt;<span>vt:function<span> </span></span><span>var</span>="UTCTime" <span>method</span>="ToUniversalTime" <span>type</span>="$time" /&gt; </p> <p>   <br /> 标签中已定义的属性列表: </p> <p> <br /></p> <table border="0" cellpadding="2" cellspacing="0"><tbody><tr><td> <strong>名称</strong> </td> <td> <strong>说明</strong> </td> </tr><tr><td> id </td> <td> 标签元素的Id,<span>建议唯一</span>但不强制。<span>(可不定义)</span> </td> </tr><tr><td> name </td> <td> 标签元素的名称。<span>(可不定义)</span> </td> </tr><tr><td> var </td> <td> 存储函数返回值的<span style="color:#993300;">变量标识</span> </td> </tr><tr><td> method </td> <td> <p> 函数方法名,可以为字符串常量或变量表达式(以$字符开头) </p> </td> </tr><tr><td> type </td> <td> 包含静态函数方法的类型或包含函数方法的类型,可以为字符串常量或变量表达式(必须以$字符开头,如:$i) <span>(可不定义)<br /><span>注:当未定义此属性时,将从模板块里获取注册的“用户自定义函数”,<span>函数的原型参考</span><span style="color:#3366FF;">UserDefinedFunction</span><span>委托</span>。</span></span> </td> </tr><tr><td> args </td> <td> <p> 参与函数运算的参数,可为数值/字符串常量或变量表达式(必须以$字符开头,如:$i) <span>(可不定义)</span><br /><span>注:此属性可以多次定义,但其定义顺序必须与函数方法的参数顺序一致。</span> </p> </td> </tr><tr><td> output </td> <td> 是否在解析标签时输出标签的结果值true/false,如果定义此属性且值设为true,则可以不定义var属性(即不存储结果值),默认不输出标签结果值。<span>(可不定义)</span> </td> </tr></tbody></table><p>   </p> <p>   </p> <p> <strong>6.13、</strong>&lt;<span>vt:property</span>&gt;获取字段或属性值标签元素 </p> <p> 此标签用于直接获取字段或属性值<span>。</span>标签样例: </p> <p> &lt;<span>vt:<span>property</span> </span><span>var</span>="time" <span>field</span>="Now" <span>type</span>="System.DateTime" /&gt;<br /> &lt;<span>vt:<span>property</span> </span><span>var</span>="year" <span><span>field</span></span>="Year" <span>type</span>="$time" /&gt; </p> <p>   <br /> 标签中已定义的属性列表: </p> <p> <br /></p> <table border="0" cellpadding="2" cellspacing="0"><tbody><tr><td> <strong>名称</strong> </td> <td> <strong>说明</strong> </td> </tr><tr><td> id </td> <td> 标签元素的Id,<span>建议唯一</span>但不强制。<span>(可不定义)</span> </td> </tr><tr><td> name </td> <td> 标签元素的名称。<span>(可不定义)</span> </td> </tr><tr><td> var </td> <td> 存储字段或属性值的<span style="color:#993300;">变量标识</span> </td> </tr><tr><td> field </td> <td> <p> 字段或属性名,可以为字符串常量或变量表达式(以$字符开头). </p> </td> </tr><tr><td> type </td> <td> 包含静态字段或属性的类型或包含字段或属性的类型,可以为字符串常量或变量表达式(必须以$字符开头,如:$i) </td> </tr><tr><td> output </td> <td> 是否在解析标签时输出标签的结果值true/false,如果定义此属性且值设为true,则可以不定义var属性(即不存储结果值),默认不输出标签结果值。<span>(可不定义)</span> </td> </tr></tbody></table><p>   </p> <p>   </p> <p> <strong>6.14、</strong>&lt;<span>vt:set</span>&gt;变量赋值标签元素 </p> <p> 此标签用于向模板变量赋值<span>。</span>标签样例: </p> <p> &lt;<span>vt:<span>set </span></span><span>var</span>="time" <span>value="<span style="color:#000000;">2009-08-09"</span></span> /&gt;<br /> &lt;<span>vt:<span>set</span> </span><span>var</span>="time" <span><span>value</span></span>="$year" <span>value="<span style="color:#000000;">$month</span>" value="<span style="color:#000000;">$day</span>" format="<span style="color:#000000;">{0}-{1}-{2}</span>" </span>/&gt; </p> <p>   <br /> 标签中已定义的属性列表: </p> <p> <br /></p> <table border="0" cellpadding="2" cellspacing="0"><tbody><tr><td> <strong>名称</strong> </td> <td> <strong>说明</strong> </td> </tr><tr><td> id </td> <td> 标签元素的Id,<span>建议唯一</span>但不强制。<span>(可不定义)</span> </td> </tr><tr><td> name </td> <td> 标签元素的名称。<span>(可不定义)</span> </td> </tr><tr><td> var </td> <td> 需要赋值的<span style="color:#993300;">变量标识</span> </td> </tr><tr><td> value </td> <td> <p> 要赋于变量的值,可为数值/字符串常量或变量表达式(必须以$字符开头,如:$i)<br /><span>注:此属性可以多次定义,但如果多次定义则必须定义format属性。</span> </p> </td> </tr><tr><td> format </td> <td> 用于格式化变量值的格式,可以为字符串常量或变量表达式(以$字符开头)。<span>(可不定义)</span><br /> 注:<span>在格式表达式中分别以{0},{1}表示各个value属性的变量值</span> </td> </tr><tr><td> output </td> <td> 是否在解析标签时输出标签的结果值true/false,如果定义此属性且值设为true,则可以不定义var属性(即不存储结果值),默认不输出标签结果值。<span>(可不定义)</span> </td> </tr></tbody></table><p>   </p> <p>   </p> <p> <strong>6.15、</strong>&lt;<span>vt:output</span>&gt;数据输出标签元素 </p> <p> 此标签可输出某个标签或文件的数据<span>。</span>标签样例: </p> <p> &lt;<span>vt:<span>output </span></span><span>tagid</span>="user" /&gt;<br /> &lt;<span>vt:<span>output</span> </span><span>file</span>="output.html<span>" charset="<span style="color:#000000;">gb2312</span>" </span>/&gt; </p> <p>   <br /> 标签中已定义的属性列表: </p> <p> <br /></p> <table border="0" cellpadding="2" cellspacing="0"><tbody><tr><td> <strong>名称</strong> </td> <td> <strong>说明</strong> </td> </tr><tr><td> id </td> <td> 标签元素的Id,<span>建议唯一</span>但不强制。<span>(可不定义)</span> </td> </tr><tr><td> name </td> <td> 标签元素的名称。<span>(可不定义)</span> </td> </tr><tr><td> tagid </td> <td> 需要输出数据的其它标签元素Id,可以为字符串常量或变量表达式(以$字符开头)。<span>(可不定义)<br /> 注:如果未定义此属性则需要定义file属性</span> </td> </tr><tr><td> file </td> <td> <p> 需要输出数据的文件,可以为绝对路径或相对路径,可以为字符串常量或变量表达式(以$字符开头)。<span>(可不定义)</span> </p> <p> <span>注:如果未定义此属性则需要定义tagid属性</span> </p> </td> </tr><tr><td> charset </td> <td> 读取文件时使用的编码,可以为字符串常量或变量表达式(以$字符开头)。<span>(可不定义)</span> </td> </tr></tbody></table><p>   </p> <p>   </p> <p>   </p> <p> <strong>6.16、</strong>&lt;<span>vt:import</span>&gt;类型导入标签元素 </p> <p> 此标签可导入某个类型。标签样例: </p> <p> &lt;<span>vt:<span>import <span>var</span><span style="color:#000000;">="math" </span></span></span><span>type</span>="System.Math" /&gt; </p> <p> &lt;<span>vt:<span>import <span>var</span><span style="color:#000000;">="utils" </span></span></span><span>type</span>="Kingthy.Utils" <span style="color:#800080;">assembly</span>="c:\dll\kingthy.utils.dll"  /&gt;<br />   <br /> 标签中已定义的属性列表: </p> <p> <br /></p> <table border="0" cellpadding="2" cellspacing="0"><tbody><tr><td> <strong>名称</strong> </td> <td> <strong>说明</strong> </td> </tr><tr><td> id </td> <td> 标签元素的Id,<span>建议唯一</span>但不强制。<span>(可不定义)</span> </td> </tr><tr><td> name </td> <td> 标签元素的名称。<span>(可不定义)</span> </td> </tr><tr><td> var </td> <td> 用于保存类型的<span style="color:#993300;">变量标识</span> </td> </tr><tr><td> type </td> <td> <p> 需要导入的类型,可以为字符串常量或变量表达式(以$字符开头) </p> </td> </tr><tr><td> assembly </td> <td> 需要导入的类型所在的程序集,可以为字符串常量或变量表达式(以$字符开头),值可以定义为某个程序集文件或程序集名称。<span>(可不定义)</span> </td> </tr></tbody></table><p>   </p> <p>   </p> <p>   </p> <p>   </p> <p>   </p> <p>   </p> <p> <strong>6.17、</strong>&lt;<span>vt:panel</span>&gt;数据面板标签元素 </p> <p> 此标签可方便用于实现“母版页”(MasterPage)的功能。标签样例: </p> <p> 定义容器面板: </p> <p> &lt;<span>vt:<span>panel <span>id</span></span></span>="header" /&gt; </p> <p>   </p> <p> 定义内容数据面板,此内容标签里的数据将在对应的容器面板里输出。 </p> <p> &lt;<span>vt:<span>panel <span>container</span><span style="color:#000000;">="header</span></span></span>"&gt; </p> <p> 这是头部内容 </p> <p> &lt;/<span>vt:<span>panel </span></span>&gt; </p> <p>   </p> <p> 上面定义的标签的数据将会在id="header"里的panel标签里输出。<br /><br /> 标签中已定义的属性列表: </p> <p> <br /></p> <table border="0" cellpadding="2" cellspacing="0"><tbody><tr><td> <strong>名称</strong> </td> <td> <strong>说明</strong> </td> </tr><tr><td> id </td> <td> 标签元素的Id,<span>建议唯一</span>但不强制。如果定义了此id则表示此面板标签可以做为一个容器面板使用<span>(可不定义)</span> </td> </tr><tr><td> name </td> <td> 标签元素的名称。<span>(可不定义)</span> </td> </tr><tr><td> container </td> <td> 定义输出容器面板的id。如果定义此属性则表示此面板数据只在容器面板里输出。<span>(可不定义)</span> </td> </tr></tbody></table><p>   </p> <p> 注意:此标签必须定义id或者container之一属性,或者全都定义 </p> <p>   </p> <p>   </p> <p>   </p> </blockquote> <p> <strong></strong>  </p> <p> <strong>7、变量元素</strong> </p> <p> 变量元素主要用于输出变量表达式的值。其定义格式为: </p> <p> {$:<span>变量表达式</span> <span>属性</span>="<span>属性值</span>"} </p> <p> 或3.7版本以上可以这样定义(建议) </p> <p>  {$<span>变量表达式</span> <span>属性</span>="<span>属性值</span>"} </p> <p>   </p> <p> 例子: </p> <p> {$:<span>i</span>}、{$:<span>user</span>.<span>age</span> format=”00”}、{$:<span>user</span>.<span>name</span> length=”20” htmlencode=”true”} </p> <p> {$:<span>#my</span>.<span>i</span>}、{$:<span>##</span>.<span>user</span>.<span>age</span>}、{$:<span>#my</span>.<span>user</span>.<span>location.getcity()</span> htmlencode=”true”} </p> <p>   </p> <p> 元素中已定义的属性列表: </p> <table border="0" cellpadding="2" cellspacing="0"><tbody><tr><td> <strong>名称</strong> </td> <td> <strong>说明</strong> </td> </tr><tr><td> htmlencode </td> <td> 输出变量表达式的值时是否需要进行HTML字符编码。true/false,默认为false<span>(可不定义)</span> </td> </tr><tr><td> urlencode </td> <td> 输出变量表达式的值时是否需要进行URL字符编码。true/false,默认为false<span>(可不定义)</span> </td> </tr><tr><td> xmlencode </td> <td> 输出变量表达式的值时是否需要进行XML字符编码。true/false,默认为false<span>(可不定义)</span> </td> </tr><tr><td> textencode </td> <td> 输出变量表达式的值时是否需要进行文本字符编码(先进行HTML字符编码,再将“空格”转换为"&amp;nbsp;”;“回车换行”转换为"&lt;br /&gt;”字符)。true/false,默认为false<span>(可不定义)</span> </td> </tr><tr><td> jsencode </td> <td> 输出变量表达式的值时是否需要进行Javascript脚本字符编码。true/false,默认为false<span>(可不定义)</span> </td> </tr><tr><td> format </td> <td> 用于格式化变量表达式的值的格式(如果变量表达的值已实现<span>IFormattable</span>接口则调用接口方法,否则调用String.Format方法)。<span>(可不定义)</span> </td> </tr><tr><td> length </td> <td> 输出变量表达的值时的最大长度。如果值的字符长度超出此定义的值,则将进行字符截取。默认为0不截取<span>(可不定义)</span> </td> </tr><tr><td> charset </td> <td> 定义在进行urlencode或length截取字符时采用的编码。默认为所在模板块的charset<span>(可不定义)</span> </td> </tr><tr><td> appendtext </td> <td> <p> 定义文本在输出时如果被裁剪后要附加显示的文本。<span>(可不定义)</span> <br /> 注: 此属性必须和length属性配合使用。 </p> </td> </tr><tr><td> removehtml </td> <td> 定义在数据输出时是否将数据里的HTML字符删除。<span>(可不定义)</span> </td> </tr><tr><td> call </td> <td> 在输出变量表达式的值前需要调用的函数名称。<span>(可不定义)</span> <br /><span>注:此属性可以多次定义,模板引擎将根据定义顺序先后调用函数。函数的原型参考<span style="color:#3366FF;">UserDefinedFunction</span>委托</span> </td> </tr></tbody></table><p>   </p> <p> <strong>8、注释标签:</strong> </p> <p>      注:注释标签只在2.1以上版本有效 </p> <p>      格式<span style="color:red;">:&lt;!--vt[</span><span style="color:#008000;">注释文字</span><span style="color:red;">]--&gt;</span> </p> <p>      注释标签在解析输出时不会被输出显示,并且注释里面可以书写任何的标签元素,都不会被VTemplate模板引擎解析。 </p> <p>      例子: </p> <p>      <span style="color:#FF0000;">&lt;!--vt[</span><span style="color:#008000;">这是VT的注释代码,下面的标签不会被解析到&lt;vt:serverdata type="time" output="true" /&gt;。</span><span style="color:#FF0000;">]--&gt;</span> </p> <p> <strong></strong>  </p> <p> <strong>9、项目托管</strong>: <br /> VTemplate项目托管在Google code上。 <br /> URL: <a href="http://net-vtemplate.googlecode.com/" target="_blank" rel="nofollow">http://net-vtemplate.googlecode.com/</a> <br /> SVN: <a href="http://net-vtemplate.googlecode.com/svn/src/VTemplate.Engine/" target="_blank" rel="nofollow">http://net-vtemplate.googlecode.com/svn/src/VTemplate.Engine/</a> </p> <p>  <strong>例子请参考VTemplate.WebTester项目</strong>: </p> <p>  <a href="http://net-vtemplate.googlecode.com/svn/src/VTemplate.WebTester/" target="_blank" rel="nofollow">http://net-vtemplate.googlecode.com/svn/src/VTemplate.WebTester/</a> </p> <p> <br /></p> <p> </p> <p> <strong>1、VTemplate模板引擎的元素对象:</strong> </p> <p> 让我们看一下VTemplate模板引擎中的所有元素对象关系图: </p> <p> <a href="http://images.cnblogs.com/cnblogs_com/kingthy/WindowsLiveWriter/VTemplate_E36C/vtemplate_cd.png" target="_blank" rel="nofollow"><img title="vtemplate_cd" alt="vtemplate_cd" height="279" width="908" class="b-lazy" data-src="http://static.oschina.net/uploads/img/201308/22103140_hGSv.png" data-original="http://static.oschina.net/uploads/img/201308/22103140_hGSv.png" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" /></a> </p> <p> 从关系图可看出,VTemplate模板引擎的元素对象主要由三种基对象构成:<span>TextNode</span>、<span>VariableTag、<span>Tag</span></span>。 </p> <p>   </p> <p> <strong>1.1、<span>TextNode</span>元素对象:</strong> </p> <blockquote> <p> <span>TextNode</span>即是文本节点,也即是对模板引擎来说无任何意义的文本字符。 </p> <p> 如<a href="http://www.cnblogs.com/kingthy/archive/2009/08/19/net-vtemplate-doc-1.html" target="_blank" rel="nofollow"><span>上一篇</span></a>中的这段VT模板: </p> <table border="0" cellpadding="2" cellspacing="0"><tbody><tr><td> <span>&lt;div class=”bloglog”&gt;&lt;strong&gt;</span><span>{$:blogarchive.title htmlencode=”true”}</span><span>&lt;/strong&gt;</span> </td> </tr></tbody></table><p> 当被模板引擎解析后,前后暗红色区域的段字符将被解析为两个不同的<span>TextNode</span>对象。 </p> </blockquote> <p> <strong>1.2、<span>VariableTag</span>元素对象:</strong> </p> <blockquote> <p> <span>VariableTag</span>是<a href="http://www.cnblogs.com/kingthy/archive/2009/08/17/net-vtemplate.html" target="_blank" rel="nofollow"><span>变量元素</span></a>对象,主要用于输出变量表达式的值。如上例中的VT模板,被解析后将红色段字符将被解析为一个<span>VariableTag</span>对象。 </p> </blockquote> <p> <strong>1.3、<span>Tag</span>元素对象:</strong> </p> <blockquote> <p> <span>Tag</span>是<a href="http://www.cnblogs.com/kingthy/archive/2009/08/17/net-vtemplate.html" target="_blank" rel="nofollow"><span>标签元素</span></a>对象,此类对象可供我们的程序获取调用,所以一般用于做程序逻辑控制。其根据不同的用途衍生出不同的标签元素对象,如条件判断的<span>IfTag</span>、数据循环的<span>ForEachTag</span>和<span>ForTag</span>对象等等。 </p> <p> <span>方法:</span> </p> <table border="0" cellpadding="2" cellspacing="0"><tbody><tr><td> <strong>名称</strong> </td> <td> <strong>说明</strong> </td> </tr><tr><td> <span>GetChildTagById</span>(string id) </td> <td> 根据标签id获取某个子<span>Tag</span>对象 </td> </tr><tr><td> <span>GetChildTagsByName</span>(string name) </td> <td> 获取所有同名称的子<span>Tag</span>对象 </td> </tr><tr><td> <span>GetChildTagsByTagName</span>(string tagName) </td> <td> 获取所有同标签名(如&lt;vt:for&gt;中的for则叫标签名)的子<span>Tag</span>对象 </td> </tr><tr><td> <span>Render</span>(TextWriter writer) </td> <td> 将本标签元素对象的最终呈现数据文本解析到TextWriter对象 </td> </tr><tr><td> <span>RenderTo</span><span>(string filename)<br /><span>RenderTo</span><span>(string filename, Encoding charset)</span></span> </td> <td> 将本标签元素对象的最终呈现数据文本解析到某个文件保存 </td> </tr></tbody></table><p> <br /><span>部分属性/集合</span><span>:</span> </p> <table border="0" cellpadding="2" cellspacing="0"><tbody><tr><td> <strong>名称</strong> </td> <td> <strong>说明</strong> </td> </tr><tr><td> <span>Attributes</span> </td> <td> 返回标签对象中定义的属性集合 </td> </tr><tr><td> <span>InnerElements</span> </td> <td> 返回标签对象中的子元素对象集合 </td> </tr></tbody></table><p>   </p> <p> <span>事件:</span> </p> <table border="0" cellpadding="2" cellspacing="0"><tbody><tr><td> <strong>名称</strong> </td> <td> <strong>说明</strong> </td> </tr><tr><td> <span>BeforeRender</span> </td> <td> 在准备呈现本标签元素对象的解析数据文本前触发的事件 </td> </tr><tr><td> <span>AfterRender</span> </td> <td> 在已呈现本标签元素对象的解析数据文本后触发的事件 </td> </tr></tbody></table><p>   </p> <p> <strong>1.3.1 <span>TemplateDocument</span>对象:</strong> </p> </blockquote> <blockquote> <p> <span>TemplateDocument</span>对象是VTemplate模板引擎的入口。当根据VT模板实例化<span>TemplateDocument</span>对象后,在程序里我们就可以通过<span>TemplateDocument</span>对象提供的方法或属性/集合来访问VT模板在内存中表现的各个模板元素对象。 </p> <p> <span>方法:</span> </p> <table border="0" cellpadding="2" cellspacing="0"><tbody><tr><td> <strong>名称</strong> </td> <td> <strong>说明</strong> </td> </tr><tr><td> <span>GetChildTemplateById</span>(string id) </td> <td> 根据标签id获取某个子<span>Template</span>对象 </td> </tr><tr><td> <span>GetChildTemplatesByName</span>(string name) </td> <td> 获取所有同名称的子<span>Template</span>对象 </td> </tr><tr><td> <span>GetRenderText</span>() </td> <td> 获取解析后最终呈现的数据文本 </td> </tr><tr><td> <span>SetValue</span>(string varName,obj varValue) </td> <td> 设置所有同名变量的值 </td> </tr><tr><td> <span>FromFileCache</span>(string fileName, Encoding charset) </td> <td> 从文件中构建缓存模板文档对象 </td> </tr></tbody></table><p>   </p> <p> <span>部分属性/集合:</span> </p> <table border="0" cellpadding="2" cellspacing="0"><tbody><tr><td> <strong>名称</strong> </td> <td> <strong>说明</strong> </td> </tr><tr><td> <span>DocumentElement</span> </td> <td> 返回文档(根)模板对象 </td> </tr><tr><td> <span>Variables</span> </td> <td> 返回当前模板块下的变量集合 </td> </tr><tr><td> <span>ChildTemplates</span> </td> <td> 返回当前模板块下的子<span>Template</span>对象集合 </td> </tr></tbody></table><p>   </p> </blockquote> <p> <strong>2、Variable :</strong>变量 </p> <blockquote> <p> 变量是VTemplate模板引擎中的核心,用于存储或控制数据的输出,其类似于程序语言中的“变量”概念,定义格式也是一样。其在VT模板中是寄生于<span>VariableTag</span>元素对象或者<span>Tag</span>元素对象中的属性值中。 </p> <p> 在<span>VariableTag</span>元素对象中定义: </p> <table border="0" cellpadding="2" cellspacing="0"><tbody><tr><td> <p> &lt;div class=”bloglog”&gt;&lt;strong&gt;<span>{$:<span>blogarchive</span>.title htmlencode=”true”}</span>&lt;/strong&gt; </p> </td> </tr></tbody></table><p> 或在<span>Tag</span>元素对象属性中定义: </p> <table border="0" cellpadding="2" cellspacing="0"><tbody><tr><td> <p> &lt;vt:foreach from=”<span>blogarchive</span>.comments” item=”<span>comment</span>” index=”<span>floor</span>”&gt;………&lt;/vt:foreach&gt; </p> </td> </tr></tbody></table><p> 当上面的VT模板被解析后,蓝色的字符将会解析为<strong>Variable</strong>。在程序代码中就可以通过<span>TemplateDocument</span>或<span>Template</span>标签元素对象的<span>Variables</span>集合访问变量。 </p> <p>   </p> <p> <span>方法:</span> </p> <table border="0" cellpadding="2" cellspacing="0"><tbody><tr><td> <strong>名称</strong> </td> <td> <strong>说明</strong> </td> </tr><tr><td> <span>SetExpValue</span>(string exp, object value) </td> <td> 设置变量中某种表达式所表示的值 </td> </tr><tr><td> <span>Reset</span>() </td> <td> 重设(清空)当前变量中已缓存的表达式值 </td> </tr></tbody></table><p> <span><br /> 部分属性:</span> </p> <table border="0" cellpadding="2" cellspacing="0"><tbody><tr><td> <strong>名称</strong> </td> <td> <strong>说明</strong> </td> </tr><tr><td> <span>Value</span> </td> <td> 设置或返回当前变量的值 </td> </tr></tbody></table><p>   </p> </blockquote> <p> <strong>3、Attribute : 属性</strong> </p> <blockquote> <p> <span>Tag</span>元素对象中定义的某个属性,当定义后可通过对应<span>Tag</span>元素对象的<span>Attributes</span>集合访问。 </p> <table border="0" cellpadding="2" cellspacing="0"><tbody><tr><td> <p> &lt;vt:foreach from=”<span>blogarchive</span>.comments” item=”<span>comment</span>” index=”<span>floor</span>”&gt;………&lt;/vt:foreach&gt; </p> </td> </tr></tbody></table><p> 如上面VT模板被解析后foreach元素对象将含有3个属性。 </p> <p> 注:<span>Tag</span>元素对象的属性不限制个数,但在某些<span>Tag</span>元素对象中某些属性是已被VT模板引擎定义使用的! </p> </blockquote> <p>   </p> <p> <strong>4、LoopIndex :循环索引</strong> </p> <p> 循环索引只在&lt;<span>vt:foreach</span>&gt;和&lt;<span>vt:for</span>&gt; <span>Tag</span>元素对象中index属性值中使用,或者换句话说,&lt;<span>vt:foreach</span>&gt;和&lt;<span>vt:for</span>&gt;标签中<span>index</span>属性定义的变量的值存储的是一个循环索引对象。 </p> <p> <span><br /> 部分属性:</span> </p> <table border="0" cellpadding="2" cellspacing="0"><tbody><tr><td> <strong>名称</strong> </td> <td> <strong>说明</strong> </td> </tr><tr><td> <span>Value</span> </td> <td> 返回当前索引值 </td> </tr><tr><td> <span>IsFirst</span> </td> <td> 返回当前索引值是不是第一个 </td> </tr><tr><td> <span>IsLast</span> </td> <td> 返回当前索引值是不是最后一个 </td> </tr><tr><td> <span>IsEven</span> </td> <td> 返回当前索引值是不是偶数值 </td> </tr></tbody></table><p>   </p> <p> 在<a href="http://www.cnblogs.com/kingthy/archive/2009/08/19/net-vtemplate-doc-1.html" target="_blank" rel="nofollow"><span>上篇中</span></a>我们实现了一个博客评论列表,那段VT模板如下: </p> <table border="0" cellpadding="2" cellspacing="0"><tbody><tr><td> <p> &lt;strong&gt;评论列表&lt;/strong&gt;<br /> &lt;<span>vt:foreach</span> from=”$blogarchive.comments” item=”#.comment” <span>index</span>=”#.<span>floor</span>”&gt;<br /> &lt;hr class=”blogsplit”/&gt;<br /> &lt;div class=”blogcomment”&gt;#{$:#.floor}楼 {$:#.comment.time format=”yyyy-MM-dd HH:mm”} | {$:#.comment.author htmlencode=”true”} &lt;/div&gt; &lt;div style="padding-left: 20px"&gt;{$:#.comment.content htmlencode=”true”}&lt;/div&gt;<br /> &lt;/<span>vt:foreach</span>&gt; </p> </td> </tr></tbody></table><p> 如果现在我们想实现<span>当楼层为偶数时</span>换一种风格显示(比如加背景色),那么我们就可以根据floor变量的值来进行修改VT模板了,如下: </p> <p> &lt;strong&gt;评论列表&lt;/strong&gt;<br /> &lt;<span>vt:foreach</span> from=”$blogarchive.comments” item=”#.comment” <span>index</span>=”#.<span>floor</span>”&gt;<br /> &lt;hr class=”blogsplit”/&gt;<br /> &lt;<span>vt:if</span> var=”<span>#.floor</span><span>.iseven</span>” value=”true”&gt;<br /> &lt;div class=”<span>blogcomment evenfloor</span>”&gt;#{$:#.floor}楼 {$:#.comment.time format=”yyyy-MM-dd HH:mm”} | {$:#.comment.author htmlencode=”true”} &lt;/div&gt; &lt;div style="padding-left: 20px"&gt;{$:#.comment.content htmlencode=”true”}&lt;/div&gt;<br /> &lt;<span>vt:else</span> /&gt;<br /> &lt;div class=”<span>blogcomment</span>”&gt;#{$:#.floor}楼 {$:#.comment.time format=”yyyy-MM-dd HH:mm”} | {$:#.comment.author htmlencode=”true”} &lt;/div&gt; &lt;div style="padding-left: 20px"&gt;{$:#.comment.content htmlencode=”true”}&lt;/div&gt;<br /> &lt;/<span>vt:if</span>&gt;<br /> &lt;/<span>vt:foreach</span>&gt; </p> <p></p> <div class="alert alert-success" role="alert"><p>来源:<code>oschina</code></p><p>链接:<code>https://my.oschina.net/u/584165/blog/156012</code></p></div></div> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field--label">标签</div> <div class="field--items"> <div class="field--item"><a href="/tag/vtemplate" hreflang="zh-hans">vtemplate</a></div> <div class="field--item"><a href="/tag/mobanyinqing" hreflang="zh-hans">模板引擎</a></div> <div class="field--item"><a href="/tag/aspnetmobanyinqing" hreflang="zh-hans">asp.net模板引擎</a></div> </div> </div> Sun, 29 Nov 2020 15:44:15 +0000 孤人 3940716 at https://www.e-learn.cn 基于.NET的免费开源的模板引擎---VTemplate https://www.e-learn.cn/topic/3762912 <span>基于.NET的免费开源的模板引擎---VTemplate</span> <span><span lang="" about="/user/112" typeof="schema:Person" property="schema:name" datatype="">回眸只為那壹抹淺笑</span></span> <span>2020-08-16 09:32:09</span> <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"> <p><strong>1、VTemplate模板引擎的简介</strong></p> <p>VTemplate模板引擎也简称为VT,是基于.NET的模板引擎,它允许任何人使用简单的类似HTML语法的模板语言来引用.NET里定义的对象。当VTemplate应用于web开发时,界面设计人员可以和程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只关注页面的显示效果,而由程序开发人员关注业务逻辑编码。VTemplate将.NET程序代码从web页面中分离出来,这样为web站点的长期维护提供了便利,同时也为我们在ASP.NET WebForm开发之外又提供了一种可选的方案。 VTemplate也可以作为动态文本生成工具,生成HTML、XML、邮件、程序源代码或其它文本等。</p> <p> </p> <p> </p> <p><strong>2、VTemplate模板的特色:</strong></p> <blockquote> <p><span style="color: #ff0000;">2.1、</span>VT是一种解释型的模板引擎,所以你可以随时更改你的模板代码以获得不同的输出,而不需要重新编译程序代码<br /><span style="color: #ff0000;">2.</span><span style="color: #ff0000;">2、</span>VT支持缓存,也就是模板只需要解析一次,下次就可以直接从内存里构建您的模板对象而不需要再次解析模板代码,除非相关的模板文件已被修改。<br /><span style="color: #ff0000;">2.</span><span style="color: #ff0000;">3、</span>VT的模板标签语法是基于HTML规范定义的元素,所以对页面设计人员来说是非常友好的。<br /><span style="color: #ff0000;">2.</span><span style="color: #ff0000;">4、</span>VT模板支持循环、条件判断、数值表达式计算等,以方便你在模板里直接进行逻辑处理。<br /><br /><br /></p> <p><span style="color: #ff0000;">2.</span><span style="color: #ff0000;">5、</span>VT支持直接调用对象里的方法<br />例子:<br />------------模板代码--------------<br /><span style="color: #808000;">&lt;vt:function var="data" method="GetData" type="$user" /&gt;</span><br /><span style="color: #808000;">&lt;vt:set var="data" value="$user.GetData()" /&gt;</span><br />----------------------------------<br /><br /><br /><br /><br /></p> <p>上面模板里第一种采用function标签调用user对象的GetData方法,第二种则直接采用变量表达式执行方法。</p> <p><br /><span style="color: #ff0000;">2.6、</span>VT可以很灵活的直接获取对象的属性、字段、集合项等数据。<br />例子:<br />------------模板代码--------------<br /><span style="color: #808000;">&lt;h4&gt;姓名:{$user.name}&lt;/h4&gt;</span><br />----------------------------------<br /><br /><br /><br /><br /></p> <p>上面的变量元素里,user可以为</p> <p><span style="color: #808000;">public class user{</span><br /><span style="color: #808000;"> public string name;</span><br /><span style="color: #808000;">}</span><br /><br /></p> <p>也可以为<br /><span style="color: #808000;">public class user{</span><br /><span style="color: #808000;"> public string name{get;set;}</span><br /><span style="color: #808000;">}</span><br /><br /><br /></p> <p>也可以为<br /><span style="color: #808000;">var user = new Dictionary&lt;string, string&gt;();</span><br /><span style="color: #808000;">user.Add("name","张三");</span><br /><br /></p> <p><br />VT会自动判断user对象的name是存在于对象的字段、属性还是集合项里。<br /></p> </blockquote> <p> </p> <p> </p> <p><strong>3、VTemplate模板范例</strong>:</p> <table style="width: 906px;" border="0" cellspacing="0" cellpadding="2"><tbody><tr><td> <p>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"&gt; <br />&lt;html&gt; <br />&lt;head&gt; <br />&lt;title&gt; test1 &lt;/title&gt; <br />&lt;/head&gt; <br />&lt;body&gt; <br />&lt;<span style="color: #808000;">vt:for</span> <span style="color: #800080;">from</span>="1" <span style="color: #800080;">to</span>="9" <span style="color: #800080;">index</span>="i"&gt; <br />&lt;<span style="color: #808000;">vt:for</span> <span style="color: #800080;">from</span>="1" <span style="color: #800080;">to</span>="$i" <span style="color: #800080;">index</span>="j"&gt; <br />&lt;<span style="color: #808000;">vt:expression</span> <span style="color: #800080;">var</span>="r" <span style="color: #800080;">args</span>="$i" <span style="color: #800080;">args</span>="$j" <span style="color: #800080;">expression</span>="{0}*{1}" /&gt;{<span style="color: #ff0000;">$:i</span>}*{<span style="color: #ff0000;">$:j</span>}={<span style="color: #ff0000;">$:r</span>}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; <br />&lt;/<span style="color: #808000;">vt:for</span>&gt; <br />&lt;br /&gt; <br />&lt;/<span style="color: #808000;">vt:for</span>&gt; <br />&lt;/body&gt; <br />&lt;/html&gt;<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /></p> </td> </tr></tbody></table><p>以上模板代码经过VTemplate解析运行后将输出一个<span style="color: #800000;">99乘法表,</span>如下:</p> <table style="width: 906px;" border="0" cellspacing="0" cellpadding="2"><tbody><tr><td> <p>1*1=1     <br />2*1=2     2*2=4     <br />3*1=3     3*2=6     3*3=9     <br />4*1=4     4*2=8     4*3=12     4*4=16     <br />5*1=5     5*2=10     5*3=15     5*4=20     5*5=25     <br />6*1=6     6*2=12     6*3=18     6*4=24     6*5=30     6*6=36     <br />7*1=7     7*2=14     7*3=21     7*4=28     7*5=35     7*6=42     7*7=49     <br />8*1=8     8*2=16     8*3=24     8*4=32     8*5=40     8*6=48     8*7=56     8*8=64     <br />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    <br /><br /><br /><br /><br /><br /><br /><br /></p> </td> </tr></tbody></table><p>而程序处理代码则只有简单的两行,如下: <br />注:假设上面的模板代码存放在test1.html文件上<br /></p> <table style="width: 908px;" border="0" cellspacing="0" cellpadding="2"><tbody><tr><td><span style="color: #2b91af;">TemplateDocument </span>document = <span style="color: blue;">new </span><span style="color: #2b91af;">TemplateDocument</span>(Server.MapPath(<span style="color: #a31515;">"template/test1.html"</span>), <span style="color: #2b91af;">Encoding</span>.UTF8); <br />document.Render(Response.Output);<br /></td> </tr></tbody></table><p> </p> <p> </p> <p><strong>4、什么是VT模板元素?</strong></p> <p>VT模板元素VTemplate模板引擎定义的有特殊作用的模板语言元素,分为<strong>标签元素</strong>和<strong>变量元素</strong>。</p> <blockquote> <p>4.1、标签元素都是程序逻辑控制元素,是标准的HTML标签元素,如上例中用于循环处理的&lt;vt:for&gt;标签和用于计算表达式值的&lt;vt:expression&gt;标签等</p> <p>4.2、变量元素是数据输出元素,其格式是以“<span style="color: #0000ff;">{$:</span>”字符开头,以“<span style="color: #0000ff;">}</span>”字符结束。 如上例中的{<span style="color: #ff0000;">$:i</span>}、{<span style="color: #ff0000;">$:j</span>}和{<span style="color: #ff0000;">$:r</span>}等</p> <p>注:3.7版本后,变量元素的定义可以取消“<span style="color: #0000ff;">:</span>”号,即以“<span style="color: #0000ff;">{$</span>”字符开头,如{<span style="color: #ff0000;">$i</span>}、{<span style="color: #ff0000;">$j</span>}与上面的定义不同,但都是一样输出变量的值。</p> </blockquote> <p><strong>5、变量、变量标识、变量表达式</strong></p> <blockquote> <p><strong>5.1、</strong>变量是VTemplate模板引擎中的核心元素,用于存储或控制数据的输出,其类似于程序语言中的“变量”概念,定义格式也是一样。如上例中的<span style="color: #ff0000;">i</span>,<span style="color: #ff0000;">j</span>,<span style="color: #ff0000;">r</span>变量。</p> <p><strong>5.2、</strong>变量标识由两部分组成:变量前缀与变量(名)。其中“变量前缀”可以省略,如“#.i”,“#u.i”,“u“</p> <p>        <span style="color: #993300;">变量前缀</span>:以#号开头后跟模板块的Id值,用于指示此变量是取自于对应Id的模板块下的变量,如#my.user则表示user变量是取自于Id为my的模板块下的变量;如果省略Id 号,即前缀只为#号,则表示是当前模板块下的变量;而如果前缀是“##”,则表示是当前模板块的父模板块(如果不存在父级模板块则为当前模板块)下的变量;如果<span style="color: #008000;">省略前缀,则表示是文档(根)模板块的变量</span>。</p> <p><strong>5.3、</strong>变量表达式则是定义获取变量中某个字段、属性或函数方法结果值。</p> <p>定义格式为:“<span style="color: #ff0000;">变量标识</span>.<span style="color: #800080;">变量字段/属性/函数方法/索引值</span>”。</p> <p><span style="color: #800080;">变量字段/属性/函数方法/索引值</span>:表示要从变量中取得数据的字段/属性/函数方法/索引值(数字),其中函数方法只支持不带参数的方法。此段可以定义0次或多次。</p> <p>例子:</p> <table style="width: 886px;" border="0" cellspacing="0" cellpadding="2"><tbody><tr><td>#my.user</td> <td>Id为my的模板块下的变量user的值</td> </tr><tr><td>#my.user.age</td> <td>Id为my的模板块下的变量user的age属性/字段值</td> </tr><tr><td>#my.user.location.getcity()</td> <td>Id为my的模板块下的变量user的location属性/字段值的getcity方法返回的值</td> </tr><tr><td>#.user</td> <td>当前模板块下的变量user的值</td> </tr><tr><td>#.user.age.tostring()</td> <td>当前模板块下的变量user的age属性/字段值的tostring方法返回的值</td> </tr><tr><td>##.user.location.city</td> <td>当前模板块的父级模板块的变量user的location属性/字段值的city属性/字段的值</td> </tr><tr><td>user.age</td> <td>文档(根)模板块的变量user的age属性/字段值</td> </tr><tr><td>weeks.0</td> <td>文档(根)模板块的变量weeks的0索引位置的值</td> </tr><tr><td>#.users.0.name</td> <td>当前模板块下变量users的0索引位置的值的name字段/属性值</td> </tr></tbody></table><p>注:变量表达式可在“变量元素”或“标签元素”的部分属性值中使用。</p> </blockquote> <p><strong>6、标签元素</strong>:</p> <blockquote> <p><strong>6.1、</strong>&lt;<span style="color: #808000;">vt:template</span>&gt;模板块标签元素</p> <p>此标签用于定义模板块。在VTemplate的模板规范中,变量是基于模板块存在的,同模板块下同名的变量都是引用同一个变量实例,但不同模板块中的同名变量都是互相独立互不影响的。</p> <p>标签样例:</p> <p>&lt;<span style="color: #808000;">vt:template</span> <span style="color: #800080;">id</span>="mytemplate" <span style="color: #800080;">name</span>="mytemplate"&gt;…………………………&lt;/<span style="color: #808000;">vt:template</span>&gt;</p> <p>或自闭合的样例:</p> <p>&lt;<span style="color: #808000;">vt:template</span> <span style="color: #800080;">id</span>="filetemplate" <span style="color: #800080;">file</span>="include/myfile.html" <span style="color: #800080;">charset</span>="utf-8" /&gt;</p> </blockquote> <blockquote> <p>标签中已定义的属性列表:</p> <table style="width: 922px;" border="0" cellspacing="0" cellpadding="2"><tbody><tr><td><strong>名称</strong></td> <td><strong>说明</strong></td> </tr><tr><td>id</td> <td>标签元素的Id,<span style="color: #ff0000;">建议唯一</span>但不强制。<span style="color: #808080;">(可不定义)</span></td> </tr><tr><td>name</td> <td>标签元素的名称。<span style="color: #808080;">(可不定义)</span></td> </tr><tr><td>file</td> <td>模板块数据文件的路径地址,可以绝对或相对地址</td> </tr><tr><td>charset</td> <td>模板块数据文件的编码,如果<span style="color: #808080;">未定义</span>则如果存在父级模板块的话则采用父级模板块的编码,否则采用系统默认编码</td> </tr><tr><td>render</td> <td>定义用于处理此模块数据的实例,可以为字符串常量或变量表达式(以$字符开头),格式:"<span style="color: #ff00ff;">类实例</span>,<span style="color: #800000;">程序集</span>"。如果已定义此属性但未定义rendermethod属性,则<span style="color: #ff00ff;">类实例</span>必须已实现<span style="color: #2b91af;">ITemplateRender<span style="color: #000000;">接口。<span style="color: #808080;">(可不定义)</span></span></span></td> </tr><tr><td>rendermethod</td> <td>定义用于处理此模块数据的<span style="color: #ff00ff;">类实例</span>的方法,可以为字符串常量或变量表达式(以$字符开头),此方法必须已标记<span style="color: #2b91af;">TemplateRenderMethodAttribute<span style="color: #000000;">特性。<span style="color: #808080;">(可不定义)</span></span></span></td> </tr></tbody></table><p> </p> <p><strong>6.2、</strong>&lt;<span style="color: #808000;">vt:include</span>&gt;文件包含标签元素</p> <p>此标签用于包含外部文件。</p> <p>标签样例:</p> <p>&lt;<span style="color: #808000;">vt:include</span> <span style="color: #800080;">file</span>="include/myfile.html" <span style="color: #800080;">charset</span>="utf-8"&gt;…………………………&lt;/<span style="color: #808000;">vt:include</span>&gt;</p> <p>或自闭合的样例:</p> <p>&lt;<span style="color: #808000;">vt:include</span> <span style="color: #800080;">file</span>="include/myfile.html" <span style="color: #800080;">charset</span>="utf-8" /&gt;</p> <p>标签中已定义的属性列表:</p> <table style="width: 922px;" border="0" cellspacing="0" cellpadding="2"><tbody><tr><td><strong>名称</strong></td> <td><strong>说明</strong></td> </tr><tr><td>id</td> <td>标签元素的Id,<span style="color: #ff0000;">建议唯一</span>但不强制。<span style="color: #808080;">(可不定义)</span></td> </tr><tr><td>name</td> <td>标签元素的名称。<span style="color: #808080;">(可不定义)</span></td> </tr><tr><td>file</td> <td>模板块数据文件的路径地址,可以绝对或相对地址</td> </tr><tr><td>charset</td> <td>模板块数据文件的编码,如果<span style="color: #808080;">未定义</span>此属性则如果存在父级模板块的话则采用父级模板块的编码,否则采用系统默认编码</td> </tr></tbody></table><p> </p> <p><strong>6.3、</strong>&lt;<span style="color: #808000;">vt:for</span>&gt;循环标签元素</p> <p>此标签用于定义数据循环,类似于程序语言中的for循环。</p> <p>标签样例:</p> <p>&lt;<span style="color: #808000;">vt:for</span> <span style="color: #800080;">from</span>="1" <span style="color: #800080;">to</span>="9" <span style="color: #800080;">index</span>="i"&gt;…………………………&lt;/<span style="color: #808000;">vt:for</span>&gt;</p> <p>标签中已定义的属性列表:</p> <table style="width: 922px;" border="0" cellspacing="0" cellpadding="2"><tbody><tr><td><strong>名称</strong></td> <td><strong>说明</strong></td> </tr><tr><td>id</td> <td>标签元素的Id,<span style="color: #ff0000;">建议唯一</span>但不强制。<span style="color: #808080;">(可不定义)</span></td> </tr><tr><td>name</td> <td>标签元素的名称。<span style="color: #808080;">(可不定义)</span></td> </tr><tr><td>from</td> <td>循环起始值,可为一个数值常量(如:1)或变量表达式(必须以$字符开头,如:$i)</td> </tr><tr><td>to</td> <td>循环结束值,可为一个数值常量(如:1)或变量表达式(必须以$字符开头,如:$i)</td> </tr><tr><td>step</td> <td>循环值的步值,可为一个数值常量(如:1)或变量表达式(必须以$字符开头,如:$i),如果<span style="color: #808080;">未定义</span>此属性,则默认为1</td> </tr><tr><td>index</td> <td>定义存储循环索引值的<span style="color: #993300;">变量标识</span>,注:此索引值是一个<span style="color: #23b9e4;">LoopIndex</span>实例。<span style="color: #808080;">(可不定义)</span></td> </tr></tbody></table><p> </p> <p> </p> <p><strong>6.4、</strong>&lt;<span style="color: #808000;">vt:foreach</span>&gt;集合数据循环标签元素</p> <p>此标签用于定义处理集合数据的循环,类似于程序语言中的foreach循环。</p> <p>标签样例:</p> <p>&lt;<span style="color: #808000;">vt:foreach</span> <span style="color: #800080;">from</span>="users" <span style="color: #800080;">item</span>="user" <span style="color: #800080;">index</span>="i"&gt;…………………………&lt;/<span style="color: #808000;">vt:foreach</span>&gt;</p> <p>标签中已定义的属性列表:</p> <table style="width: 922px;" border="0" cellspacing="0" cellpadding="2"><tbody><tr><td><strong>名称</strong></td> <td><strong>说明</strong></td> </tr><tr><td>id</td> <td>标签元素的Id,<span style="color: #ff0000;">建议唯一</span>但不强制。<span style="color: #808080;">(可不定义)</span></td> </tr><tr><td>name</td> <td>标签元素的名称。<span style="color: #808080;">(可不定义)</span></td> </tr><tr><td>from</td> <td>变量表达式</td> </tr><tr><td>item</td> <td>定义存储当前循环值的<span style="color: #993300;">变量标识</span>。<span style="color: #808080;">(可不定义)</span></td> </tr><tr><td>index</td> <td>定义存储循环索引值的<span style="color: #993300;">变量标识</span>,注:此索引值是一个<span style="color: #23b9e4;">LoopIndex</span>实例。<span style="color: #808080;">(可不定义)</span></td> </tr><tr><td>groupsize</td> <td> <p>设置拆分数据集合时的组大小,可以为数值常量(如:2)或变量表达式(以$字符开头)。<span style="color: #808080;">(可不定义)</span><br />如果定义此属性值,并且值大于1,则模板引擎在解析此foreach标签时,先将from属性定义的变量表达式的结果值折分成一组组集合数据再进行解析。<br /></p> <p>例如:from的变量表达式的结果值原是“1,2,3,4,5,6”数组集合,如果groupsize设置为2,则将会拆成"[1,2],[3,4],[5,6]"的数据集合,再用此新的数据集合进行循环解析。</p> </td> </tr></tbody></table><p> </p> <p><strong>6.5、</strong>&lt;<span style="color: #808000;">vt:foreachelse</span>&gt;空集合数据循环标签元素</p> <p>此标签用于定义当集合数据为空(数量为0)时显示处理的节点。此标签必须在&lt;<span style="color: #808000;">vt:foreach</span>&gt;标签中定义,并且此标签为单节点标签(即不需要配对的结束标签)。</p> <p>标签样例:</p> <p>&lt;<span style="color: #808000;">vt:foreach</span> <span style="color: #800080;">from</span>="users" <span style="color: #800080;">item</span>="user" <span style="color: #800080;">index</span>="i"&gt;</p> <p>{$:i}、我叫{$:user.name},今年{$:user.age}岁</p> <p>&lt;<span style="color: #808000;">vt:foreachelse /</span>&gt;</p> <p>没有任何用户</p> <p>&lt;/<span style="color: #808000;">vt:foreach</span>&gt;</p> <p><span style="color: #008000;">注:当users集合数据为空时则显示"没有任何用户"字样,否则不显示此字样。</span></p> <p> </p> <p>标签中已定义的属性列表:</p> <table style="width: 922px;" border="0" cellspacing="0" cellpadding="2"><tbody><tr><td><strong>名称</strong></td> <td><strong>说明</strong></td> </tr><tr><td>id</td> <td>标签元素的Id,<span style="color: #ff0000;">建议唯一</span>但不强制。<span style="color: #808080;">(可不定义)</span></td> </tr><tr><td>name</td> <td>标签元素的名称。<span style="color: #808080;">(可不定义)</span></td> </tr></tbody></table><p> </p> <p><strong>6.6、</strong>&lt;<span style="color: #808000;">vt:if</span>&gt;条件判断标签元素</p> <p>此标签用于定义数据条件判断,类似于程序语言中的if语句。</p> <p>标签样例:</p> <p>&lt;<span style="color: #808000;">vt:if </span><span style="color: #800080;">var</span>="user.age" <span style="color: #800080;">value</span>="20" <span style="color: #800080;">compare</span>="&gt;"&gt;…………………………&lt;/<span style="color: #808000;">vt:if</span>&gt;</p> <p>标签中已定义的属性列表:</p> <table style="width: 922px;" border="0" cellspacing="0" cellpadding="2"><tbody><tr><td><strong>名称</strong></td> <td><strong>说明</strong></td> </tr><tr><td>id</td> <td>标签元素的Id,<span style="color: #ff0000;">建议唯一</span>但不强制。<span style="color: #808080;">(可不定义)</span></td> </tr><tr><td>name</td> <td>标签元素的名称。<span style="color: #808080;">(可不定义)</span></td> </tr><tr><td>var</td> <td>用于判断条件的变量表达式</td> </tr><tr><td>value</td> <td>用于比较条件的值,可为数值/字符串常量或变量表达式(必须以$字符开头,如:$i) <br /><span style="color: #800080;">注:此属性可以多次定义,当var变量表达式中的值和其中一个value属性值匹配时即符合条件。</span><br /></td> </tr><tr><td>compare</td> <td> <p>比较的方式,可以为字符串常量或变量表达式(以$字符开头),值的定义范围: <br />&gt; : 大于 <br />&gt;= : 大于等于 <br />&lt; : 小于 <br />&lt;= : 小于等于 <br />!=或&lt;&gt; : 不等于 <br />= 或== : 相等 <br /><br /><br /><br /><br /><br /></p> <p>^= : 判断是否以某些值开始(字符比较)</p> <p>$= : 判断是否以某些值结束(字符比较)</p> <p>*= : 判断是否包含有某些值(字符比较)<br />如果<span style="color: #808080;">未定义</span>此属性则表示采用“相等”比较。<br /></p> </td> </tr><tr><td>expression</td> <td>定义需要简单运算的表达式,可以为字符串常量或变量表达式(以$字符开头),表达式中支持 “{0}”标记,用于代替var属性的变量表达式的值。<span style="color: #808080;">(可不定义)</span></td> </tr></tbody></table><p> </p> <p><strong>6.7、</strong>&lt;<span style="color: #808000;">vt:elseif</span>&gt;条件分支判断标签元素</p> <p>此标签用于定义数据条件的分支判断。类似于程序语言中的else if语句。此标签可以同时支付一个或多个。此标签只能在&lt;<span style="color: #808000;">vt:if</span><span style="color: #000000;">&gt;标签中定义,并且此标签为单节点标签(即不需要配对的结束标签)。</span></p> <p>标签样例:</p> <p>&lt;<span style="color: #808000;">vt:if </span><span style="color: #800080;">var</span>="user.age" <span style="color: #800080;">value</span>="20"&gt;</p> <p>20岁用户 <br />&lt;<span style="color: #808000;">vt:elseif </span><span style="color: #800080;">value</span>="30” /&gt;<br /></p> <p>30岁用户</p> <p>&lt;<span style="color: #808000;">vt:elseif </span><span style="color: #800080;">value</span>="40” /&gt;</p> <p>40岁用户</p> <p>&lt;/<span style="color: #808000;">vt:if</span>&gt;</p> <p>标签中已定义的属性列表:</p> <table style="width: 922px;" border="0" cellspacing="0" cellpadding="2"><tbody><tr><td><strong>名称</strong></td> <td><strong>说明</strong></td> </tr><tr><td>id</td> <td>标签元素的Id,<span style="color: #ff0000;">建议唯一</span>但不强制。<span style="color: #808080;">(可不定义)</span></td> </tr><tr><td>name</td> <td>标签元素的名称。<span style="color: #808080;">(可不定义)</span></td> </tr><tr><td>var</td> <td>用于判断条件的变量表达式。如果<span style="color: #808080;">未定义</span>此属性,则为标签所在的&lt;<span style="color: #808000;">vt:if</span><span style="color: #000000;">&gt;标签中的var属性值</span></td> </tr><tr><td>value</td> <td>用于比较条件的值,可为数值/字符串常量或变量表达式(必须以$字符开头,如:$i) <br /><span style="color: #800080;">注:此属性可以多次定义,当var变量表达式中的值和其中一个value属性值匹配时即符合条件。</span><br /></td> </tr><tr><td>compare</td> <td> <p>比较的方式,可以为字符串常量或变量表达式(以$字符开头),值的定义范围: <br />&gt; : 大于 <br />&gt;= : 大于等于 <br />&lt; : 小于 <br />&lt;= : 小于等于 <br />!=或&lt;&gt; : 不等于 <br />= 或== : 相等 <br /><br /><br /><br /><br /><br /></p> <p>^= : 判断是否以某些值开始(字符比较)</p> <p>$= : 判断是否以某些值结束(字符比较)</p> <p>*= : 判断是否包含有某些值(字符比较)<br />如果<span style="color: #808080;">未定义</span>此属性则表示采用“相等”比较。<br /></p> </td> </tr><tr><td>expression</td> <td>定义需要简单运算的表达式,可以为字符串常量或变量表达式(以$字符开头),表达式中支持 “{0}”标记,用于代替var属性的变量表达式的值。<span style="color: #808080;">(可不定义)</span></td> </tr></tbody></table><p> </p> <p><strong>6.8、</strong>&lt;<span style="color: #808000;">vt:else</span>&gt;条件分支判断标签元素</p> <p>此标签用于定义数据条件的分支判断,即当&lt;<span style="color: #808000;">vt:if</span><span style="color: #000000;">&gt;标签</span>中的所有条件分支都条件不成立时用于显示处理的节点。类似于程序语言中的else语句。此标签只能在&lt;<span style="color: #808000;">vt:if</span><span style="color: #000000;">&gt;标签中定义,并且此标签为单节点标签(即不需要配对的结束标签)。</span></p> <p>标签样例:</p> <p>&lt;<span style="color: #808000;">vt:if </span><span style="color: #800080;">var</span>="user.age" <span style="color: #800080;">value</span>="20"&gt;</p> <p>20岁用户 <br />&lt;<span style="color: #808000;">vt:elseif </span><span style="color: #800080;">value</span>="30” /&gt;<br /></p> <p>30岁用户</p> <p>&lt;<span style="color: #808000;">vt:else </span>/&gt;</p> <p>未知岁数</p> <p>&lt;/<span style="color: #808000;">vt:if</span>&gt;</p> <p>标签中已定义的属性列表:</p> <table style="width: 922px;" border="0" cellspacing="0" cellpadding="2"><tbody><tr><td><strong>名称</strong></td> <td><strong>说明</strong></td> </tr><tr><td>id</td> <td>标签元素的Id,<span style="color: #ff0000;">建议唯一</span>但不强制。<span style="color: #808080;">(可不定义)</span></td> </tr><tr><td>name</td> <td>标签元素的名称。<span style="color: #808080;">(可不定义)</span></td> </tr></tbody></table><p> </p> <p><strong>6.9、</strong>&lt;<span style="color: #808000;">vt:expression</span>&gt;表达式标签元素</p> <p>此标签用于对变量表达式进行简单数据运算<span style="color: #000000;">。</span></p> <p>标签样例:</p> <p>&lt;<span style="color: #808000;">vt:expression</span> <span style="color: #800080;">var</span>="r" <span style="color: #800080;">args</span>="$i" <span style="color: #800080;">args</span>="$j" <span style="color: #800080;">expression</span>="{0}*{1}" /&gt;</p> <p> </p> <p>标签中已定义的属性列表:</p> <table style="width: 922px;" border="0" cellspacing="0" cellpadding="2"><tbody><tr><td><strong>名称</strong></td> <td><strong>说明</strong></td> </tr><tr><td>id</td> <td>标签元素的Id,<span style="color: #ff0000;">建议唯一</span>但不强制。<span style="color: #808080;">(可不定义)</span></td> </tr><tr><td>name</td> <td>标签元素的名称。<span style="color: #808080;">(可不定义)</span></td> </tr><tr><td>var</td> <td>存储表达式运算结果的<span style="color: #993300;">变量标识</span></td> </tr><tr><td>args</td> <td style="width: 672px; height: 50px;">参与表达式计算的数值或变量表达式(以$字符开头)。<span style="color: #808080;">(可不定义)</span> <br /><span style="color: #800080;">注:此属性可以多次定义,在表达式中分别以{0},{1}表示各个args属性的变量表达式值</span><br /></td> </tr><tr><td>expression</td> <td>要进行运算的表达式,可以为字符串常量或变量表达式(以$字符开头)。</td> </tr><tr><td>output</td> <td>是否在解析标签时输出标签的结果值true/false,如果定义此属性且值设为true,则可以不定义var属性(即不存储结果值),默认不输出标签结果值。<span style="color: #808080;">(可不定义)</span> </td> </tr></tbody></table><p> </p> <p><strong>6.10、</strong>&lt;<span style="color: #808000;">vt:serverdata</span>&gt;服务器数据标签元素</p> <p>此标签用于获取服务器的部分数据,如Session、Application、DateTime等等<span style="color: #000000;">。</span></p> <p>标签样例:</p> <p>&lt;<span style="color: #808000;">vt:<span style="color: #808000;">serverdata</span> </span><span style="color: #800080;">var</span>="session" <span style="color: #800080;">type</span>="session" <span style="color: #800080;">item</span>="username" /&gt;</p> <p> </p> <p>标签中已定义的属性列表:</p> <table style="width: 922px;" border="0" cellspacing="0" cellpadding="2"><tbody><tr><td><strong>名称</strong></td> <td><strong>说明</strong></td> </tr><tr><td>id</td> <td>标签元素的Id,<span style="color: #ff0000;">建议唯一</span>但不强制。<span style="color: #808080;">(可不定义)</span></td> </tr><tr><td>name</td> <td>标签元素的名称。<span style="color: #808080;">(可不定义)</span></td> </tr><tr><td>var</td> <td>存储服务器数据的<span style="color: #993300;">变量标识</span></td> </tr><tr><td>type</td> <td> <p>要获取服务器数据的类型,可以为字符串常量或变量表达式(以$字符开头)。值的定义:</p> <table style="width: 769px; height: 507px;" border="0" cellspacing="0" cellpadding="2"><tbody><tr><td><strong>类型</strong></td> <td><strong>说明</strong></td> </tr><tr><td><span style="color: #0000ff;">Time</span></td> <td> <p>获取服务器时间</p> <p><span style="color: #800080;">item 属性值可定义为以下值:</span></p> <p>today = 获取今天的日期(不带时间部分)</p> <p>yesterday = 获取昨天的日期(不带时间部分)</p> <p>tomorrow = 获取明天的日期(不带时间部分)</p> <p>其它值 = 获取服务器现在的时间</p> </td> </tr><tr><td><span style="color: red;">Random</span></td> <td> <p>获取一个0---1之间的双精度随机数</p> <p><span style="color: #800080;">item 属性不需要定义</span></p> </td> </tr><tr><td>Application</td> <td> <p>获取服务器当前上下文的HttpApplicationState对象.如果模板引擎不在Web程序上使用则无效</p> <p><span style="color: #800080;">item 属性值则为Application集合的键值key</span></p> </td> </tr><tr><td>Session</td> <td> <p>获取服务器当前上下文的HttpSessionState对象.如果模板引擎不在Web程序上使用则无效</p> <p><span style="color: #800080;">item 属性值则为Session集合的键值key</span></p> </td> </tr><tr><td>Cache</td> <td style="height: 23px;"> <p>获取服务器当前上下文的缓存对象</p> <p><span style="color: #800080;">item 属性值则为Cache集合的键值key</span></p> </td> </tr><tr><td>QueryString</td> <td style="height: 23px;"> <p>获取服务器当前上下文的Request.QueryString数据集合.如果模板引擎不在Web程序上使用则无效</p> <p><span style="color: #800080;">item 属性值则为Request.QueryString集合的键值key</span></p> </td> </tr><tr><td>Form</td> <td style="height: 23px;">获取服务器当前上下文的Request.Form数据集合.如果模板引擎不在Web程序上使用则无效 <p><span style="color: #800080;">item 属性值则为Request.Form集合的键值key</span></p> </td> </tr><tr><td>Cookie</td> <td style="height: 23px;"> <p>获取服务器当前上下文的Request.Cookie数据集合.如果模板引擎不在Web程序上使用则无效 </p> <p><span style="color: #800080;">item 属性值则为Request.Cookie集合的键值key,如果item值包含“.”号,则表示属于某个Cookie下的某个Value值,例如:</span></p> <p><span style="color: #800080;">item="user"则表示是Request.Cookie["user"]值;<br />item="user.name"则表示是Requst.Cookie["user"]["name"]值<br /></span></p> </td> </tr><tr><td>ServerVariables</td> <td style="height: 23px;">获取服务器当前上下文的Request.ServerVariables数据集合.如果模板引擎不在Web程序上使用则无效 <p><span style="color: #800080;">item 属性值则为Request.ServerVariables集合的键值key</span></p> </td> </tr><tr><td>RequestParams</td> <td style="height: 23px;">获取服务器当前上下文的Request.Params数据集合.如果模板引擎不在Web程序上使用则无效 <p><span style="color: #800080;">item 属性值则为Request.Params集合的键值key</span></p> </td> </tr><tr><td><span style="color: red;">Request</span></td> <td style="width: 611px; height: 49px;">获取服务器当前上下文的HttpRequest对象.如果模板引擎不在Web程序上使用则无效 <p><span style="color: #800080;">item 属性不需要定义</span></p> </td> </tr><tr><td><span style="color: red;">Environment</span></td> <td style="height: 23px;">获取服务器系统平台的环境参数 <p><span style="color: #800080;">item 属性不需要定义</span></p> </td> </tr><tr><td>AppSetting</td> <td style="height: 23px;">获取当前应用程序配置文件里的AppSettings配置参数 <p><span style="color: #800080;">item 属性值则为ConfigurationManager.AppSettings集合的键值key</span></p> </td> </tr></tbody></table></td> </tr><tr><td>item</td> <td>要获取的数据项,此属性值根据type值而具有不同的意义,具体的看上表,可以为字符串常量或变量表达式(以$字符开头)。</td> </tr><tr><td>output</td> <td>是否在解析标签时输出标签的结果值true/false,如果定义此属性且值设为true,则可以不定义var属性(即不存储结果值),默认不输出标签结果值。<span style="color: #808080;">(可不定义)</span></td> </tr></tbody></table><p> </p> <p>  </p> <p><strong>6.11、</strong>&lt;<span style="color: #808000;">vt:datareader</span>&gt;数据读取标签元素</p> <p>此标签用于直接从数据源读取数据<span style="color: #000000;">。<br /><strong>注意:此标签必须采用</strong><strong>TagOpenMode=Full</strong><strong>的TemplateDocumentConfig</strong><strong>时才允许使用。</strong><br /></span></p> <p>标签样例:</p> <p>&lt;<span style="color: #808000;">vt:<span style="color: #808000;"><span style="color: #808000;">datareader</span> </span></span><span style="color: #800080;">var</span>="members" <span style="color: #800080;">connection</span>="memberdb" <span style="color: #800080;">commandtext</span>="select * from [member]" /&gt;</p> <p>  <br />标签中已定义的属性列表:<br /></p> <table style="width: 922px;" border="0" cellspacing="0" cellpadding="2"><tbody><tr><td><strong>名称</strong></td> <td><strong>说明</strong></td> </tr><tr><td>id</td> <td>标签元素的Id,<span style="color: #ff0000;">建议唯一</span>但不强制。<span style="color: #808080;">(可不定义)</span></td> </tr><tr><td>name</td> <td>标签元素的名称。<span style="color: #808080;">(可不定义)</span></td> </tr><tr><td>var</td> <td>存储返回数据的<span style="color: #993300;">变量标识</span></td> </tr><tr><td>connection</td> <td> <p>数据源名称.此名称必须已在项目配置文件(如:web.config)里的connectionStrings节点里定义,可以为字符串常量或变量表达式(以$字符开头).</p> </td> </tr><tr><td>commandtext</td> <td>数据查询语句(SQL语句) ,可以为字符串常量或变量表达式(以$字符开头)</td> </tr><tr><td>commandtype</td> <td> <p>数据查询语句的类型。值范围对应于<span style="color: #3366ff;">System.Data.CommandType</span>枚举,可以为字符串常量(如:Text)或变量表达式(以$字符开头)。<span style="color: #808080;">(可不定义)</span></p> <p>注:当未定义时默认为<span style="color: #3366ff;">CommandType</span><span style="color: #3366ff;">.CommandText值</span></p> </td> </tr><tr><td>rowindex</td> <td>要获取行的行号,可以为数值常量(如:1)或变量表达式(以$字符开头)<span style="color: #808080;">(可不定义)<br />注:当此值不定义时将返回一个表结构(DataTable),而如果定义此值,则将返回对应行的数据行(DataRow),如果行不存在则返回null<br /></span></td> </tr><tr><td>parameters</td> <td> <p>数据查询语句中的附加参数的数值/字符串常量或变量表达式(以$字符开头)<span style="color: #808080;">(可不定义)</span><br /><span style="color: #800080;">注:此属性可以多次定义,在数据查询语句中分别以@p0,@p1表示各个parameters属性的变量表达式值</span><br /></p> <p><span style="color: #800080;">例子:<br />&lt;vt:datareader var="members" connection="db" commandtext="select * from [member] where id&gt;=@p0 and sex=@p1" <span style="color: #800080;">parameters</span>="id" <span style="color: #800080;">parameters</span>="sex" /&gt;<br /></span></p> </td> </tr><tr><td>ParameterFormat</td> <td> <p>数据查询参数的格式,可以为字符串常量或变量表达式(以$字符开头),默认为"@p{0}",其中"{0}"是占位符,表示各查询参数的索引数字(也即是parameters属性的先后顺序)。<span style="color: #808080;">(可不定义)</span></p> <p><span style="color: #800080;">注:如果定义此属性则commandtext里的语句也必须相应更改。</span></p> <p><span style="color: #800080;">例子:<br />&lt;vt:datareader var="members" connection="db" commandtext="select * from [member] where id&gt;=&amp;par0 and sex=&amp;par1" parameters="id" parameters="sex" parameterformat="&amp;par{0}" /&gt;<br /></span></p> <p> </p> </td> </tr></tbody></table><p> </p> <p> </p> <p> </p> <p><strong>6.12、</strong>&lt;<span style="color: #808000;">vt:function</span>&gt;函数调用标签元素</p> <p>此标签用于直接调用函数<span style="color: #000000;">。</span>标签样例:</p> <p>&lt;<span style="color: #808000;">vt:function</span><span style="color: #800080;">var</span>="days" <span style="color: #800080;">method</span>="DaysInMonth" <span style="color: #800080;">type</span>="System.DateTime" <span style="color: #800080;">args</span>="2009" <span style="color: #800080;">args</span>="10" /&gt;<br />&lt;<span style="color: #808000;">vt:function</span><span style="color: #800080;">var</span>="UTCTime" <span style="color: #800080;">method</span>="ToUniversalTime" <span style="color: #800080;">type</span>="$time" /&gt;<br /></p> <p>  <br />标签中已定义的属性列表:<br /></p> <table style="width: 922px;" border="0" cellspacing="0" cellpadding="2"><tbody><tr><td><strong>名称</strong></td> <td><strong>说明</strong></td> </tr><tr><td>id</td> <td>标签元素的Id,<span style="color: #ff0000;">建议唯一</span>但不强制。<span style="color: #808080;">(可不定义)</span></td> </tr><tr><td>name</td> <td>标签元素的名称。<span style="color: #808080;">(可不定义)</span></td> </tr><tr><td>var</td> <td>存储函数返回值的<span style="color: #993300;">变量标识</span></td> </tr><tr><td>method</td> <td> <p>函数方法名,可以为字符串常量或变量表达式(以$字符开头)</p> </td> </tr><tr><td>type</td> <td>包含静态函数方法的类型或包含函数方法的类型,可以为字符串常量或变量表达式(必须以$字符开头,如:$i) <span style="color: #808080;">(可不定义)<br /><span style="color: #800080;">注:当未定义此属性时,将从模板块里获取注册的“用户自定义函数”,<span style="color: #800080;">函数的原型参考</span><span style="color: #3366ff;">UserDefinedFunction</span><span style="color: #800080;">委托</span>。</span><br /></span></td> </tr><tr><td>args</td> <td> <p>参与函数运算的参数,可为数值/字符串常量或变量表达式(必须以$字符开头,如:$i) <span style="color: #808080;">(可不定义)</span><br /><span style="color: #800080;">注:此属性可以多次定义,但其定义顺序必须与函数方法的参数顺序一致。</span><br /></p> </td> </tr><tr><td>output</td> <td>是否在解析标签时输出标签的结果值true/false,如果定义此属性且值设为true,则可以不定义var属性(即不存储结果值),默认不输出标签结果值。<span style="color: #808080;">(可不定义)</span></td> </tr></tbody></table><p> </p> <p> </p> <p><strong>6.13、</strong>&lt;<span style="color: #808000;">vt:property</span>&gt;获取字段或属性值标签元素</p> <p>此标签用于直接获取字段或属性值<span style="color: #000000;">。</span>标签样例:</p> <p>&lt;<span style="color: #808000;">vt:<span style="color: #808000;">property</span> </span><span style="color: #800080;">var</span>="time" <span style="color: #800080;">field</span>="Now" <span style="color: #800080;">type</span>="System.DateTime" /&gt;<br />&lt;<span style="color: #808000;">vt:<span style="color: #808000;">property</span> </span><span style="color: #800080;">var</span>="year" <span style="color: #800080;"><span style="color: #800080;">field</span></span>="Year" <span style="color: #800080;">type</span>="$time" /&gt;<br /></p> <p>  <br />标签中已定义的属性列表:<br /></p> <table style="width: 922px;" border="0" cellspacing="0" cellpadding="2"><tbody><tr><td><strong>名称</strong></td> <td><strong>说明</strong></td> </tr><tr><td>id</td> <td>标签元素的Id,<span style="color: #ff0000;">建议唯一</span>但不强制。<span style="color: #808080;">(可不定义)</span></td> </tr><tr><td>name</td> <td>标签元素的名称。<span style="color: #808080;">(可不定义)</span></td> </tr><tr><td>var</td> <td>存储字段或属性值的<span style="color: #993300;">变量标识</span></td> </tr><tr><td>field</td> <td> <p>字段或属性名,可以为字符串常量或变量表达式(以$字符开头).</p> </td> </tr><tr><td>type</td> <td>包含静态字段或属性的类型或包含字段或属性的类型,可以为字符串常量或变量表达式(必须以$字符开头,如:$i) </td> </tr><tr><td>output</td> <td>是否在解析标签时输出标签的结果值true/false,如果定义此属性且值设为true,则可以不定义var属性(即不存储结果值),默认不输出标签结果值。<span style="color: #808080;">(可不定义)</span></td> </tr></tbody></table><p> </p> <p> </p> <p><strong>6.14、</strong>&lt;<span style="color: #808000;">vt:set</span>&gt;变量赋值标签元素</p> <p>此标签用于向模板变量赋值<span style="color: #000000;">。</span>标签样例:</p> <p>&lt;<span style="color: #808000;">vt:<span style="color: #808000;">set </span></span><span style="color: #800080;">var</span>="time" <span style="color: #800080;">value="<span style="color: #000000;">2009-08-09"</span></span> /&gt;<br />&lt;<span style="color: #808000;">vt:<span style="color: #808000;">set</span> </span><span style="color: #800080;">var</span>="time" <span style="color: #800080;"><span style="color: #800080;">value</span></span>="$year" <span style="color: #800080;">value="<span style="color: #000000;">$month</span>" value="<span style="color: #000000;">$day</span>" format="<span style="color: #000000;">{0}-{1}-{2}</span>" </span>/&gt;<br /></p> <p>  <br />标签中已定义的属性列表:<br /></p> <table style="width: 922px;" border="0" cellspacing="0" cellpadding="2"><tbody><tr><td><strong>名称</strong></td> <td><strong>说明</strong></td> </tr><tr><td>id</td> <td>标签元素的Id,<span style="color: #ff0000;">建议唯一</span>但不强制。<span style="color: #808080;">(可不定义)</span></td> </tr><tr><td>name</td> <td>标签元素的名称。<span style="color: #808080;">(可不定义)</span></td> </tr><tr><td>var</td> <td>需要赋值的<span style="color: #993300;">变量标识</span></td> </tr><tr><td>value</td> <td> <p>要赋于变量的值,可为数值/字符串常量或变量表达式(必须以$字符开头,如:$i)<br /><span style="color: #800080;">注:此属性可以多次定义,但如果多次定义则必须定义format属性。</span><br /></p> </td> </tr><tr><td>format</td> <td>用于格式化变量值的格式,可以为字符串常量或变量表达式(以$字符开头)。<span style="color: #808080;">(可不定义)</span><br />注:<span style="color: #800080;">在格式表达式中分别以{0},{1}表示各个value属性的变量值</span><br /></td> </tr><tr><td>output</td> <td>是否在解析标签时输出标签的结果值true/false,如果定义此属性且值设为true,则可以不定义var属性(即不存储结果值),默认不输出标签结果值。<span style="color: #808080;">(可不定义)</span></td> </tr></tbody></table><p> </p> <p> </p> <p><strong>6.15、</strong>&lt;<span style="color: #808000;">vt:output</span>&gt;数据输出标签元素 </p> <p>此标签可输出某个标签或文件的数据<span style="color: #000000;">。</span>标签样例:</p> <p>&lt;<span style="color: #808000;">vt:<span style="color: #808000;">output </span></span><span style="color: #800080;">tagid</span>="user" /&gt;<br />&lt;<span style="color: #808000;">vt:<span style="color: #808000;">output</span> </span><span style="color: #800080;">file</span>="output.html<span style="color: #800080;">" charset="<span style="color: #000000;">gb2312</span>" </span>/&gt;<br /></p> <p>  <br />标签中已定义的属性列表:<br /></p> <table style="width: 922px;" border="0" cellspacing="0" cellpadding="2"><tbody><tr><td><strong>名称</strong></td> <td><strong>说明</strong></td> </tr><tr><td>id</td> <td>标签元素的Id,<span style="color: #ff0000;">建议唯一</span>但不强制。<span style="color: #808080;">(可不定义)</span></td> </tr><tr><td>name</td> <td>标签元素的名称。<span style="color: #808080;">(可不定义)</span></td> </tr><tr><td>tagid</td> <td>需要输出数据的其它标签元素Id,可以为字符串常量或变量表达式(以$字符开头)。<span style="color: #808080;">(可不定义)<br />注:如果未定义此属性则需要定义file属性<br /></span></td> </tr><tr><td>file</td> <td> <p>需要输出数据的文件,可以为绝对路径或相对路径,可以为字符串常量或变量表达式(以$字符开头)。<span style="color: #808080;">(可不定义)</span></p> <p><span style="color: #808080;">注:如果未定义此属性则需要定义tagid属性</span></p> </td> </tr><tr><td>charset</td> <td>读取文件时使用的编码,可以为字符串常量或变量表达式(以$字符开头)。<span style="color: #808080;">(可不定义)</span></td> </tr></tbody></table><p> </p> <p> </p> <p> </p> <p><strong>6.16、</strong>&lt;<span style="color: #808000;">vt:import</span>&gt;类型导入标签元素 </p> <p>此标签可导入某个类型。标签样例:</p> <p>&lt;<span style="color: #808000;">vt:<span style="color: #808000;">import <span style="color: #800080;">var</span><span style="color: #000000;">="math" </span></span></span><span style="color: #800080;">type</span>="System.Math" /&gt;</p> <p>&lt;<span style="color: #808000;">vt:<span style="color: #808000;">import <span style="color: #800080;">var</span><span style="color: #000000;">="utils" </span></span></span><span style="color: #800080;">type</span>="Kingthy.Utils" <span style="color: #800080;">assembly</span>="c:\dll\kingthy.utils.dll"  /&gt;<br />  <br />标签中已定义的属性列表:<br /><br /></p> <table style="width: 922px;" border="0" cellspacing="0" cellpadding="2"><tbody><tr><td><strong>名称</strong></td> <td><strong>说明</strong></td> </tr><tr><td>id</td> <td>标签元素的Id,<span style="color: #ff0000;">建议唯一</span>但不强制。<span style="color: #808080;">(可不定义)</span></td> </tr><tr><td>name</td> <td>标签元素的名称。<span style="color: #808080;">(可不定义)</span></td> </tr><tr><td>var</td> <td>用于保存类型的<span style="color: #993300;">变量标识</span></td> </tr><tr><td>type</td> <td> <p>需要导入的类型,可以为字符串常量或变量表达式(以$字符开头)</p> </td> </tr><tr><td>assembly</td> <td>需要导入的类型所在的程序集,可以为字符串常量或变量表达式(以$字符开头),值可以定义为某个程序集文件或程序集名称。<span style="color: #808080;">(可不定义)</span></td> </tr></tbody></table><p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p><strong>6.17、</strong>&lt;<span style="color: #808000;">vt:panel</span>&gt;数据面板标签元素 </p> <p>此标签可方便用于实现“母版页”(MasterPage)的功能。标签样例:</p> <p>定义容器面板:</p> <p>&lt;<span style="color: #808000;">vt:<span style="color: #808000;">panel <span style="color: #800080;">id</span></span></span>="header" /&gt;</p> <p> </p> <p>定义内容数据面板,此内容标签里的数据将在对应的容器面板里输出。</p> <p>&lt;<span style="color: #808000;">vt:<span style="color: #808000;">panel <span style="color: #800080;">container</span><span style="color: #000000;">="header</span></span></span>"&gt;</p> <p>这是头部内容</p> <p>&lt;/<span style="color: #808000;">vt:<span style="color: #808000;">panel </span></span>&gt;</p> <p> </p> <p>上面定义的标签的数据将会在id="header"里的panel标签里输出。<br /><br />标签中已定义的属性列表:<br /><br /></p> <table style="width: 922px;" border="0" cellspacing="0" cellpadding="2"><tbody><tr><td><strong>名称</strong></td> <td><strong>说明</strong></td> </tr><tr><td>id</td> <td>标签元素的Id,<span style="color: #ff0000;">建议唯一</span>但不强制。如果定义了此id则表示此面板标签可以做为一个容器面板使用<span style="color: #808080;">(可不定义)</span></td> </tr><tr><td>name</td> <td>标签元素的名称。<span style="color: #808080;">(可不定义)</span></td> </tr><tr><td>container</td> <td>定义输出容器面板的id。如果定义此属性则表示此面板数据只在容器面板里输出。<span style="color: #808080;">(可不定义)</span></td> </tr></tbody></table><p> </p> <p>注意:此标签必须定义id或者container之一属性,或者全都定义</p> <p> </p> <p> </p> <p> </p> </blockquote> <p> </p> <p><strong>7、变量元素</strong></p> <p>变量元素主要用于输出变量表达式的值。其定义格式为:</p> <p>{$:<span style="color: #ff0000;">变量表达式</span> <span style="color: #800080;">属性</span>="<span style="color: #ff00ff;">属性值</span>"} </p> <p>或3.7版本以上可以这样定义(建议)</p> <p> {$<span style="color: #ff0000;">变量表达式</span> <span style="color: #800080;">属性</span>="<span style="color: #ff00ff;">属性值</span>"}</p> <p> </p> <p>例子:</p> <p>{$:<span style="color: #ff0000;">i</span>}、{$:<span style="color: #800080;">user</span>.<span style="color: #800080;">age</span> format=”00”}、{$:<span style="color: #ff0000;">user</span>.<span style="color: #800080;">name</span> length=”20” htmlencode=”true”}</p> <p>{$:<span style="color: #800000;">#my</span>.<span style="color: #ff0000;">i</span>}、{$:<span style="color: #800000;">##</span>.<span style="color: #ff0000;">user</span>.<span style="color: #800080;">age</span>}、{$:<span style="color: #800000;">#my</span>.<span style="color: #ff0000;">user</span>.<span style="color: #800080;">location.getcity()</span> htmlencode=”true”}</p> <p> </p> <p>元素中已定义的属性列表:</p> <table style="width: 922px;" border="0" cellspacing="0" cellpadding="2"><tbody><tr><td><strong>名称</strong></td> <td><strong>说明</strong></td> </tr><tr><td>htmlencode</td> <td>输出变量表达式的值时是否需要进行HTML字符编码。true/false,默认为false<span style="color: #808080;">(可不定义)</span></td> </tr><tr><td>urlencode</td> <td>输出变量表达式的值时是否需要进行URL字符编码。true/false,默认为false<span style="color: #808080;">(可不定义)</span></td> </tr><tr><td>xmlencode</td> <td>输出变量表达式的值时是否需要进行XML字符编码。true/false,默认为false<span style="color: #808080;">(可不定义)</span></td> </tr><tr><td>textencode</td> <td>输出变量表达式的值时是否需要进行文本字符编码(先进行HTML字符编码,再将“空格”转换为"&amp;nbsp;”;“回车换行”转换为"&lt;br /&gt;”字符)。true/false,默认为false<span style="color: #808080;">(可不定义)</span></td> </tr><tr><td>jsencode</td> <td>输出变量表达式的值时是否需要进行Javascript脚本字符编码。true/false,默认为false<span style="color: #808080;">(可不定义)</span></td> </tr><tr><td>format</td> <td>用于格式化变量表达式的值的格式(如果变量表达的值已实现<span style="color: #0080ff;">IFormattable</span>接口则调用接口方法,否则调用String.Format方法)。<span style="color: #808080;">(可不定义)</span></td> </tr><tr><td>length</td> <td>输出变量表达的值时的最大长度。如果值的字符长度超出此定义的值,则将进行字符截取。默认为0不截取<span style="color: #808080;">(可不定义)</span></td> </tr><tr><td>charset</td> <td>定义在进行urlencode或length截取字符时采用的编码。默认为所在模板块的charset<span style="color: #808080;">(可不定义)</span></td> </tr><tr><td>appendtext</td> <td> <p>定义文本在输出时如果被裁剪后要附加显示的文本。<span style="color: #808080;">(可不定义)</span> <br />注: 此属性必须和length属性配合使用。<br /></p> </td> </tr><tr><td>removehtml</td> <td>定义在数据输出时是否将数据里的HTML字符删除。<span style="color: #808080;">(可不定义)</span></td> </tr><tr><td>call</td> <td>在输出变量表达式的值前需要调用的函数名称。<span style="color: #808080;">(可不定义)</span> <br /><span style="color: #800080;">注:此属性可以多次定义,模板引擎将根据定义顺序先后调用函数。函数的原型参考<span style="color: #3366ff;">UserDefinedFunction</span>委托</span><br /></td> </tr></tbody></table><p> </p> <p><strong>8、注释标签:</strong></p> <p>     注:注释标签只在2.1以上版本有效</p> <p>     格式<span style="color: red;">:&lt;!--vt[</span><span style="color: #008000;">注释文字</span><span style="color: red;">]--&gt;</span></p> <p>     注释标签在解析输出时不会被输出显示,并且注释里面可以书写任何的标签元素,都不会被VTemplate模板引擎解析。</p> <p>     例子:</p> <p>     <span style="color: #ff0000;">&lt;!--vt[</span><span style="color: #008000;">这是VT的注释代码,下面的标签不会被解析到&lt;vt:serverdata type="time" output="true" /&gt;。</span><span style="color: #ff0000;">]--&gt;</span></p> <p> </p> <p><strong>9、项目托管</strong>: <br />VTemplate项目托管在Google code与GitHub上。 <br />URL: <a href="http://net-vtemplate.googlecode.com/" target="_blank" rel="nofollow">http://net-vtemplate.googlecode.com/</a> <br />SVN: <a href="http://net-vtemplate.googlecode.com/svn/src/VTemplate.Engine/" target="_blank" rel="nofollow">http://net-vtemplate.googlecode.com/svn/src/VTemplate.Engine/</a><br /><br /><br /></p> <p>GitHub: <a href="https://github.com/kingthy/VTemplate" target="_blank" rel="nofollow">https://github.com/kingthy/VTemplate</a></p> <p> <strong>例子请参考VTemplate.WebTester项目</strong>:</p> <p> <a href="http://net-vtemplate.googlecode.com/svn/src/VTemplate.WebTester/" target="_blank" rel="nofollow">http://net-vtemplate.googlecode.com/svn/src/VTemplate.WebTester/</a></p> <p> </p> <p><span style="color: #ff0000;">注:已建立VTemplate模板引擎技术交流QQ群,欢迎各位加入参与项目开发或技术探讨。QQ群:<strong>884468</strong></span></p> <p> </p> <div class="alert alert-success" role="alert"><p>来源:<code>oschina</code></p><p>链接:<code>https://my.oschina.net/u/4387680/blog/4286862</code></p></div></div> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field--label">标签</div> <div class="field--items"> <div class="field--item"><a href="/tag/par" hreflang="zh-hans">par</a></div> <div class="field--item"><a href="/tag/subversion-svn" hreflang="zh-hans">Subversion (SVN)</a></div> <div class="field--item"><a href="/tag/github" hreflang="zh-hans">github</a></div> <div class="field--item"><a href="/tag/vtemplate" hreflang="zh-hans">vtemplate</a></div> <div class="field--item"><a href="/tag/net-framework" hreflang="zh-hans">.Net Framework</a></div> <div class="field--item"><a href="/tag/dictionary" hreflang="zh-hans">dictionary</a></div> <div class="field--item"><a href="/tag/aspnet" hreflang="zh-hans">ASP.NET</a></div> <div class="field--item"><a href="/tag/appendtext" hreflang="zh-hans">appendtext</a></div> <div class="field--item"><a href="/tag/javascript" hreflang="zh-hans">javascript</a></div> </div> </div> Sun, 16 Aug 2020 01:32:09 +0000 回眸只為那壹抹淺笑 3762912 at https://www.e-learn.cn