加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – NVelocity没有找到模板

发布时间:2020-12-16 03:56:52 所属栏目:asp.Net 来源:网络整理
导读:我在ASP.NET MVC应用程序中使用NVelocity时遇到了一些困难.我正在使用它作为生成电子邮件的方式. 据我所知,我传递的细节都是正确的,但无法加载模板. 这是代码: private const string defaultTemplatePath = "ViewsEmailTemplates"; … velocityEngine =
我在ASP.NET MVC应用程序中使用NVelocity时遇到了一些困难.我正在使用它作为生成电子邮件的方式.

据我所知,我传递的细节都是正确的,但无法加载模板.

这是代码:

private const string defaultTemplatePath = "ViewsEmailTemplates";

velocityEngine = new VelocityEngine();
basePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,defaultTemplatePath);
ExtendedProperties properties = new ExtendedProperties();
properties.Add(RuntimeConstants.RESOURCE_LOADER,"file");
properties.Add(RuntimeConstants.FILE_RESOURCE_LOADER_PATH,basePath);
velocityEngine.Init(properties);

basePath是正确的目录,我已将值粘贴到资源管理器中以确保它是正确的.

if (!velocityEngine.TemplateExists(name))
    throw new InvalidOperationException(string.Format("Could not find a template named '{0}'",name));


Template result = velocityEngine.GetTemplate(name);

上面的’name’是上面定义为basePath的文件夹中的有效文件名.但是,TemplateExists返回false.如果我注释掉条件输出并让它在GetTemplate方法调用上失败,那么堆栈跟踪如下所示:

at NVelocity.Runtime.Resource.ResourceManagerImpl.LoadResource(String resourceName,ResourceType resourceType,String encoding)
   at NVelocity.Runtime.Resource.ResourceManagerImpl.GetResource(String resourceName,String encoding)
   at NVelocity.Runtime.RuntimeInstance.GetTemplate(String name,String encoding)
   at NVelocity.Runtime.RuntimeInstance.GetTemplate(String name)
   at NVelocity.App.VelocityEngine.GetTemplate(String name)
...

我现在陷入了一些僵局.我觉得答案很明显,但我现在似乎无法看到它.

解决方法

你考虑过使用Castle的 NVelocityTemplateEngine吗?

从“TemplateEngine组件1.1 – 2009年9月29日”部分下载并参考以下程序集:

using Castle.Components.Common.TemplateEngine.NVelocityTemplateEngine;
using Castle.Components.Common.TemplateEngine;

然后你可以简单地打电话:

using (var writer = new StringWriter())
{
    _templateEngine.Process(data,string.Empty,writer,_templateContents);
    return writer.ToString();
}

哪里:

> _templateEngine是您的NVelocityTemplateEngine
> data是你的信息字典(我使用字典使我能够通过模板中的键($objectKeyName)访问对象.
> _templateContents是实际的模板字符串本身.

我希望这对你有所帮助!

只是要添加,你会想把它放到一个返回字符串的静态方法中!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读