(转)vtemplate
本文轉(zhuǎn)載自:http://www.cnblogs.com/wfnice12/archive/2009/11/03/1594922.html
1、什么是VTemplate?VTemplate是一個(gè)免費(fèi)的開源(采用LGPL開源許可協(xié)議)模板引擎,用于解析運(yùn)行VT模板; 其主要目標(biāo)是為ASP.Net開發(fā)提供另外一種技術(shù)選擇方案,以保證用簡(jiǎn)單的語(yǔ)法,良好的結(jié)構(gòu),不混雜業(yè)務(wù)邏輯的方式書寫頁(yè)面; 適合于充當(dāng)Model-View-Controller(MVC)模式應(yīng)用的View角色,以使能更好的分離頁(yè)面設(shè)計(jì)人員與業(yè)務(wù)開發(fā)人員的職責(zé); 也可以作為動(dòng)態(tài)文本生成工具,生成HTML、XML、Mail、程序源代碼或其它文本等。
?
2、VTemplate模版范例:
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">  | 
以上模版代碼經(jīng)過(guò)VTemplate解析運(yùn)行后將輸出一個(gè)99乘法表,如下:
| 1*1=1????  | 
而程序處理代碼則只有簡(jiǎn)單的兩行,如下: 
注:假設(shè)上面的模版代碼存放在test1.html文件上
| TemplateDocument document = new TemplateDocument(Server.MapPath("template/test1.html"), Encoding.UTF8); document.Render(Response.Output); | 
?
?
3、什么是VT模版元素?
VT模版元素VTemplate模版引擎定義的有特殊作用的模版語(yǔ)言元素,分為標(biāo)簽元素和變量元素。
3.1、標(biāo)簽元素都是程序邏輯控制元素,是標(biāo)準(zhǔn)的HTML標(biāo)簽元素,如上例中用于循環(huán)處理的<vt:for>標(biāo)簽和用于計(jì)算表達(dá)式值的<vt:expression>標(biāo)簽等
3.2、變量元素是數(shù)據(jù)輸出元素,其格式是以“{$:”字符開頭,以“}”字符結(jié)束。 如上例中的{$:i}、{$:j}和{$:r}等
4、變量與變量表達(dá)式
4.1、變量是VTemplate模版引擎中的核心元素,用于存儲(chǔ)或控制數(shù)據(jù)的輸出,其類似于程序語(yǔ)言中的“變量”概念,定義格式也是一樣。如上例中的i,j,r變量。
4.2、變量表達(dá)式則是定義獲取變量中某個(gè)字段、屬性或函數(shù)方法結(jié)果值。
定義格式為:“前綴.變量.變量字段/屬性/函數(shù)方法/索引值”。
前綴:以#號(hào)開頭后跟模版塊的Id值,用于指示此變量是取自于對(duì)應(yīng)Id的模版塊下的變量,如#my.user則表示user變量是取自于Id為my的模版塊下的變量;如果省略Id號(hào),即前綴只為#號(hào),則表示是當(dāng)前模版塊下的變量;而如果前綴是“##”,則表示是當(dāng)前模版塊的父模版塊(如果不存在父級(jí)模版塊則為當(dāng)前模版塊)下的變量;如果省略前綴,則表示是文檔(根)模版塊的變量。
變量字段/屬性/函數(shù)方法/索引值:表示要從變量中取得數(shù)據(jù)的字段/屬性/函數(shù)方法/索引值(數(shù)字),其中函數(shù)方法只支持不帶參數(shù)的方法。此段可以定義0次或多次。
例子:
| #my.user | Id為my的模版塊下的變量user的值 | 
| #my.user.age | Id為my的模版塊下的變量user的age屬性/字段值 | 
| #my.user.location.getcity() | Id為my的模版塊下的變量user的location屬性/字段值的getcity方法返回的值 | 
| #.user | 當(dāng)前模版塊下的變量user的值 | 
| #.user.age.tostring() | 當(dāng)前模版塊下的變量user的age屬性/字段值的tostring方法返回的值 | 
| ##.user.location.city | 當(dāng)前模版塊的父級(jí)模版塊的變量user的location屬性/字段值的city屬性/字段的值 | 
| user.age | 文檔(根)模版塊的變量user的age屬性/字段值 | 
| weeks.0 | 文檔(根)模版塊的變量weeks的0索引位置的值 | 
| #.users.0.name | 當(dāng)前模版塊下變量users的0索引位置的值的name字段/屬性值 | 
注:變量表達(dá)式可在“變量元素”或“標(biāo)簽元素”的部分屬性值中使用。
5、標(biāo)簽元素:
5.1、<vt:template>模版塊標(biāo)簽元素
此標(biāo)簽用于定義模版塊。在VTemplate的模版規(guī)范中,變量是基于模版塊存在的,同模版塊下同名的變量都是引用同一個(gè)變量實(shí)例,但不同模版塊中的同名變量都是互相獨(dú)立互不影響的。
標(biāo)簽樣例:
<vt:template id="mytemplate" name="mytemplate">…………………………</vt:template>
或自閉合的樣例:
<vt:template id="filetemplate" file="include/myfile.html" charset="utf-8" />
標(biāo)簽中已定義的屬性列表:
| 名稱 | 說(shuō)明 | 
| id | 標(biāo)簽元素的Id,建議唯一但不強(qiáng)制。(可不定義) | 
| name | 標(biāo)簽元素的名稱。(可不定義) | 
| file | 模版塊數(shù)據(jù)文件的路徑地址,可以絕對(duì)或相對(duì)地址 | 
| charset | 模版塊數(shù)據(jù)文件的編碼,如果未定義則如果存在父級(jí)模版塊的話則采用父級(jí)模版塊的編碼,否則采用系統(tǒng)默認(rèn)編碼 | 
| render | 定義用于處理此模塊數(shù)據(jù)的實(shí)例,格式:"類實(shí)例,程序集"。如果已定義此屬性但未定義rendermethod屬性,則類實(shí)例必須已實(shí)現(xiàn)ITemplateRender接口。(可不定義) | 
| rendermethod | 定義用于處理此模塊數(shù)據(jù)的類實(shí)例的方法,此方法必須已標(biāo)記TemplateRenderMethodAttribute特性。(可不定義) | 
?
5.2、<vt:include>文件包含標(biāo)簽元素
此標(biāo)簽用于包含外部文件。
標(biāo)簽樣例:
<vt:include file="include/myfile.html" charset="utf-8">…………………………</vt:include>
或自閉合的樣例:
<vt:include file="include/myfile.html" charset="utf-8" />
標(biāo)簽中已定義的屬性列表:
| 名稱 | 說(shuō)明 | 
| id | 標(biāo)簽元素的Id,建議唯一但不強(qiáng)制。(可不定義) | 
| name | 標(biāo)簽元素的名稱。(可不定義) | 
| file | 模版塊數(shù)據(jù)文件的路徑地址,可以絕對(duì)或相對(duì)地址 | 
| charset | 模版塊數(shù)據(jù)文件的編碼,如果未定義此屬性則如果存在父級(jí)模版塊的話則采用父級(jí)模版塊的編碼,否則采用系統(tǒng)默認(rèn)編碼 | 
?
5.3、<vt:for>循環(huán)標(biāo)簽元素
此標(biāo)簽用于定義數(shù)據(jù)循環(huán),類似于程序語(yǔ)言中的for循環(huán)。
標(biāo)簽樣例:
<vt:for from="1" to="9" index="i">…………………………</vt:for>
標(biāo)簽中已定義的屬性列表:
| 名稱 | 說(shuō)明 | 
| id | 標(biāo)簽元素的Id,建議唯一但不強(qiáng)制。(可不定義) | 
| name | 標(biāo)簽元素的名稱。(可不定義) | 
| from | 循環(huán)起始值,可為一個(gè)數(shù)值常量(如:1)或變量表達(dá)式(必須以$字符開頭,如:$i) | 
| to | 循環(huán)結(jié)束值,可為一個(gè)數(shù)值常量(如:1)或變量表達(dá)式(必須以$字符開頭,如:$i) | 
| step | 循環(huán)值的步值,可為一個(gè)數(shù)值常量(如:1)或變量表達(dá)式(必須以$字符開頭,如:$i),如果未定義此屬性,則默認(rèn)為1 | 
| index | 定義存儲(chǔ)循環(huán)索引值的變量,注:此索引值是一個(gè)LoopIndex實(shí)例。(可不定義) | 
?
?
5.4、<vt:foreach>集合數(shù)據(jù)循環(huán)標(biāo)簽元素
此標(biāo)簽用于定義處理集合數(shù)據(jù)的循環(huán),類似于程序語(yǔ)言中的foreach循環(huán)。
標(biāo)簽樣例:
<vt:foreach from="users" item="user" index="i">…………………………</vt:foreach>
標(biāo)簽中已定義的屬性列表:
| 名稱 | 說(shuō)明 | 
| id | 標(biāo)簽元素的Id,建議唯一但不強(qiáng)制。(可不定義) | 
| name | 標(biāo)簽元素的名稱。(可不定義) | 
| from | 變量表達(dá)式 | 
| item | 定義存儲(chǔ)當(dāng)前循環(huán)值的變量。(可不定義) | 
| index | 定義存儲(chǔ)循環(huán)索引值的變量,注:此索引值是一個(gè)LoopIndex實(shí)例。(可不定義) | 
| groupsize | 設(shè)置拆分?jǐn)?shù)據(jù)集合時(shí)的組大小。(可不定義) 例如:from的變量表達(dá)式的結(jié)果值原是“1,2,3,4,5,6”數(shù)組集合,如果groupsize設(shè)置為2,則將會(huì)拆成"[1,2],[3,4],[5,6]"的數(shù)據(jù)集合,再用此新的數(shù)據(jù)集合進(jìn)行循環(huán)解析。 | 
?
5.5、<vt:foreachelse>空集合數(shù)據(jù)循環(huán)標(biāo)簽元素
此標(biāo)簽用于定義當(dāng)集合數(shù)據(jù)為空(數(shù)量為0)時(shí)顯示處理的節(jié)點(diǎn)。此標(biāo)簽必須在<vt:foreach>標(biāo)簽中定義,并且此標(biāo)簽為單節(jié)點(diǎn)標(biāo)簽(即不需要配對(duì)的結(jié)束標(biāo)簽)。
標(biāo)簽樣例:
<vt:foreach from="users" item="user" index="i">
{$:i}、我叫{$:user.name},今年{$:user.age}歲
<vt:foreachelse />
沒有任何用戶
</vt:foreach>
注:當(dāng)users集合數(shù)據(jù)為空時(shí)則顯示"沒有任何用戶"字樣,否則不顯示此字樣。
?
標(biāo)簽中已定義的屬性列表:
| 名稱 | 說(shuō)明 | 
| id | 標(biāo)簽元素的Id,建議唯一但不強(qiáng)制。(可不定義) | 
| name | 標(biāo)簽元素的名稱。(可不定義) | 
?
5.6、<vt:if>條件判斷標(biāo)簽元素
此標(biāo)簽用于定義數(shù)據(jù)條件判斷,類似于程序語(yǔ)言中的if語(yǔ)句。
標(biāo)簽樣例:
<vt:if var="user.age" value="20" compare=">">…………………………</vt:if>
標(biāo)簽中已定義的屬性列表:
| 名稱 | 說(shuō)明 | 
| id | 標(biāo)簽元素的Id,建議唯一但不強(qiáng)制。(可不定義) | 
| name | 標(biāo)簽元素的名稱。(可不定義) | 
| var | 用于判斷條件的變量表達(dá)式 | 
| value | 用于比較條件的值,可為數(shù)值/字符串常量或變量表達(dá)式(必須以$字符開頭,如:$i) 注:此屬性可以多次定義,當(dāng)var變量表達(dá)式中的值和其中一個(gè)value屬性值匹配時(shí)即符合條件。 | 
| compare | 比較的方式,可以為以下幾種: > : 大于 >= : 大于等于 < : 小于 <= : 小于等于 !=或<> : 不等于 = 或== : 相等 如果未定義此屬性則表示采用“相等”比較。 | 
| expression | 定義需要簡(jiǎn)單運(yùn)算的表達(dá)式,表達(dá)式中支持 “{0}”標(biāo)記,用于代替var屬性的變量表達(dá)式的值。(可不定義) | 
?
5.7、<vt:elseif>條件分支判斷標(biāo)簽元素
此標(biāo)簽用于定義數(shù)據(jù)條件的分支判斷。類似于程序語(yǔ)言中的else if語(yǔ)句。此標(biāo)簽可以同時(shí)支付一個(gè)或多個(gè)。此標(biāo)簽只能在<vt:if>標(biāo)簽中定義,并且此標(biāo)簽為單節(jié)點(diǎn)標(biāo)簽(即不需要配對(duì)的結(jié)束標(biāo)簽)。
標(biāo)簽樣例:
<vt:if var="user.age" value="20">
20歲用戶 
<vt:elseif value="30” />
30歲用戶
<vt:elseif value="40” />
40歲用戶
</vt:if>
標(biāo)簽中已定義的屬性列表:
| 名稱 | 說(shuō)明 | 
| id | 標(biāo)簽元素的Id,建議唯一但不強(qiáng)制。(可不定義) | 
| name | 標(biāo)簽元素的名稱。(可不定義) | 
| var | 用于判斷條件的變量表達(dá)式。如果未定義此屬性,則為標(biāo)簽所在的<vt:if>標(biāo)簽中的var屬性值 | 
| value | 用于比較條件的值,可為數(shù)值/字符串常量或變量表達(dá)式(必須以$字符開頭,如:$i) 注:此屬性可以多次定義,當(dāng)var變量表達(dá)式中的值和其中一個(gè)value屬性值匹配時(shí)即符合條件。 | 
| compare | 比較的方式,可以為以下幾種: > : 大于 >= : 大于等于 < : 小于 <= : 小于等于 !=或<> : 不等于 = 或== : 相等 如果未定義此屬性則表示采用“相等”比較。 | 
| expression | 定義需要簡(jiǎn)單運(yùn)算的表達(dá)式,表達(dá)式中支持 “{0}”標(biāo)記,用于代替var屬性的變量表達(dá)式的值。(可不定義) | 
?
5.8、<vt:else>條件分支判斷標(biāo)簽元素
此標(biāo)簽用于定義數(shù)據(jù)條件的分支判斷,即當(dāng)<vt:if>標(biāo)簽中的所有條件分支都條件不成立時(shí)用于顯示處理的節(jié)點(diǎn)。類似于程序語(yǔ)言中的else語(yǔ)句。此標(biāo)簽只能在<vt:if>標(biāo)簽中定義,并且此標(biāo)簽為單節(jié)點(diǎn)標(biāo)簽(即不需要配對(duì)的結(jié)束標(biāo)簽)。
標(biāo)簽樣例:
<vt:if var="user.age" value="20">
20歲用戶 
<vt:elseif value="30” />
30歲用戶
<vt:else />
未知?dú)q數(shù)
</vt:if>
標(biāo)簽中已定義的屬性列表:
| 名稱 | 說(shuō)明 | 
| id | 標(biāo)簽元素的Id,建議唯一但不強(qiáng)制。(可不定義) | 
| name | 標(biāo)簽元素的名稱。(可不定義) | 
?
5.9、<vt:expression>表達(dá)式標(biāo)簽元素
此標(biāo)簽用于對(duì)變量表達(dá)式進(jìn)行簡(jiǎn)單數(shù)據(jù)運(yùn)算。
標(biāo)簽樣例:
<vt:expression var="r" args="i" args="j" expression="{0}*{1}" />
?
標(biāo)簽中已定義的屬性列表:
| 名稱 | 說(shuō)明 | 
| id | 標(biāo)簽元素的Id,建議唯一但不強(qiáng)制。(可不定義) | 
| name | 標(biāo)簽元素的名稱。(可不定義) | 
| var | 存儲(chǔ)表達(dá)式運(yùn)算結(jié)果的變量 | 
| args | 參與表達(dá)式計(jì)算的變量表達(dá)式。(可不定義) 注:此屬性可以多次定義,在表達(dá)式中分別以{0},{1}表示各個(gè)args屬性的變量表達(dá)式值 | 
| expression | 要進(jìn)行運(yùn)算的表達(dá)式。 | 
| output | 是否在解析標(biāo)簽時(shí)輸出標(biāo)簽的結(jié)果值true/false,如果定義此屬性且值設(shè)為true,則可以不定義var屬性(即不存儲(chǔ)結(jié)果值),默認(rèn)不輸出標(biāo)簽結(jié)果值。(可不定義) | 
?
5.10、<vt:serverdata>服務(wù)器數(shù)據(jù)標(biāo)簽元素
此標(biāo)簽用于獲取服務(wù)器的部分?jǐn)?shù)據(jù),如Session、Application、DateTime等等。
標(biāo)簽樣例:
<vt:serverdata var="session" type="session" item="username" />
?
標(biāo)簽中已定義的屬性列表:
?
| 名稱 | 說(shuō)明 | ||||||||||||||||||||||||||
| id | 標(biāo)簽元素的Id,建議唯一但不強(qiáng)制。(可不定義) | ||||||||||||||||||||||||||
| name | 標(biāo)簽元素的名稱。(可不定義) | ||||||||||||||||||||||||||
| var | 存儲(chǔ)服務(wù)器數(shù)據(jù)的變量 | ||||||||||||||||||||||||||
| type | 要獲取服務(wù)器數(shù)據(jù)的類型。支持以下幾種: ? 
 ? | ||||||||||||||||||||||||||
| item | 要獲取的數(shù)據(jù)項(xiàng),此屬性值根據(jù)type值而具有不同的意義,具體的看上表。 | ||||||||||||||||||||||||||
| output | 是否在解析標(biāo)簽時(shí)輸出標(biāo)簽的結(jié)果值true/false,如果定義此屬性且值設(shè)為true,則可以不定義var屬性(即不存儲(chǔ)結(jié)果值),默認(rèn)不輸出標(biāo)簽結(jié)果值。(可不定義) | 
?
??
5.11、<vt:datareader>數(shù)據(jù)讀取標(biāo)簽元素
此標(biāo)簽用于直接從數(shù)據(jù)源讀取數(shù)據(jù)。
注意:此標(biāo)簽必須采用TagOpenMode=Full的TemplateDocumentConfig時(shí)才允許使用。
標(biāo)簽樣例:
<vt:datareader var="members" connection="memberdb" commandtext="select * from [member]" />
??
標(biāo)簽中已定義的屬性列表:
?
| 名稱 | 說(shuō)明 | 
| id | 標(biāo)簽元素的Id,建議唯一但不強(qiáng)制。(可不定義) | 
| name | 標(biāo)簽元素的名稱。(可不定義) | 
| var | 存儲(chǔ)返回?cái)?shù)據(jù)的變量 | 
| connection | 數(shù)據(jù)源名稱.此名稱必須已在項(xiàng)目配置文件(如:web.config)里的connectionStrings節(jié)點(diǎn)里定義. | 
| commandtext | 數(shù)據(jù)查詢語(yǔ)句(SQL語(yǔ)句)? | 
| rowindex | 要獲取行的行號(hào)(可不定義) 注:當(dāng)此值不定義時(shí)將返回一個(gè)表結(jié)構(gòu)(DataTable),而如果定義此值,則將返回對(duì)應(yīng)行的數(shù)據(jù)行(DataRow),如果行不存在則返回null | 
| parameters | 數(shù)據(jù)查詢語(yǔ)句中的附加參數(shù)的變量表達(dá)式(可不定義) 例子: | 
?
?
?
5.12、<vt:function>函數(shù)調(diào)用標(biāo)簽元素
此標(biāo)簽用于直接調(diào)用函數(shù)。標(biāo)簽樣例:
<vt:functionvar="days" method="DaysInMonth" type="System.DateTime" args="2009" args="10"?/>
<vt:functionvar="UTCTime" method="ToUniversalTime" type="$time" />
??
標(biāo)簽中已定義的屬性列表:
?
| 名稱 | 說(shuō)明 | 
| id | 標(biāo)簽元素的Id,建議唯一但不強(qiáng)制。(可不定義) | 
| name | 標(biāo)簽元素的名稱。(可不定義) | 
| var | 存儲(chǔ)函數(shù)返回值的變量 | 
| method | 函數(shù)方法名. | 
| type | 包含靜態(tài)函數(shù)方法的類型或包含函數(shù)方法的變量表達(dá)式(必須以$字符開頭,如:$i) | 
| args | 參與函數(shù)運(yùn)算的參數(shù),可為數(shù)值/字符串常量或變量表達(dá)式(必須以$字符開頭,如:$i) (可不定義) | 
| output | 是否在解析標(biāo)簽時(shí)輸出標(biāo)簽的結(jié)果值true/false,如果定義此屬性且值設(shè)為true,則可以不定義var屬性(即不存儲(chǔ)結(jié)果值),默認(rèn)不輸出標(biāo)簽結(jié)果值。(可不定義) | 
?
?
5.13、<vt:property>獲取字段或?qū)傩灾禈?biāo)簽元素
此標(biāo)簽用于直接獲取字段或?qū)傩灾?span style="color:#000000;">。標(biāo)簽樣例:
<vt:property var="time" field="Now" type="System.DateTime" />
<vt:property var="year" field="Year" type="$time" />
??
標(biāo)簽中已定義的屬性列表:
?
| 名稱 | 說(shuō)明 | 
| id | 標(biāo)簽元素的Id,建議唯一但不強(qiáng)制。(可不定義) | 
| name | 標(biāo)簽元素的名稱。(可不定義) | 
| var | 存儲(chǔ)字段或?qū)傩灾档淖兞?/td> | 
| field | 字段或?qū)傩悦? | 
| type | 包含靜態(tài)字段或?qū)傩缘念愋突虬侄位驅(qū)傩缘淖兞勘磉_(dá)式(必須以$字符開頭,如:$i) | 
| output | 是否在解析標(biāo)簽時(shí)輸出標(biāo)簽的結(jié)果值true/false,如果定義此屬性且值設(shè)為true,則可以不定義var屬性(即不存儲(chǔ)結(jié)果值),默認(rèn)不輸出標(biāo)簽結(jié)果值。(可不定義) | 
?
?
5.14、<vt:set>變量賦值標(biāo)簽元素
此標(biāo)簽用于向模版變量賦值。標(biāo)簽樣例:
<vt:set var="time"?value="2009-08-09" />
<vt:set var="time" value="$year" value="$month" value="$day" format="{0}-{1}-{2}" />
??
標(biāo)簽中已定義的屬性列表:
?
| 名稱 | 說(shuō)明 | 
| id | 標(biāo)簽元素的Id,建議唯一但不強(qiáng)制。(可不定義) | 
| name | 標(biāo)簽元素的名稱。(可不定義) | 
| var | 需要賦值的變量名 | 
| value | 要賦于變量的值,可為數(shù)值/字符串常量或變量表達(dá)式(必須以$字符開頭,如:$i) | 
| format | 用于格式化變量值的格式。(可不定義) 注:在格式表達(dá)式中分別以{0},{1}表示各個(gè)value屬性的變量值 | 
| output | 是否在解析標(biāo)簽時(shí)輸出標(biāo)簽的結(jié)果值true/false,如果定義此屬性且值設(shè)為true,則可以不定義var屬性(即不存儲(chǔ)結(jié)果值),默認(rèn)不輸出標(biāo)簽結(jié)果值。(可不定義) | 
?
?
?
6、變量元素
變量元素主要用于輸出變量表達(dá)式的值。其定義格式為:
{$:變量表達(dá)式 屬性="屬性值"}
例子:
{$:i}、{$:user.age format=”00”}、{$:user.name length=”20” htmlencode=”true”}
{$:#my.i}、{$:##.user.age}、{$:#my.user.location.getcity() htmlencode=”true”}
?
元素中已定義的屬性列表:
| 名稱 | 說(shuō)明 | 
| htmlencode | 輸出變量表達(dá)式的值時(shí)是否需要進(jìn)行HTML字符編碼。true/false,默認(rèn)為false(可不定義) | 
| urlencode | 輸出變量表達(dá)式的值時(shí)是否需要進(jìn)行URL字符編碼。true/false,默認(rèn)為false(可不定義) | 
| xmlencode | 輸出變量表達(dá)式的值時(shí)是否需要進(jìn)行XML字符編碼。true/false,默認(rèn)為false(可不定義) | 
| textencode | 輸出變量表達(dá)式的值時(shí)是否需要進(jìn)行文本字符編碼(先進(jìn)行HTML字符編碼,再將“空格”轉(zhuǎn)換為" ”;“回車換行”轉(zhuǎn)換為"<br />”字符)。true/false,默認(rèn)為false(可不定義) | 
| jsencode | 輸出變量表達(dá)式的值時(shí)是否需要進(jìn)行Javascript腳本字符編碼。true/false,默認(rèn)為false(可不定義) | 
| format | 用于格式化變量表達(dá)式的值的格式(如果變量表達(dá)的值已實(shí)現(xiàn)IFormattable接口則調(diào)用接口方法,否則調(diào)用String.Format方法)。(可不定義) | 
| length | 輸出變量表達(dá)的值時(shí)的最大長(zhǎng)度。如果值的字符長(zhǎng)度超出此定義的值,則將進(jìn)行字符截取。默認(rèn)為0不截取(可不定義) | 
| charset | 定義在進(jìn)行urlencode或length截取字符時(shí)采用的編碼。默認(rèn)為所在模版塊的charset(可不定義) | 
| appendtext | 定義文本在輸出時(shí)如果被裁剪后要附加顯示的文本。(可不定義)  | 
| call | 在輸出變量表達(dá)式的值前需要調(diào)用的函數(shù)名稱。(可不定義) 注:此屬性可以多次定義,模版引擎將根據(jù)定義順序先后調(diào)用函數(shù)。函數(shù)的原型參考VariableFunction委托 | 
?
7、注釋標(biāo)簽:
???? 注:注釋標(biāo)簽只在2.1以上版本有效
???? 格式:<!--vt[注釋文字]-->
???? 注釋標(biāo)簽在解析輸出時(shí)不會(huì)被輸出顯示,并且注釋里面可以書寫任何的標(biāo)簽元素,都不會(huì)被VTemplate模版引擎解析。
???? 例子:
???? <!--vt[這是VT的注釋代碼,下面的標(biāo)簽不會(huì)被解析到<vt:serverdata type="time" output="true" />。]-->
?
8、項(xiàng)目托管: 
VTemplate項(xiàng)目托管在Google code上。 
URL: http://net-vtemplate.googlecode.com/ 
SVN: http://net-vtemplate.googlecode.com/svn/src/VTemplate.Engine/
?例子請(qǐng)參考VTemplate.WebTester項(xiàng)目:
?http://net-vtemplate.googlecode.com/svn/src/VTemplate.WebTester/
或觀看在線演示例子:(感謝網(wǎng)友“DOLT” 提供)
http://222.76.217.250:8888/index.ashx
注:已建立VTemplate模版引擎技術(shù)交流QQ群,歡迎各位加入?yún)⑴c項(xiàng)目開發(fā)或技術(shù)探討。QQ群:884468
?
?
2、VTemplate模板的特色:
?
2.1、VT是一種解釋型的模板引擎,所以你可以隨時(shí)更改你的模板代碼以獲得不同的輸出,而不需要重新編譯程序代碼
2.2、VT支持緩存,也就是模板只需要解析一次,下次就可以直接從內(nèi)存里構(gòu)建您的模板對(duì)象而不需要再次解析模板代碼,除非相關(guān)的模板文件已被修改。
2.3、VT的模板標(biāo)簽語(yǔ)法是基于HTML規(guī)范定義的元素,所以對(duì)頁(yè)面設(shè)計(jì)人員來(lái)說(shuō)是非常友好的。
2.4、VT模板支持循環(huán)、條件判斷、數(shù)值表達(dá)式計(jì)算等,以方便你在模板里直接進(jìn)行邏輯處理。
2.5、VT支持直接調(diào)用對(duì)象里的方法
例子:
------------模板代碼--------------
<vt:function var="data" method="GetData" type="$user" />
<vt:set var="data" value="$user.GetData()" />
----------------------------------
上面模板里第一種采用function標(biāo)簽調(diào)用user對(duì)象的GetData方法,第二種則直接采用變量表達(dá)式執(zhí)行方法。
2.6、VT可以很靈活的直接獲取對(duì)象的屬性、字段、集合項(xiàng)等數(shù)據(jù)。
例子:
------------模板代碼--------------
<h4>姓名:{$user.name}</h4>
----------------------------------
上面的變量元素里,user可以為
public class user{
?public string name;
}
也可以為
public class user{
?public string name{get;set;}
}
也可以為
var user = new Dictionary<string, string>();
user.Add("name","張三");
VT會(huì)自動(dòng)判斷user對(duì)象的name是存在于對(duì)象的字段、屬性還是集合項(xiàng)里。
?
<vt:foreach from=”$blogarchive.comments” item=”#.comment” index=”#.floor”><hr class=”blogsplit”/> <div class=”blogcomment”>#{$:#.floor}樓 {$:#.comment.time format=”yyyy-MM-dd HH:mm”} | {$:#.comment.author htmlencode=”true”} </div><div style="padding-left: 20px">{$:#.comment.content htmlencode=”true”}</div></vt:foreach>利用我們上面設(shè)計(jì)好的VT模板,我們實(shí)例化VTemplate模板引擎的里的模板文檔對(duì)象TemplateDocument。
假如我們的VT模板保存在blogarchive.html文件里,則實(shí)例化代碼如下:
TemplateDocument document = new TemplateDocument(context.Server.MapPath("template/blogarchive.html"), Encoding.UTF8);或者我們從緩存模板里構(gòu)造實(shí)例:
TemplateDocument document = TemplateDocument.FromFileCache(context.Server.MapPath("template/blogarchive.html"), Encoding.UTF8);到此,我們就可以使用document對(duì)象來(lái)操作VT模板變量里的元素對(duì)象了,比如對(duì)VT模板里紅色的blogarchive變量賦于某篇博客日記數(shù)據(jù),如下:
//對(duì)VT模板里的blogarchive變量賦值 document.Variables.SetValue("blogarchive", this.GetBlogArchive()); 注:對(duì)于GetBlogArchive()方法,則只是一個(gè)獲取數(shù)據(jù)實(shí)體的函數(shù),比如從數(shù)據(jù)庫(kù)獲取的數(shù)據(jù)實(shí)體。?
經(jīng)過(guò)這簡(jiǎn)單的兩步操作,我們就已完成了對(duì)VT模板的操作,剩下就是“告訴”模板引擎將數(shù)據(jù)呈現(xiàn)出來(lái),我們的博客日記頁(yè)面就做好了;)是不是很簡(jiǎn)單?
//輸出最終呈現(xiàn)的數(shù)據(jù) document.Render(context.Response.Output);?
總結(jié)
以上是生活随笔為你收集整理的(转)vtemplate的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: [iBoard 电子学堂][第八卷 设计
- 下一篇: 步步为营UML建模系列总结
