不久前,使用RazorEngine呈现模板非常容易:
string s = RazorEngine.Razor.Parse()但是,出于某种原因,它的作者改变了对API的看法,现在呈现模板的最简单方法是:
var key = new RazorEngine.Templating.NameOnlyTemplateKey("EmailTemplate", RazorEngine.Templating.ResolveType.Global, null);
RazorEngine.Engine.Razor.AddTemplate(key, new RazorEngine.Templating.LoadedTemplateSource("Ala ma kota"));
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
RazorEngine.Engine.Razor.RunCompile(key, sw);
string s = sb.ToString();(至少这是我从新API中推断出来的。旧的被标记为废弃。)有没有一种方法可以使用新的API来呈现一个模板,而不需要缓存、键和其他花哨的东西?所有的官方例子都不能工作。
发布于 2015-02-19 15:45:11
在搜索代码之后,我找到了一些有用的示例(https://github.com/Antaris/RazorEngine/blob/master/src/source/RazorEngine.Hosts.Console/Program.cs),并发现如果您包括
using RazorEngine.Templating;在类的顶端,您可以使用一些扩展方法(https://github.com/Antaris/RazorEngine/blob/master/src/source/RazorEngine.Core/Templating/RazorEngineServiceExtensions.cs)来帮助您。
无痛模板编译:
Engine.Razor.Compile(templatePath, "templateNameInTheCache", modelType);模板解析:
Engine.Razor.Run("templateNameInTheCache", modelType, model);现在你可以同时做这两件事了!
string myParsedTemplate = Engine.Razor.RunCompile(templatePath, "templateNameInTheCache", null, model)这就相当于做这个
Engine.Razor.AddTemplate("templateNameInTheCache", TemplateLoader.GetTemplate(templatePath));
Engine.Razor.Compile("templateNameInTheCache", modelType);
string finallyThisIsMyParsedTemplate = Engine.Razor.Run("templateNameInTheCache", modelType);请注意,我目前正在测试这个,但它似乎很好。
发布于 2017-10-17 20:58:32
以下代码适用于ResolvePathTemplateManager (2017年10月)
var templateManager = new ResolvePathTemplateManager(new[] { rootPath });
var config = new TemplateServiceConfiguration
{
TemplateManager = templateManager
};
Engine.Razor = RazorEngineService.Create(config);
// ...
var html = Engine.Razor.RunCompile("Test.cshtml", null, model);资料来源:在RazorEngineServiceTestFixture.cs中,查找ResolvePathTemplateManager。
发布于 2018-05-25 18:24:53
基于@turdus-merula的回答,我希望在卸载默认AppDomain时清理临时文件。我禁用了配置中的临时文件锁定,这允许删除临时文件夹。
var config = new TemplateServiceConfiguration
{
TemplateManager = new ResolvePathTemplateManager(new[] {"EmailTemplates"}),
DisableTempFileLocking = true
};
Engine.Razor = RazorEngineService.Create(config);
var html = Engine.Razor.RunCompile("Test.cshtml", null, model);https://stackoverflow.com/questions/28606132
复制相似问题