在T4模板中使用类似PHP的函数

时间:2017-10-16 08:51:47

标签: c# templates t4

在PHP中,可以有一个函数,它的主体从渲染模式切换到代码模式,如下所示:

<?php
 function renderA(a){
   if(a.label){
      ?><label></label><?php
   } else {
      ?><span></span><?php
   }
 }
?>

这在T4也可能吗? 我的谷歌搜索引导我到这里:Is there any way to have functions in basic T4 templates?

但是这个函数定义似乎不允许这样做。

或者至少,它确实不明显......

我知道这个PHP代码不是漂亮的代码,但是当你必须在一个循环中多次调用renderA来呈现某些内容时,它会很方便。我认为ASP.MVC-razor也有类似的东西(https://stackoverflow.com/a/6532107/2173353),所以我希望T4能够以某种方式支持它......

1 个答案:

答案 0 :(得分:0)

行。 我在这里找到了答案: How to create a method that encapsulates the T4 template text section?

似乎<# #><#+ #>的特殊组合可以解决问题。

<#+
public void RenderA(MyClass a){
   if(a.label != null){
      #><label><#= a.text #></label><#+
   } else {
      #><span><#= a.text #></span><#+
   }
}
#>

基本上,您像往常一样使用<#= #>进行字符串插值,使用<#+ #>继续使用函数体。

链接问题中还有另一种替代方法,它使用内联lambda声明(https://stackoverflow.com/a/23840134/2173353)。