前一段时间渲染模板RazorEngine就像以下一样简单:
string s = RazorEngine.Razor.Parse()
Run Code Online (Sandbox Code Playgroud)
但是,出于某种原因,它的作者改变了对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();
Run Code Online (Sandbox Code Playgroud)
(至少这是我从新API中推断出来的.旧的标记为已弃用.)有没有办法使用新的API来渲染模板而不需要缓存,键和其他花哨的东西?所有官方的例子根本不起作用.
JJP*_*JJP 70
好吧,在搜索完代码后,我找到了一些有用的例子(https://github.com/Antaris/RazorEngine/blob/master/src/source/RazorEngine.Hosts.Console/Program.cs)并发现如果你包括
using RazorEngine.Templating;
Run Code Online (Sandbox Code Playgroud)
在您的课程顶部,您可以使用一些可以帮助您的扩展方法(https://github.com/Antaris/RazorEngine/blob/master/src/source/RazorEngine.Core/Templating/RazorEngineServiceExtensions.cs).
无痛模板编译:
Engine.Razor.Compile(templatePath, "templateNameInTheCache", modelType);
Run Code Online (Sandbox Code Playgroud)
模板解析:
Engine.Razor.Run("templateNameInTheCache", modelType, model);
Run Code Online (Sandbox Code Playgroud)
现在你可以同时做两件事!
string myParsedTemplate = Engine.Razor.RunCompile(templatePath, "templateNameInTheCache", null, model)
Run Code Online (Sandbox Code Playgroud)
这相当于这样做
Engine.Razor.AddTemplate("templateNameInTheCache", TemplateLoader.GetTemplate(templatePath));
Engine.Razor.Compile("templateNameInTheCache", modelType);
string finallyThisIsMyParsedTemplate = Engine.Razor.Run("templateNameInTheCache", modelType);
Run Code Online (Sandbox Code Playgroud)
请注意,我正在测试这个,但似乎工作正常.
以下代码适用于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);
Run Code Online (Sandbox Code Playgroud)
来源:在RazorEngineServiceTestFixture.cs中,寻找ResolvePathTemplateManager.