5

我们在用于电子邮件的嵌入式资源中有一堆 NVelocity 模板。我们希望将这些模板移动到数据库中,以便用户可以轻松配置它们。

似乎 NVelocity (Castle port) 不支持字符串作为模板。有谁知道该怎么做。

需要明确的是,这是我想要做的(语法可能不准确,我正在记忆中)......

string templateString = "Hello $!user";
Template template = new Template(templateString);
string results = template.Merge(....);
4

2 回答 2

15

这对我有用:

using System.Collections;
using System.IO;
using NUnit.Framework;
using NVelocity;
using NVelocity.App;

[Test]
public void StringParsing()
{
    var h = new Hashtable {
        { "foo", "Template" },
        { "bar", "is working" },
        { "foobar", new[] { "1", "2", "3" } } };
    Velocity.Init();
    var c = new VelocityContext( h );
    var s = new StringWriter();
    Velocity.Evaluate( c, s, "",
        "$foo $bar: #foreach ($i in $foobar)$i#end" );
    Assert.AreEqual( "Template is working: 123", s.ToString() );
}
于 2009-03-18T13:52:49.643 回答
0

经过我自己的大量研究,NVelocity 的城堡端口似乎从内存字符串中获取模板将是一个巨大的 PITA。

我已经放弃了 NVelocity 并开始使用 StringTemplate。特别是这个实现:http ://websitelogic.net/articles/MVC/stringtemplate-viewengine-asp-net-mvc/

于 2009-02-22T01:11:37.230 回答