基于.NET的免費開源的模板引擎---VTemplate
1、VTemplate模板引擎的簡介
VTemplate模板引擎也簡稱為VT,是基于.NET的模板引擎,它允許任何人使用簡單的類似HTML語法的模板語言來引用.NET里定義的對象。當VTemplate應用于web開發時,界面設計人員可以和程序開發人員同步開發一個遵循MVC架構的web站點,也就是說,頁面設計人員可以只關注頁面的顯示效果,而由程序開發人員關注業務邏輯編碼。VTemplate將.NET程序代碼從web頁面中分離出來,這樣為web站點的長期維護提供了便利,同時也為我們在ASP.NET WebForm開發之外又提供了一種可選的方案。 VTemplate也可以作為動態文本生成工具,生成HTML、XML、郵件、程序源代碼或其它文本等。
2、VTemplate模板的特色:
2.1、VT是一種解釋型的模板引擎,所以你可以隨時更改你的模板代碼以獲得不同的輸出,而不需要重新編譯程序代碼
2.2、VT支持緩存,也就是模板只需要解析一次,下次就可以直接從內存里構建您的模板對象而不需要再次解析模板代碼,除非相關的模板文件已被修改。
2.3、VT的模板標簽語法是基于HTML規范定義的元素,所以對頁面設計人員來說是非常友好的。
2.4、VT模板支持循環、條件判斷、數值表達式計算等,以方便你在模板里直接進行邏輯處理。2.5、VT支持直接調用對象里的方法
例子:
------------模板代碼--------------
<vt:function var="data" method="GetData" type="$user" />
<vt:set var="data" value="$user.GetData()" />
----------------------------------上面模板里第一種采用function標簽調用user對象的GetData方法,第二種則直接采用變量表達式執行方法。
2.6、VT可以很靈活的直接獲取對象的屬性、字段、集合項等數據。
例子:
------------模板代碼--------------
<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會自動判斷user對象的name是存在于對象的字段、屬性還是集合項里。
3、VTemplate模板范例:
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
以上模板代碼經過VTemplate解析運行后將輸出一個99乘法表,如下:
|
1*1=1 |
而程序處理代碼則只有簡單的兩行,如下:
注:假設上面的模板代碼存放在test1.html文件上
| TemplateDocument document = new TemplateDocument(Server.MapPath("template/test1.html"), Encoding.UTF8); document.Render(Response.Output); |
4、什么是VT模板元素?
VT模板元素VTemplate模板引擎定義的有特殊作用的模板語言元素,分為標簽元素和變量元素。
4.1、標簽元素都是程序邏輯控制元素,是標準的HTML標簽元素,如上例中用于循環處理的<vt:for>標簽和用于計算表達式值的<vt:expression>標簽等
4.2、變量元素是數據輸出元素,其格式是以“{$:”字符開頭,以“}”字符結束。 如上例中的{$:i}、{$:j}和{$:r}等
注:3.7版本后,變量元素的定義可以取消“:”號,即以“{$”字符開頭,如{$i}、{$j}與上面的定義不同,但都是一樣輸出變量的值。
5、變量、變量標識、變量表達式
5.1、變量是VTemplate模板引擎中的核心元素,用于存儲或控制數據的輸出,其類似于程序語言中的“變量”概念,定義格式也是一樣。如上例中的i,j,r變量。
5.2、變量標識由兩部分組成:變量前綴與變量(名)。其中“變量前綴”可以省略,如“#.i”,“#u.i”,“u“
變量前綴:以#號開頭后跟模板塊的Id值,用于指示此變量是取自于對應Id的模板塊下的變量,如#my.user則表示user變量是取自于Id為my的模板塊下的變量;如果省略Id 號,即前綴只為#號,則表示是當前模板塊下的變量;而如果前綴是“##”,則表示是當前模板塊的父模板塊(如果不存在父級模板塊則為當前模板塊)下的變量;如果省略前綴,則表示是文檔(根)模板塊的變量。
5.3、變量表達式則是定義獲取變量中某個字段、屬性或函數方法結果值。
定義格式為:“變量標識.變量字段/屬性/函數方法/索引值”。
變量字段/屬性/函數方法/索引值:表示要從變量中取得數據的字段/屬性/函數方法/索引值(數字),其中函數方法只支持不帶參數的方法。此段可以定義0次或多次。
例子:
#my.user Id為my的模板塊下的變量user的值 #my.user.age Id為my的模板塊下的變量user的age屬性/字段值 #my.user.location.getcity() Id為my的模板塊下的變量user的location屬性/字段值的getcity方法返回的值 #.user 當前模板塊下的變量user的值 #.user.age.tostring() 當前模板塊下的變量user的age屬性/字段值的tostring方法返回的值 ##.user.location.city 當前模板塊的父級模板塊的變量user的location屬性/字段值的city屬性/字段的值 user.age 文檔(根)模板塊的變量user的age屬性/字段值 weeks.0 文檔(根)模板塊的變量weeks的0索引位置的值 #.users.0.name 當前模板塊下變量users的0索引位置的值的name字段/屬性值 注:變量表達式可在“變量元素”或“標簽元素”的部分屬性值中使用。
6、標簽元素:
6.1、<vt:template>模板塊標簽元素
此標簽用于定義模板塊。在VTemplate的模板規范中,變量是基于模板塊存在的,同模板塊下同名的變量都是引用同一個變量實例,但不同模板塊中的同名變量都是互相獨立互不影響的。
標簽樣例:
<vt:template id="mytemplate" name="mytemplate">…………………………</vt:template>
或自閉合的樣例:
<vt:template id="filetemplate" file="include/myfile.html" charset="utf-8" />
標簽中已定義的屬性列表:
名稱 說明 id 標簽元素的Id,建議唯一但不強制。(可不定義) name 標簽元素的名稱。(可不定義) file 模板塊數據文件的路徑地址,可以絕對或相對地址 charset 模板塊數據文件的編碼,如果未定義則如果存在父級模板塊的話則采用父級模板塊的編碼,否則采用系統默認編碼 render 定義用于處理此模塊數據的實例,可以為字符串常量或變量表達式(以$字符開頭),格式:"類實例,程序集"。如果已定義此屬性但未定義rendermethod屬性,則類實例必須已實現ITemplateRender接口。(可不定義) rendermethod 定義用于處理此模塊數據的類實例的方法,可以為字符串常量或變量表達式(以$字符開頭),此方法必須已標記TemplateRenderMethodAttribute特性。(可不定義)
6.2、<vt:include>文件包含標簽元素
此標簽用于包含外部文件。
標簽樣例:
<vt:include file="include/myfile.html" charset="utf-8">…………………………</vt:include>
或自閉合的樣例:
<vt:include file="include/myfile.html" charset="utf-8" />
標簽中已定義的屬性列表:
名稱 說明 id 標簽元素的Id,建議唯一但不強制。(可不定義) name 標簽元素的名稱。(可不定義) file 模板塊數據文件的路徑地址,可以絕對或相對地址 charset 模板塊數據文件的編碼,如果未定義此屬性則如果存在父級模板塊的話則采用父級模板塊的編碼,否則采用系統默認編碼
6.3、<vt:for>循環標簽元素
此標簽用于定義數據循環,類似于程序語言中的for循環。
標簽樣例:
<vt:for from="1" to="9" index="i">…………………………</vt:for>
標簽中已定義的屬性列表:
名稱 說明 id 標簽元素的Id,建議唯一但不強制。(可不定義) name 標簽元素的名稱。(可不定義) from 循環起始值,可為一個數值常量(如:1)或變量表達式(必須以$字符開頭,如:$i) to 循環結束值,可為一個數值常量(如:1)或變量表達式(必須以$字符開頭,如:$i) step 循環值的步值,可為一個數值常量(如:1)或變量表達式(必須以$字符開頭,如:$i),如果未定義此屬性,則默認為1 index 定義存儲循環索引值的變量標識,注:此索引值是一個LoopIndex實例。(可不定義)
6.4、<vt:foreach>集合數據循環標簽元素
此標簽用于定義處理集合數據的循環,類似于程序語言中的foreach循環。
標簽樣例:
<vt:foreach from="users" item="user" index="i">…………………………</vt:foreach>
標簽中已定義的屬性列表:
名稱 說明 id 標簽元素的Id,建議唯一但不強制。(可不定義) name 標簽元素的名稱。(可不定義) from 變量表達式 item 定義存儲當前循環值的變量標識。(可不定義) index 定義存儲循環索引值的變量標識,注:此索引值是一個LoopIndex實例。(可不定義) groupsize 設置拆分數據集合時的組大小,可以為數值常量(如:2)或變量表達式(以$字符開頭)。(可不定義)
如果定義此屬性值,并且值大于1,則模板引擎在解析此foreach標簽時,先將from屬性定義的變量表達式的結果值折分成一組組集合數據再進行解析。例如:from的變量表達式的結果值原是“1,2,3,4,5,6”數組集合,如果groupsize設置為2,則將會拆成"[1,2],[3,4],[5,6]"的數據集合,再用此新的數據集合進行循環解析。
6.5、<vt:foreachelse>空集合數據循環標簽元素
此標簽用于定義當集合數據為空(數量為0)時顯示處理的節點。此標簽必須在<vt:foreach>標簽中定義,并且此標簽為單節點標簽(即不需要配對的結束標簽)。
標簽樣例:
<vt:foreach from="users" item="user" index="i">
{$:i}、我叫{$:user.name},今年{$:user.age}歲
<vt:foreachelse />
沒有任何用戶
</vt:foreach>
注:當users集合數據為空時則顯示"沒有任何用戶"字樣,否則不顯示此字樣。
標簽中已定義的屬性列表:
名稱 說明 id 標簽元素的Id,建議唯一但不強制。(可不定義) name 標簽元素的名稱。(可不定義)
6.6、<vt:if>條件判斷標簽元素
此標簽用于定義數據條件判斷,類似于程序語言中的if語句。
標簽樣例:
<vt:if var="user.age" value="20" compare=">">…………………………</vt:if>
標簽中已定義的屬性列表:
名稱 說明 id 標簽元素的Id,建議唯一但不強制。(可不定義) name 標簽元素的名稱。(可不定義) var 用于判斷條件的變量表達式 value 用于比較條件的值,可為數值/字符串常量或變量表達式(必須以$字符開頭,如:$i)
注:此屬性可以多次定義,當var變量表達式中的值和其中一個value屬性值匹配時即符合條件。compare 比較的方式,可以為字符串常量或變量表達式(以$字符開頭),值的定義范圍:
> : 大于
>= : 大于等于
< : 小于
<= : 小于等于
!=或<> : 不等于
= 或== : 相等^= : 判斷是否以某些值開始(字符比較)
$= : 判斷是否以某些值結束(字符比較)
*= : 判斷是否包含有某些值(字符比較)
如果未定義此屬性則表示采用“相等”比較。expression 定義需要簡單運算的表達式,可以為字符串常量或變量表達式(以$字符開頭),表達式中支持 “{0}”標記,用于代替var屬性的變量表達式的值。(可不定義)
6.7、<vt:elseif>條件分支判斷標簽元素
此標簽用于定義數據條件的分支判斷。類似于程序語言中的else if語句。此標簽可以同時支付一個或多個。此標簽只能在<vt:if>標簽中定義,并且此標簽為單節點標簽(即不需要配對的結束標簽)。
標簽樣例:
<vt:if var="user.age" value="20">
20歲用戶
<vt:elseif value="30” />30歲用戶
<vt:elseif value="40” />
40歲用戶
</vt:if>
標簽中已定義的屬性列表:
名稱 說明 id 標簽元素的Id,建議唯一但不強制。(可不定義) name 標簽元素的名稱。(可不定義) var 用于判斷條件的變量表達式。如果未定義此屬性,則為標簽所在的<vt:if>標簽中的var屬性值 value 用于比較條件的值,可為數值/字符串常量或變量表達式(必須以$字符開頭,如:$i)
注:此屬性可以多次定義,當var變量表達式中的值和其中一個value屬性值匹配時即符合條件。compare 比較的方式,可以為字符串常量或變量表達式(以$字符開頭),值的定義范圍:
> : 大于
>= : 大于等于
< : 小于
<= : 小于等于
!=或<> : 不等于
= 或== : 相等^= : 判斷是否以某些值開始(字符比較)
$= : 判斷是否以某些值結束(字符比較)
*= : 判斷是否包含有某些值(字符比較)
如果未定義此屬性則表示采用“相等”比較。expression 定義需要簡單運算的表達式,可以為字符串常量或變量表達式(以$字符開頭),表達式中支持 “{0}”標記,用于代替var屬性的變量表達式的值。(可不定義)
6.8、<vt:else>條件分支判斷標簽元素
此標簽用于定義數據條件的分支判斷,即當<vt:if>標簽中的所有條件分支都條件不成立時用于顯示處理的節點。類似于程序語言中的else語句。此標簽只能在<vt:if>標簽中定義,并且此標簽為單節點標簽(即不需要配對的結束標簽)。
標簽樣例:
<vt:if var="user.age" value="20">
20歲用戶
<vt:elseif value="30” />30歲用戶
<vt:else />
未知歲數
</vt:if>
標簽中已定義的屬性列表:
名稱 說明 id 標簽元素的Id,建議唯一但不強制。(可不定義) name 標簽元素的名稱。(可不定義)
6.9、<vt:expression>表達式標簽元素
此標簽用于對變量表達式進行簡單數據運算。
標簽樣例:
<vt:expression var="r" args="$i" args="$j" expression="{0}*{1}" />
標簽中已定義的屬性列表:
名稱 說明 id 標簽元素的Id,建議唯一但不強制。(可不定義) name 標簽元素的名稱。(可不定義) var 存儲表達式運算結果的變量標識 args 參與表達式計算的數值或變量表達式(以$字符開頭)。(可不定義)
注:此屬性可以多次定義,在表達式中分別以{0},{1}表示各個args屬性的變量表達式值expression 要進行運算的表達式,可以為字符串常量或變量表達式(以$字符開頭)。 output 是否在解析標簽時輸出標簽的結果值true/false,如果定義此屬性且值設為true,則可以不定義var屬性(即不存儲結果值),默認不輸出標簽結果值。(可不定義)
6.10、<vt:serverdata>服務器數據標簽元素
此標簽用于獲取服務器的部分數據,如Session、Application、DateTime等等。
標簽樣例:
<vt:serverdata var="session" type="session" item="username" />
標簽中已定義的屬性列表:
名稱 說明 id 標簽元素的Id,建議唯一但不強制。(可不定義) name 標簽元素的名稱。(可不定義) var 存儲服務器數據的變量標識 type 要獲取服務器數據的類型,可以為字符串常量或變量表達式(以$字符開頭)。值的定義:
類型 說明 Time 獲取服務器時間
item 屬性值可定義為以下值:
today = 獲取今天的日期(不帶時間部分)
yesterday = 獲取昨天的日期(不帶時間部分)
tomorrow = 獲取明天的日期(不帶時間部分)
其它值 = 獲取服務器現在的時間
Random 獲取一個0---1之間的雙精度隨機數
item 屬性不需要定義
Application 獲取服務器當前上下文的HttpApplicationState對象.如果模板引擎不在Web程序上使用則無效
item 屬性值則為Application集合的鍵值key
Session 獲取服務器當前上下文的HttpSessionState對象.如果模板引擎不在Web程序上使用則無效
item 屬性值則為Session集合的鍵值key
Cache 獲取服務器當前上下文的緩存對象
item 屬性值則為Cache集合的鍵值key
QueryString 獲取服務器當前上下文的Request.QueryString數據集合.如果模板引擎不在Web程序上使用則無效
item 屬性值則為Request.QueryString集合的鍵值key
Form 獲取服務器當前上下文的Request.Form數據集合.如果模板引擎不在Web程序上使用則無效 item 屬性值則為Request.Form集合的鍵值key
Cookie 獲取服務器當前上下文的Request.Cookie數據集合.如果模板引擎不在Web程序上使用則無效
item 屬性值則為Request.Cookie集合的鍵值key,如果item值包含“.”號,則表示屬于某個Cookie下的某個Value值,例如:
item="user"則表示是Request.Cookie["user"]值;
item="user.name"則表示是Requst.Cookie["user"]["name"]值ServerVariables 獲取服務器當前上下文的Request.ServerVariables數據集合.如果模板引擎不在Web程序上使用則無效 item 屬性值則為Request.ServerVariables集合的鍵值key
RequestParams 獲取服務器當前上下文的Request.Params數據集合.如果模板引擎不在Web程序上使用則無效 item 屬性值則為Request.Params集合的鍵值key
Request 獲取服務器當前上下文的HttpRequest對象.如果模板引擎不在Web程序上使用則無效 item 屬性不需要定義
Environment 獲取服務器系統平臺的環境參數 item 屬性不需要定義
AppSetting 獲取當前應用程序配置文件里的AppSettings配置參數 item 屬性值則為ConfigurationManager.AppSettings集合的鍵值key
item 要獲取的數據項,此屬性值根據type值而具有不同的意義,具體的看上表,可以為字符串常量或變量表達式(以$字符開頭)。 output 是否在解析標簽時輸出標簽的結果值true/false,如果定義此屬性且值設為true,則可以不定義var屬性(即不存儲結果值),默認不輸出標簽結果值。(可不定義)
6.11、<vt:datareader>數據讀取標簽元素
此標簽用于直接從數據源讀取數據。
注意:此標簽必須采用TagOpenMode=Full的TemplateDocumentConfig時才允許使用。標簽樣例:
<vt:datareader var="members" connection="memberdb" commandtext="select * from [member]" />
標簽中已定義的屬性列表:
名稱 說明 id 標簽元素的Id,建議唯一但不強制。(可不定義) name 標簽元素的名稱。(可不定義) var 存儲返回數據的變量標識 connection 數據源名稱.此名稱必須已在項目配置文件(如:web.config)里的connectionStrings節點里定義,可以為字符串常量或變量表達式(以$字符開頭).
commandtext 數據查詢語句(SQL語句) ,可以為字符串常量或變量表達式(以$字符開頭) commandtype 數據查詢語句的類型。值范圍對應于System.Data.CommandType枚舉,可以為字符串常量(如:Text)或變量表達式(以$字符開頭)。(可不定義)
注:當未定義時默認為CommandType.CommandText值
rowindex 要獲取行的行號,可以為數值常量(如:1)或變量表達式(以$字符開頭)(可不定義)
注:當此值不定義時將返回一個表結構(DataTable),而如果定義此值,則將返回對應行的數據行(DataRow),如果行不存在則返回nullparameters 數據查詢語句中的附加參數的數值/字符串常量或變量表達式(以$字符開頭)(可不定義)
注:此屬性可以多次定義,在數據查詢語句中分別以@p0,@p1表示各個parameters屬性的變量表達式值例子:
<vt:datareader var="members" connection="db" commandtext="select * from [member] where id>=@p0 and sex=@p1" parameters="id" parameters="sex" />ParameterFormat 數據查詢參數的格式,可以為字符串常量或變量表達式(以$字符開頭),默認為"@p{0}",其中"{0}"是占位符,表示各查詢參數的索引數字(也即是parameters屬性的先后順序)。(可不定義)
注:如果定義此屬性則commandtext里的語句也必須相應更改。
例子:
<vt:datareader var="members" connection="db" commandtext="select * from [member] where id>=&par0 and sex=&par1" parameters="id" parameters="sex" parameterformat="&par{0}" />
6.12、<vt:function>函數調用標簽元素
此標簽用于直接調用函數。標簽樣例:
<vt:functionvar="days" method="DaysInMonth" type="System.DateTime" args="2009" args="10" />
<vt:functionvar="UTCTime" method="ToUniversalTime" type="$time" />
標簽中已定義的屬性列表:
名稱 說明 id 標簽元素的Id,建議唯一但不強制。(可不定義) name 標簽元素的名稱。(可不定義) var 存儲函數返回值的變量標識 method 函數方法名,可以為字符串常量或變量表達式(以$字符開頭)
type 包含靜態函數方法的類型或包含函數方法的類型,可以為字符串常量或變量表達式(必須以$字符開頭,如:$i) (可不定義)
注:當未定義此屬性時,將從模板塊里獲取注冊的“用戶自定義函數”,函數的原型參考UserDefinedFunction委托。args 參與函數運算的參數,可為數值/字符串常量或變量表達式(必須以$字符開頭,如:$i) (可不定義)
注:此屬性可以多次定義,但其定義順序必須與函數方法的參數順序一致。output 是否在解析標簽時輸出標簽的結果值true/false,如果定義此屬性且值設為true,則可以不定義var屬性(即不存儲結果值),默認不輸出標簽結果值。(可不定義)
6.13、<vt:property>獲取字段或屬性值標簽元素
此標簽用于直接獲取字段或屬性值。標簽樣例:
<vt:property var="time" field="Now" type="System.DateTime" />
<vt:property var="year" field="Year" type="$time" />
標簽中已定義的屬性列表:
名稱 說明 id 標簽元素的Id,建議唯一但不強制。(可不定義) name 標簽元素的名稱。(可不定義) var 存儲字段或屬性值的變量標識 field 字段或屬性名,可以為字符串常量或變量表達式(以$字符開頭).
type 包含靜態字段或屬性的類型或包含字段或屬性的類型,可以為字符串常量或變量表達式(必須以$字符開頭,如:$i) output 是否在解析標簽時輸出標簽的結果值true/false,如果定義此屬性且值設為true,則可以不定義var屬性(即不存儲結果值),默認不輸出標簽結果值。(可不定義)
6.14、<vt:set>變量賦值標簽元素
此標簽用于向模板變量賦值。標簽樣例:
<vt:set var="time" value="2009-08-09" />
<vt:set var="time" value="$year" value="$month" value="$day" format="{0}-{1}-{2}" />
標簽中已定義的屬性列表:
名稱 說明 id 標簽元素的Id,建議唯一但不強制。(可不定義) name 標簽元素的名稱。(可不定義) var 需要賦值的變量標識 value 要賦于變量的值,可為數值/字符串常量或變量表達式(必須以$字符開頭,如:$i)
注:此屬性可以多次定義,但如果多次定義則必須定義format屬性。format 用于格式化變量值的格式,可以為字符串常量或變量表達式(以$字符開頭)。(可不定義)
注:在格式表達式中分別以{0},{1}表示各個value屬性的變量值output 是否在解析標簽時輸出標簽的結果值true/false,如果定義此屬性且值設為true,則可以不定義var屬性(即不存儲結果值),默認不輸出標簽結果值。(可不定義)
6.15、<vt:output>數據輸出標簽元素
此標簽可輸出某個標簽或文件的數據。標簽樣例:
<vt:output tagid="user" />
<vt:output file="output.html" charset="gb2312" />
標簽中已定義的屬性列表:
名稱 說明 id 標簽元素的Id,建議唯一但不強制。(可不定義) name 標簽元素的名稱。(可不定義) tagid 需要輸出數據的其它標簽元素Id,可以為字符串常量或變量表達式(以$字符開頭)。(可不定義)
注:如果未定義此屬性則需要定義file屬性file 需要輸出數據的文件,可以為絕對路徑或相對路徑,可以為字符串常量或變量表達式(以$字符開頭)。(可不定義)
注:如果未定義此屬性則需要定義tagid屬性
charset 讀取文件時使用的編碼,可以為字符串常量或變量表達式(以$字符開頭)。(可不定義)
6.16、<vt:import>類型導入標簽元素
此標簽可導入某個類型。標簽樣例:
<vt:import var="math" type="System.Math" />
<vt:import var="utils" type="Kingthy.Utils" assembly="c:\dll\kingthy.utils.dll" />
標簽中已定義的屬性列表:
名稱 說明 id 標簽元素的Id,建議唯一但不強制。(可不定義) name 標簽元素的名稱。(可不定義) var 用于保存類型的變量標識 type 需要導入的類型,可以為字符串常量或變量表達式(以$字符開頭)
assembly 需要導入的類型所在的程序集,可以為字符串常量或變量表達式(以$字符開頭),值可以定義為某個程序集文件或程序集名稱。(可不定義)
6.17、<vt:panel>數據面板標簽元素
此標簽可方便用于實現“母版頁”(MasterPage)的功能。標簽樣例:
定義容器面板:
<vt:panel id="header" />
定義內容數據面板,此內容標簽里的數據將在對應的容器面板里輸出。
<vt:panel container="header">
這是頭部內容
</vt:panel >
上面定義的標簽的數據將會在id="header"里的panel標簽里輸出。
標簽中已定義的屬性列表:
名稱 說明 id 標簽元素的Id,建議唯一但不強制。如果定義了此id則表示此面板標簽可以做為一個容器面板使用(可不定義) name 標簽元素的名稱。(可不定義) container 定義輸出容器面板的id。如果定義此屬性則表示此面板數據只在容器面板里輸出。(可不定義)
注意:此標簽必須定義id或者container之一屬性,或者全都定義
7、變量元素
變量元素主要用于輸出變量表達式的值。其定義格式為:
{$:變量表達式 屬性="屬性值"}
或3.7版本以上可以這樣定義(建議)
{$變量表達式 屬性="屬性值"}
例子:
{$:i}、{$:user.age format=”00”}、{$:user.name length=”20” htmlencode=”true”}
{$:#my.i}、{$:##.user.age}、{$:#my.user.location.getcity() htmlencode=”true”}
元素中已定義的屬性列表:
| 名稱 | 說明 |
| htmlencode | 輸出變量表達式的值時是否需要進行HTML字符編碼。true/false,默認為false(可不定義) |
| urlencode | 輸出變量表達式的值時是否需要進行URL字符編碼。true/false,默認為false(可不定義) |
| xmlencode | 輸出變量表達式的值時是否需要進行XML字符編碼。true/false,默認為false(可不定義) |
| textencode | 輸出變量表達式的值時是否需要進行文本字符編碼(先進行HTML字符編碼,再將“空格”轉換為" ”;“回車換行”轉換為"<br />”字符)。true/false,默認為false(可不定義) |
| jsencode | 輸出變量表達式的值時是否需要進行Javascript腳本字符編碼。true/false,默認為false(可不定義) |
| format | 用于格式化變量表達式的值的格式(如果變量表達的值已實現IFormattable接口則調用接口方法,否則調用String.Format方法)。(可不定義) |
| length | 輸出變量表達的值時的最大長度。如果值的字符長度超出此定義的值,則將進行字符截取。默認為0不截取(可不定義) |
| charset | 定義在進行urlencode或length截取字符時采用的編碼。默認為所在模板塊的charset(可不定義) |
| appendtext |
定義文本在輸出時如果被裁剪后要附加顯示的文本。(可不定義) |
| removehtml | 定義在數據輸出時是否將數據里的HTML字符刪除。(可不定義) |
| call | 在輸出變量表達式的值前需要調用的函數名稱。(可不定義) 注:此屬性可以多次定義,模板引擎將根據定義順序先后調用函數。函數的原型參考UserDefinedFunction委托 |
8、注釋標簽:
注:注釋標簽只在2.1以上版本有效
格式:<!--vt[注釋文字]-->
注釋標簽在解析輸出時不會被輸出顯示,并且注釋里面可以書寫任何的標簽元素,都不會被VTemplate模板引擎解析。
例子:
<!--vt[這是VT的注釋代碼,下面的標簽不會被解析到<vt:serverdata type="time" output="true" />。]-->
9、項目托管:
VTemplate項目托管在Google code與GitHub上。
URL: http://net-vtemplate.googlecode.com/
SVN: http://net-vtemplate.googlecode.com/svn/src/VTemplate.Engine/
GitHub: https://github.com/kingthy/VTemplate
例子請參考VTemplate.WebTester項目:
http://net-vtemplate.googlecode.com/svn/src/VTemplate.WebTester/
注:已建立VTemplate模板引擎技術交流QQ群,歡迎各位加入參與項目開發或技術探討。QQ群:884468
浙公網安備 33010602011771號