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.

WebMatrix and DNN – 6 – Distributing Razor Script Modules

In an earlier article in this series on the new WebMatrix suite of technologies from Microsoft, I described how we are supporting the use of Razor scripts in DotNetNuke, by providing a “Razor Host” module. 

Having created this cool new Razor script, how do you go about distributing it? 

In this article I will describe how you can package the script up as a module.  Using the initial prototype of the “Razor Host” module, some of the steps are manual, but in a future iteration we expect to add a packaging feature to the module to automate the process.

Creating the Initial Script

Obviously the first step is to create the script.  In this example I am going to use one of the scripts that are included with the Razor Host module – Twitter.cshtml.

Figure 1 – The Twitter.cshtml Script



Creating the Module

The next step in the process is to “create” a new Module based on this script.  This is done by taking advantage of one of the properties in the RazorModuleBase base class – RazorScriptFile.  In my previous post I showed that the default implementation of RazorScriptFile loads the script file with the same name as the ascx file.

We therefore create a simple ascx file under DesktopModules for our “Twitter” module (Figure 2)

Figure 2 – Creating the Twitter Module


In this example I have created a “Razor Modules” folder, and under that a “Twitter” folder, where I have created the Twitter.ascx file and copied the Twitter.cshtml script from my Razor Host Module.  The ascx file is very simple – it has a single line of code at the top of the file (which will be the same for all Razor script modules).

<%@ Control AutoEventWireup="false" Inherits="DotNetNuke.Web.Razor.RazorModuleBase" %>

By inheriting from the RazorModuleBase base class – and naming our ascx file - Twitter.ascx, the RazorModuleBase base class automatically tries to load the file - Twitter.cshtml.

So, we have “created” our module.  The last step is to package it for distribution.  In order to package the module we need to register it in our dnn development site.  We can do this using the “Create New Module” action under Host/Module Definitions (Figure 3), in exactly the same way as Shaun Walker described in a recent blog on creating Modules.

Figure 3 – Registering the Twitter Module in Module Definitions


Now we have registered the module we can package it using the built-in packager – just as we can with any DotNetNuke module.

The packager automatically detects both the ascx file and the cshtml file (Figure 4).

Figure 4 – Packaging the Twitter Module


The zip package created by the Packager can then be distributed to anyone who has the Razor Host Module installed – the requirement for the presence of the Razor Host module is that this module installs a number of dependent assemblies that are necessary for Razor support to work.  When we add packaging to the Razor Host module itself this dependency will go away as we will automatically include all the assemblies and files necessary to make the module work.

This article is cross-posted from my personal blog.


There are currently no comments, be the first to post one.

Comment Form

Only registered users may post comments.


Aderson Oliveira (22)
Alec Whittington (11)
Alessandra Davies (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