Products

Solutions

Resources

Partners

Community

About

New Community Website

Ordinarily, you'd be at the right spot, but we've recently launched a brand new community website... For the community, by the community.

Yay... Take Me to the Community!

The Community Blog is a personal opinion of community members and by no means the official standpoint of DNN Corp or DNN Platform. This is a place to express personal thoughts about DNNPlatform, the community and its ecosystem. Do you have useful information that you would like to share with the DNN Community in a featured article or blog? If so, please contact .

The use of the Community Blog is covered by our Community Blog Guidelines - please read before commenting or posting.


The Future of DNN Speaks Razor - #2 But What is Razor?

this is a repost from the 2sxc blog

As you might have heard, you have to migrate to Razor sooner than later, and the earlier you start, the more you will be creating future-compatible material today. This is part 2 of the Series The Future of DNN Speaks Razor. In this post I'll explain what Razor is, why it's not MVC (even though Razor is popular there as well) and more.

A first example of some code

The following screenshot shows a simple Razor template creating a list of questions with hidden answers. It's a part of the FAQ App I created last week:

Now just so you understand it a bit better I've added some color coding showing some features of Razor:

  1. Orange shows a .net using statement - you can integrate any kind of .net library
  2. Yellow shows standard placeholders - inserting any kind of variable directly inline
  3. Blue shows the same thing as yellow, but inserting it as raw HTML (the default insert will escape HTML)
  4. Green shows a loop

So What in the Gillette is Razor?

  1. Razor is a text-templating system based using .net placeholders and allows you to write .net code into the template.
  2. The classic use case is writing code like:
    <h1>@Content.Title</h1>
    which would then be replaced at run time with
    <h1>The Future Speaks Razor</h1>
  3. A Razor inline placeholder can be much more complex and contain .net code like:
    <span>@(4+2)</span>
    <span>@((1+1==2) ? "it's true" : "it's not true")</span>
  4. And Razor can also contain code blocks, which can again contain HTML like this:
    @{
    var x = 1;
    var y = x + 2;
    if(y > x)
    {
       <h2>it's large!</h2>
    }
    }
  5. It's not limited to HTML and can also be used for any kind of text output. We often use Razor to template our e-mails, because it allows us to write very custom, complex output code outside our main line of code, just to create this e-mail. It also allows us to easily use different highly complex, smart e-mail templates for various purposes.

A More Complex Example

The following screenshot shows a Razor-Template

I've marked the segments with colored bars on the side. The picture shows

  • Blue: A @functions block containing functions and variables needed by the entire view
  • Green: two different segments, each with a loop. All very simple and easy to read
  • Orange: a bit of code bridging some data to client side JS - like handing over a module-ID. This was all so much more complex with Webforms.

So What is a Razor good for?

Razor is ideal to dynamically create text - based on data or anything else…resulting in HTML, XML, JavaScript or simply plain text.

And What is it not Good for?

Technically, you could do everything in Razor, just like you could also create lemonade using a hammer and lots of lemons. But it's not the ideal use case. Razor is not ideal for generating binary data, for developing a data- or business layer. It's also not ideal for processing user input. And even though you could retrieve data in Razor (very easy, thanks to .net) you would typically not do it because of SoC (Separation of Concerns). Instead, data access should be in a separate code area containing all business and data logic.

Razor is NOT the same thing as ASP.net MVC

No. Razor is a view/templating-engine to combine data with a text-template and return a text-string. MVC uses it by default as the "V"-layer im MVC, but you could use MVC without Razor, and you can use Razor without MVC. The standard example is ASP.net WebPages - which are basically just some Razor-pages

Does Razor work with ASP.net Forms

Yes, it works very well inside and within ASP.net Forms. But it's very different - when you start using Razor, you are usually reminded of the good-old classic ASP days, before the it became aspX, because it's just HTML with placeholders. What's "missing" is the event-attachment, code-behind, view-state, post-back and a few other things. These are features that software developers usually like, but web designers hate.

Does Razor work with DNN?

It works perfectly well with and within DNN! In a following post I'll write how to get started. For the impatient, try the DNN-Razor Host Module and watch this video  or try packaged code apps by installing 2sxc and some of the Razor Apps like the Razor Basic TutorialsList-Tutorials or the SQL and Peta-Poco Tutorials

With love from Switzerland
Daniel


Daniel Mettler grew up in the jungles of Indonesia and is founder and CEO of 2sic internet solutions in Switzerland and Liechtenstein, an 20-head web specialist with over 800 DNN projects since 1999. He is also chief architect of 2sxc (see forge), an open source module for creating attractive content and DNN Apps.

Comments

Joe Brinkman
Great Series Daniel. Very timely.
Joe Brinkman Tuesday, August 26, 2014 5:17 PM (link)

Comment Form

Only registered users may post comments.

NewsArchives


Aderson Oliveira (22)
Alec Whittington (11)
Alessandra Daniels (3)
Alex Shirley (10)
Andrew Hoefling (3)
Andrew Nurse (30)
Andy Tryba (1)
Anthony Glenwright (5)
Antonio Chagoury (28)
Ash Prasad (37)
Ben Schmidt (1)
Benjamin Hermann (25)
Benoit Sarton (9)
Beth Firebaugh (12)
Bill Walker (36)
Bob Kruger (5)
Bogdan Litescu (1)
Brian Dukes (2)
Brice Snow (1)
Bruce Chapman (20)
Bryan Andrews (1)
cathal connolly (55)
Charles Nurse (163)
Chris Hammond (213)
Chris Paterra (55)
Clint Patterson (108)
Cuong Dang (21)
Daniel Bartholomew (2)
Daniel Mettler (181)
Daniel Valadas (48)
Dave Buckner (2)
David Poindexter (12)
David Rodriguez (3)
Dennis Shiao (1)
Doug Howell (11)
Erik van Ballegoij (30)
Ernst Peter Tamminga (80)
Francisco Perez Andres (17)
Geoff Barlow (12)
George Alatrash (12)
Gifford Watkins (3)
Gilles Le Pigocher (3)
Ian Robinson (7)
Israel Martinez (17)
Jan Blomquist (2)
Jan Jonas (3)
Jaspreet Bhatia (1)
Jenni Merrifield (6)
Joe Brinkman (274)
John Mitchell (1)
Jon Henning (14)
Jonathan Sheely (4)
Jordan Coopersmith (1)
Joseph Craig (2)
Kan Ma (1)
Keivan Beigi (3)
Kelly Ford (4)
Ken Grierson (10)
Kevin Schreiner (6)
Leigh Pointer (31)
Lorraine Young (60)
Malik Khan (1)
Matt Rutledge (2)
Matthias Schlomann (16)
Mauricio Márquez (5)
Michael Doxsey (7)
Michael Tobisch (3)
Michael Washington (202)
Miguel Gatmaytan (3)
Mike Horton (19)
Mitchel Sellers (40)
Nathan Rover (3)
Navin V Nagiah (14)
Néstor Sánchez (31)
Nik Kalyani (14)
Oliver Hine (1)
Patricio F. Salinas (1)
Patrick Ryan (1)
Peter Donker (54)
Philip Beadle (135)
Philipp Becker (4)
Richard Dumas (22)
Robert J Collins (5)
Roger Selwyn (8)
Ruben Lopez (1)
Ryan Martinez (1)
Sacha Trauwaen (1)
Salar Golestanian (4)
Sanjay Mehrotra (9)
Scott McCulloch (1)
Scott Schlesier (11)
Scott Wilkinson (3)
Scott Willhite (97)
Sebastian Leupold (80)
Shaun Walker (237)
Shawn Mehaffie (17)
Stefan Cullmann (12)
Stefan Kamphuis (12)
Steve Fabian (31)
Steven Fisher (1)
Tony Henrich (3)
Torsten Weggen (3)
Tycho de Waard (4)
Vicenç Masanas (27)
Vincent Nguyen (3)
Vitaly Kozadayev (6)
Will Morgenweck (40)
Will Strohl (180)
William Severance (5)
What is Liquid Content?
Find Out
What is Liquid Content?
Find Out
What is Liquid Content?
Find Out