Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it possible to use Razor View Engine outside asp.net

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.

like image 975
Thomas Avatar asked Sep 02 '10 15:09

Thomas


People also ask

Which is faster ASPX view engine or Razor view engine?

aspx pages. By default, Razor Engine prevents XSS attacks(Cross-Site Scripting Attacks) means it encodes the script or html tags like <,> before rendering to view. Razor Engine is little bit slow as compared to Webform Engine. Web Form Engine is faster than Razor Engine.

Is razor pages better than MVC?

From the docs, "Razor Pages can make coding page-focused scenarios easier and more productive than using controllers and views." If your ASP.NET MVC app makes heavy use of views, you may want to consider migrating from actions and views to Razor Pages.

Do razor pages replace MVC?

A Razor Page is almost the same as ASP.NET MVC's view component. It has basically the syntax and functionality same as MVC. The basic difference between Razor pages and MVC is that the model and controller code is also added within the Razor Page itself. You do not need to add code separately.

Can you mix razor pages and MVC?

You can add support for Pages to any ASP.NET Core MVC app by simply adding a Pages folder and adding Razor Pages files to this folder.


2 Answers

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! } 
like image 124
marcind Avatar answered Sep 29 '22 14:09

marcind


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

like image 41
Ariel Avatar answered Sep 29 '22 16:09

Ariel