2012-08-08 93 views
5

閱讀Code Generation and T4 Text Templates意義,我發現這句法<#= DateTime.Now#>什麼是<#= #>

<html><body> 
The date and time now is: <#= DateTime.Now #> 
</body></html> 

它是如何從<%= DateTime.Now %><%# DateTime.Now %>不同。

谷歌搜索結果顯示沒有

+0

通過文檔,它具有'的所有語法'。非常相同。 – codingbiz 2012-08-09 00:00:29

+0

在T4文本生成期間<#= DateTime.Now#>被計算並且結果被寫入輸出。 AFAIK <%= %>對T4引擎沒有任何意義,只是按原樣書寫。 – FuleSnabel 2012-08-09 19:10:36

+0

@FuleSnabel我不知道區別,我是T4新手,我認爲這是另一種寫作表達方式是asp.net。對我來說只是奇怪 – codingbiz 2012-08-09 19:19:06

回答

4

我不能算得上是真正熟悉T4文本模板,但它似乎不同的是設計之間/建造時間代碼生成(可以包括可執行語句)和運行時執行代碼。

因此<#= #>評估用於生成文件的模板中的表達式。

<%= %>執行塊內的代碼並將其寫入輸出流。這將在第一次執行頁面時進行JIT編譯,但重點在於它表示在頁面運行時執行的代碼塊,而不是生成模板文件時執行的代碼塊。

第三種形式<%# %>表示數據綁定表達式,也在頁面執行時進行評估。

表達控制塊

表達控制塊計算表達式並將其轉換爲 字符串。這被插入到輸出文件中。

表達控制塊由符號delimted <#= ...#>

例如,下面的控制塊使輸出文件以 包含 「5」:

<#= 2 + 3 #>

來源:http://msdn.microsoft.com/en-us/library/bb126478

+0

你的意思是'<#= 2 + 3 #>'與'<%= 2 + 3 %>'是一樣的嗎? – codingbiz 2012-08-08 23:52:44

+2

輸出的最終結果是相同的,但評估發生在不同的時間。當你生成一個文件時,會執行'<#= 2 + 3',所以你生成的文件會有「5」。運行ASP.Net頁面時,將執行<%= 2 + 3'。 – 2012-08-08 23:54:29

+0

例如,在代碼生成時插入時間戳與在每次執行頁面時計算當前日期之間的區別。 – 2012-08-08 23:56:01