Razor

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="[email protected](12 / Model.Settings.Columns) [email protected](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))
                {
                <h3>@col.Title</h3>
                }
                @col.Description            
            </div>
            }
        </div>
    </div>
    }
</div>

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

<h1>@Dnn.Portal.PortalName</h1>
<p>@Dnn.Portal.Description</p>
  
<h2>@Dnn.Tab.TabName</h2>
<h3>@Dnn.Tab.Title</h3>
<p>@Dnn.Tab.Description</p>

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

@{
    RegisterScript("js/my-script.js");
    RegisterStyleSheet("css/my-stylsheet.css");
}

etc..

Print the Razor Model

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

@ObjectInfo.Print(Model)
@ObjectInfo.Print(Dnn)