Is it possible to use Razor View Engine outside as

2019-01-02 19:44发布

If I look at the Razor View Engine, then I see a very nice and concise syntax that is not particularly tied to generating html. So I wonder, how easy would it be to use the engine outside asp.net in a "normal" .net environment for example to generate text, code,...

Any pointer, example, comment or explanation is welcome.

5条回答
无与为乐者.
2楼-- · 2019-01-02 20:23

Both RazorEngine and RazorTemplates are already mentioned here, but check out RazorMachine. You can simply point your non-MVC app to a ~/Views folder of (another) existing MVC app, execute with sending proper model and get rendered output on 2 lines of code:

var sb = new StringBuilder();

//RazorMachine magic:
//*tweets* is basically List<TwitterPost> - simple collection of custom POCO
//first param for rm.ExecuteUrl points to ~/Views folder, MVC style
var rm = new RazorMachine(htmlEncode: false);
ITemplate template = rm.ExecuteUrl("~/twitter/twitter", tweets);

//do whatever you want with result
sb.Append(template);
查看更多
闭嘴吧你
3楼-- · 2019-01-02 20:32

Check RazorEngine, it's a little framework built on top of Razor that allows you to do this.

查看更多
旧时光的记忆
4楼-- · 2019-01-02 20:37

Take a look at RazorTemplates library. It's more lightweight than RazorEngine library, it's thread-safe and has very nice minimal interface.

Compiling and rendering a template is as simple as two lines of code:

var template = Template.Compile("Hello @Model.Name!");
Console.WriteLine(template.Render(new { Name = "World" }));
查看更多
呛了眼睛熬了心
5楼-- · 2019-01-02 20:46

There are two issues here:

  1. Yes, you can run the Razor View Engine outside of the context of an ASP.NET app domain, as explained in Andrew's blog: http://vibrantcode.com/blog/2010/11/16/hosting-razor-outside-of-aspnet-revised-for-mvc3-rc.html
  2. However, Razor is still primarily focused on generating xml-like markup (e.g. HTML) in the sense that the Razor parser uses the presence of <tags> to determine the transition between code and markup. You can probably use it to generate any text but you might run into issues when your output doesn't match Razor's assumptions about what your intentions are.

So for example while this is valid Razor code (because of the <div> tag):

@if(printHello) {
   <div>Hello!</div>
}

The following snippet is invalid (because the Hello! is still being treated as code):

@if(printHello) {
   Hello!
}

However there's a special <text> tag that can be used to force a transition for multi-line blocks (the <text> tag will not be rendered):

@if(printHello) {
   <text>Hello!
   Another line</text>
}

There is also a shorter syntax to force a single line to transition using @::

@if(printHello) {
   @:Hello!
}
查看更多
若你有天会懂
6楼-- · 2019-01-02 20:46

Generate code or text: you mean like T4 Templates: http://msdn.microsoft.com/en-us/library/bb126445.aspx or codesmith tools?

查看更多
登录 后发表回答