Learn More





DNN Community Blog

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.


2sic Daniel Mettler (124)
Aderson Oliveira (15)
Alec Whittington (11)
Alex Shirley (10)
Andrew Nurse (30)
Anthony Glenwright (5)
Antonio Chagoury (28)
Ash Prasad (21)
Ben Schmidt (1)
Benjamin Hermann (25)
Benoit Sarton (9)
Beth Firebaugh (12)
Bill Walker (36)
Bob Kruger (5)
Brian Dukes (2)
Brice Snow (1)
Bruce Chapman (20)
Bryan Andrews (1)
cathal connolly (55)
Charles Nurse (163)
Chris Hammond (203)
Chris Paterra (55)
Clinton Patterson (28)
Cuong Dang (21)
Daniel Bartholomew (2)
Dave Buckner (2)
David Poindexter (3)
David Rodriguez (2)
Doug Howell (11)
Erik van Ballegoij (30)
Ernst Peter Tamminga (74)
Geoff Barlow (6)
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 (268)
John Mitchell (1)
Jon Henning (14)
Jonathan Sheely (4)
Jordan Coopersmith (1)
Joseph Craig (2)
Kan Ma (1)
Keivan Beigi (3)
Ken Grierson (10)
Kevin Schreiner (6)
Leigh Pointer (31)
Lorraine Young (60)
Malik Khan (1)
Matthias Schlomann (15)
Mauricio Márquez (5)
Michael Doxsey (7)
Michael Tobisch (3)
Michael Washington (202)
Mike Horton (19)
Mitchel Sellers (28)
Nathan Rover (3)
Navin V Nagiah (14)
Néstor Sánchez (31)
Nik Kalyani (14)
Peter Donker (52)
Philip Beadle (135)
Philipp Becker (4)
Richard Dumas (22)
Robert J Collins (5)
Roger Selwyn (8)
Ruben Lopez (1)
Ryan Martinez (1)
Salar Golestanian (4)
Sanjay Mehrotra (9)
Scott McCulloch (1)
Scott S (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)
Timo Breumelhof (24)
Tony Henrich (3)
Torsten Weggen (2)
Vicenç Masanas (27)
Vincent Nguyen (3)
Vitaly Kozadayev (6)
Will Morgenweck (37)
Will Strohl (163)
William Severance (5)
Try Evoq
For Free
Start Free Trial
a Demo
See Evoq Live
Need More Information?