Some time ago rendering a template using RazorEngine was as easy as:
string s = RazorEngine.Razor.Parse() However, for some reason, its authors changed their minds about the API and now the simplest way to render a template is:
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(); (at least this is what I deduced from the new API. Old one is marked as deprecated.) Is there a way to use new API to render a template without caching, keys and other fancy stuff? All official examples simply doesn't work.
Well, after searching the code, I found some useful examples (https://github.com/Antaris/RazorEngine/blob/master/src/source/RazorEngine.Hosts.Console/Program.cs) and found out that if you include
using RazorEngine.Templating; at the top of your class, you can use some extension methods (https://github.com/Antaris/RazorEngine/blob/master/src/source/RazorEngine.Core/Templating/RazorEngineServiceExtensions.cs) that will help you.
Painless template compilation :
Engine.Razor.Compile(templatePath, "templateNameInTheCache", modelType); Template Parsing :
Engine.Razor.Run("templateNameInTheCache", modelType, model); And now you can do both at the same time !
string myParsedTemplate = Engine.Razor.RunCompile(templatePath, "templateNameInTheCache", null, model) Which is the equivalent of doing this
Engine.Razor.AddTemplate("templateNameInTheCache", TemplateLoader.GetTemplate(templatePath)); Engine.Razor.Compile("templateNameInTheCache", modelType); string finallyThisIsMyParsedTemplate = Engine.Razor.Run("templateNameInTheCache", modelType); Please note that I'm currently testing this, but it seems to work fine.
The following code works for ResolvePathTemplateManager (October, 2017):
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); Source: in RazorEngineServiceTestFixture.cs, look for ResolvePathTemplateManager.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With