2

我希望在我的 NVelocity 模板中创建一个内联函数(方法)。对此的解决方案似乎是使用Velocimacros。因此,我模拟了以下模板进行测试:

#macro( getOutput $one $two $three )
<td>$one</td>
<td>$two.Item2</td>
<td>$three</td>
#end

<table>
#foreach( $item in $mdl.Items )

    <tr>
        #set( $one1 = $item.Item1 )
        #getOutput( $one1 $item $item.Item3 )  ## item.Item3 won't evaluate!
    </tr>

#end
</table>

$mdl是我的基础模型对象,在本例中它包含一个属性Items,它是一个List(Of Tuple(Of String, Integer, Date)). 填充测试数据,如下所示:

Dim items As New List(Of Tuple(Of String, Integer, DateTime))
With items
   .Add(New Tuple(Of String, Integer, DateTime)("One", 1, #1/1/2001#))
   .Add(New Tuple(Of String, Integer, DateTime)("Two", 2, #2/2/2002#))
   .Add(New Tuple(Of String, Integer, DateTime)("Three", 3, #3/3/2003#))
End With

当我运行模板时,我遇到的问题是宏参数的输出$three实际上是“$item.Item3”,而不是评估为#3/3/2003#。(顺便说一句 - 如果元组中的 3 个项目中的任何一个通过.Item调用传递,就会发生这种情况,所以这与数据类型无关)。

我可以创建一个变量并很好地传递它($one1)。.Item我可以传递元组本身并在宏 ($item.Item2) 中调用 .Item 属性,但由于某种原因,在将参数传递给宏时我无法调用该属性。有什么见解吗?

4

1 回答 1

2

看起来 NVelocity 宏支持是有限的。

http://www.castleproject.org/others/nvelocity/problems.html#macros

另一种方法是使用 Helpers:

NVelocity 扩展方法 ASP.NET webform

于 2011-11-16T15:30:59.537 回答