2013-06-30 28 views
1

我有以下的T4文本模板,它是反覆在很多地方:T4文本模板:方法返回的HTML表達式

<# if (!package.Name.Equals("Amazon")) {#> 
    <td><#=package.Name#></td> 
<#} else {#> 
    <td><a href="<#=package.Name#>@Amazon.com"><#=package.Name#></a></td> 
<#}#> 

我想與href屬性,如果返回字符串的函數替換此package.Name等於亞馬遜,例如:

private static string ConvertPackageName(Package package) 
{ 
    if (!package.Name.Equals("Amazon")) 
    { 
     return package.Name; 
    } 

    return "<a href="<#=package.Name#>@Amazon.com"><#=package.Name#></a>"; 
} 

是有可能有這樣的事情,所以我可以有這樣不是代碼:

<td><#=ConvertPackageName(package)#></td>    

回答

1

正如Athari說,你需要使用class feature blocks。有幾個問題需要你瞭解,以便他們能夠很好地工作。

  1. 要素塊中的所有語句塊(<# #>)都必須更改爲要素塊。這意味着,任何地方,你通常會使用一個<# #>標籤,你現在使用<#+ #>標籤。 <#= #>標籤仍然正常工作。

  2. 你不能讓你的第一個功能塊後的任何語句塊。出於這個原因,你需要將你的函數放在模板文件的末尾。

這裏是你的代碼怎麼會看一個例子:

Some template code.... 
<# ConvertPackageName(package); #> 
More template code... 
<# ConvertPackageName(package); #> 
.... 

<#+ void ConvertPackageName(Package package) { #> 
    <#+ if (!package.Name.Equals("Amazon")) {#> 
     <td><#=package.Name#></td> 
    <#+} else {#> 
     <td><a href="<#=package.Name#>@Amazon.com"><#=package.Name#></a></td> 
    <#+}#> 
<#+}#> 
END OF TEMPLATE 

無論你調用該方法從,所以在您的例子中,你將有模板代碼中ConvertPackageName生成的文本將被注入該貌似<td><# ConvertPackageName(package); #></td>