7

I'd like to use the Razor engine without view (cshtml) files, but on strings. I want to do it from within MVC, I've seen examples that use

new RazorViewEngine().Render

but I can't find the Render method, is it something from the older days of MVC?

I've also seen examples that use Razor.Parse, but I can't find it either - probably missing a reference (but it should be there if I'm using MVC already, right?)

Is it advisable at all to use Razor if all I need to do is inject 3-4 parameters into an HTML string? I think I'm a bit infatuated with MVC right now and might not be thinking straight. I'm planning to cache the HTML strings in memory and just pass-in models from DB.

Thank you

3 Answers 3

5

In order to use the RazorEngine to parse strings, you will need the RazorEngine.dll, which can be downloaded from http://razorengine.codeplex.com/

To parse a string with the Razor engine just use the following example:

var model = new { Name = "Test" };
var template = "Hello @Model.Name";

var result = Razor.Parse(template, model);

As to whether or not it is advisable to use it for parsing a string, really depends on what you are using it for. If you think you are going to need the flexibility that Razor offers, I would recommend it, but it does come with a bit of a performance hit when comparing it to a standard string replace.

Sign up to request clarification or add additional context in comments.

2 Comments

I'm using it for managing views outside of the project - I do care about performance since I expect many (20? 50?) calls to these templates on a single page-view - that's why their blog post about the changes in the new version make me scared of trying the old one, which they say doesn't work very well in multi-threaded environments (web probably falls under this category, right?)
Yeah probably not a good idea for what you are trying to achieve.
3

You may take a look at RazorEngine.

5 Comments

This seems like a bit of an overkill - It feels to me like I should be able to do this without such a huge external library - but it does look very nice. However - looking at their blog post about version 3 makes me not want to try the current version, because I do need to run it under a multithreaded environment and (hopefully) support caching of the template
@Madd0g, what is your scenario? Maybe there are more adapted things to fit your needs.
I have a list of HTML templates with placeholders in them, each is associated with a set of rules, they are saved in a DB. Eventually these templates would be applied to data that meets some conditions (and the rules). Preferably the entire template is cached so it handles data quickly. It needs to work just like a partial-view, only more "dynamically".
@Madd0g, a custom virtual provider which will fetch views from database instead of the file system seems like a good way to tackle this problem.
Thank you, it looks like the virtual path provider the way to go, from what I've read it sounds pretty straight-forward.
0

There is a RazorParser class with Parse method which takes TextReader as an input parameter. However whole System.Web.Razor.Parser namespace is marked as

This type/member supports the .NET Framework infrastructure and is not intended to be used directly from your code.

so you have to figure it out by yourself.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.