Tips for creating Open Content Razor Templates

Open Content Razor Templates

The advantage of using Razor templates is that you can create any logic as you are using C# you want and use pretty much any data available in Open Content or DNN.

Razor reference


Intellisens in Visual Studio (Code)

Add this include at the top of you Razor tempalte for Intellisense support:
@inherits Satrabel.OpenContent.Components.OpenContentWebPage
This is also included in the RazorStarter Template

Example template ( the RazorStarter Template)

@inherits Satrabel.OpenContent.Components.OpenContentWebPage
<div class="row">
    @foreach(var col in Model.Columns)
  <div class="col-md-@(12 / Model.Settings.Columns) col-sm-@(24 / Model.Settings.Columns)">
        <div class="thumbnail">
            @if (!string.IsNullOrEmpty(col.Image))
            <img src="@col.Image" alt="@col.Title}}">
          	@if (col.Caption)
            <div class="caption">
                @if (!string.IsNullOrEmpty(col.Title))

Reserved Keywords

Sometimes there's an attribute in your Model that has the name of a reserved keyword in C#.
An example of this would be an enum from the schema of Open Content.
Use @keyword to prevent C# errors in that case.

@foreach (var role in Model.Schema.properties.Roles.@enum){
     <span class="roles">@role</span>

Other Uses of Razor

With the right includes a Razor template can also render data from outside Open Content.
And you can use the DNN Razor helpers (@Dnn.) as they are included by default.
Or you can also use the DNN API directly to combine Open Content data with DNN data.

More info on DNN Razor

@using System
@inherits Satrabel.OpenContent.Components.OpenContentWebPage


Loading Scripts and Stylesheets

You can load extra JS and CSS dependencies by injecting the following code at the top of the razor file.

@using System
@inherits Satrabel.OpenContent.Components.OpenContentWebPage



Print the Razor Model

You can print the Razor module by inserting the following code in your template.