首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用新的RazorEngine API进行模板化

使用新的RazorEngine API进行模板化
EN

Stack Overflow用户
提问于 2015-02-19 12:14:42
回答 4查看 56.3K关注 0票数 65

不久前,使用RazorEngine呈现模板非常容易:

代码语言:javascript
复制
string s = RazorEngine.Razor.Parse()

但是,出于某种原因,它的作者改变了对API的看法,现在呈现模板的最简单方法是:

代码语言:javascript
复制
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来呈现一个模板,而不需要缓存、键和其他花哨的东西?所有的官方例子都不能工作。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-02-19 15:45:11

在搜索代码之后,我找到了一些有用的示例(https://github.com/Antaris/RazorEngine/blob/master/src/source/RazorEngine.Hosts.Console/Program.cs),并发现如果您包括

代码语言:javascript
复制
using RazorEngine.Templating;

在类的顶端,您可以使用一些扩展方法(https://github.com/Antaris/RazorEngine/blob/master/src/source/RazorEngine.Core/Templating/RazorEngineServiceExtensions.cs)来帮助您。

无痛模板编译:

代码语言:javascript
复制
Engine.Razor.Compile(templatePath, "templateNameInTheCache", modelType);

模板解析:

代码语言:javascript
复制
Engine.Razor.Run("templateNameInTheCache", modelType, model);

现在你可以同时做这两件事了!

代码语言:javascript
复制
string myParsedTemplate = Engine.Razor.RunCompile(templatePath, "templateNameInTheCache", null, model)

这就相当于做这个

代码语言:javascript
复制
Engine.Razor.AddTemplate("templateNameInTheCache", TemplateLoader.GetTemplate(templatePath));
Engine.Razor.Compile("templateNameInTheCache", modelType);
string finallyThisIsMyParsedTemplate = Engine.Razor.Run("templateNameInTheCache", modelType);

请注意,我目前正在测试这个,但它似乎很好。

票数 81
EN

Stack Overflow用户

发布于 2017-10-17 20:58:32

以下代码适用于ResolvePathTemplateManager (2017年10月)

代码语言:javascript
复制
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

票数 7
EN

Stack Overflow用户

发布于 2018-05-25 18:24:53

基于@turdus-merula的回答,我希望在卸载默认AppDomain时清理临时文件。我禁用了配置中的临时文件锁定,这允许删除临时文件夹。

代码语言:javascript
复制
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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28606132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档