我们在嵌入式资源中有一堆用于电子邮件的NVelocity模板。我们希望将这些模板移动到数据库中,以便用户可以轻松配置它们。
似乎NVelocity(Castle端口)不支持字符串作为模板。有谁知道怎么做。
要清楚这就是我想要做的事情(语法可能不准确,我是按记忆去的)......
string templateString = "Hello $!user";
Template template = new Template(templateString);
string results = template.Merge(....);
答案 0 :(得分: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() );
}
答案 1 :(得分:0)
经过我自己的研究后,NVelocity的Castle端口似乎是从内存字符串中获取模板的巨大PITA。
我已经放弃了NVelocity并开始使用StringTemplate。特别是这个实现:http://websitelogic.net/articles/MVC/stringtemplate-viewengine-asp-net-mvc/