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は私のベースModelオブジェクトであり、この例では、1つのプロパティ、が含まれてい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#3/3/2003#に評価されるのではなく、文字通り「$item.Item3」になるという問題が発生します。.Item(ところで、これは、呼び出しで渡された場合、タプル内の3つの項目のいずれかで発生するため、データ型に関するものではありません)。

変数を作成して、それをうまく渡すことができます($ one1)。タプル自体を渡して、マクロ内の.Itemプロパティ($ item.Item2)を呼び出すことはできますが、何らかの理由で.Item、引数をマクロに渡すときにプロパティを呼び出すことができません。何か洞察はありますか?

4

1 に答える 1

2

NVelocityマクロのサポートが制限されているようです。

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

別の方法は、ヘルパーを使用することです。

NVelocity拡張メソッドASP.NETWebフォーム

于 2011-11-16T15:30:59.537 に答える