Dynamic content

Every now and then you need a way to generate some content using a template.

The obvious example which springs to mind is the humble email. You know, the kind you get when you register with a site, or tell them you’ve forgotten your password.

I’ve made and seen various attempts to tackle this. You can try simply looking for tokens and replacing them with content.

For example…

Dear $title$

Then write some code to find $title$ and replace it with “Mr”, “Mrs” etc.

Once you start down this path  you soon realise that you’re re-inventing a templating engine, and that’s a problem which has already been solved.

Step in Razor

So one option is to let Razor do the hard work for you.

A quick google reveals several libraries which can help, one of them is Razor Templates

Here’s an example of it’s usage…

dynamic model = new ExpandoObject();
model.Title = "Mr";
var templateContents = "Dear @Model.Title";

var compiledTemplate = RazorTemplates.Core.Template
.WithBaseType<TemplateBase>()
.Compile(templateContents);

var output = compiledTemplate.Render(model);

Compiling the template is quite an expensive operation so a bit of caching doesn’t go amiss here. In my case I just used a dictionary, base 64 encoded the template contents to use as a key and made sure to only recompile the template if the contents (key) change.

And that’s it, all the power of razor (loops, conditionals etc) is yours to use as you see fit.

When it comes to storing the templates, a NoSQL DB works nicely here.

Want to learn .net Core?

  • Want to learn .NET Core but don't know where to start?
  • Don't have time to keep up with everything Microsoft is putting out?
  • Stuck on legacy apps when you want to build something new?
Enter your details below and get my weekly update; learn how to build better .NET web apps.
comments powered by Disqus