Executing Functions
There are two ways to execute CMS Functions in Razor page templates.
Using Function Markup
You can use the CMS Function's markup to execute it in a Razor page template (like with XSLT functions).
@inherits RazorPageTemplate
@functions {
public override void Configure()
{
TemplateId = new Guid("c6291e58-8589-49af-b573-272f108f9be3");
TemplateTitle = "Template with Function Markup";
}
[Placeholder(Id="content", Title="Content", IsDefault=true)]
public XhtmlDocument Content { get; set; }
}
<!DOCTYPE html>
<html lang="@Lang" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>@CurrentPageNode.Title</title>
</head>
<body>
<div>
@Markup(Content)
</div>
<div>
<f:function name="Composite.Navigation.Distributed"
xmlns:f="http://www.composite.net/ns/function/1.0" >
<f:param name="Level" value="1" />
<f:param name="ShowParent" value="False" />
<f:param name="ShowChildPages" value="True" />
<f:param name="Expand" value="False" />
<f:param name="NavigationId" value="NavigationSideBar" />
</f:function>
</div>
</body>
</html>
In the CMS Console, you can insert the function markup via the menu "Insert" | "Function Markup".
Using @Function helper method
The @Function helper method allows you to execute CMS Functions in a Razor page template. It has three overloads:
public IHtmlString Function(string name); public IHtmlString Function(string name, IDictionary<string, object> parameters); public IHtmlString Function(string name, object parameters);
The first parameter must be the name of the function to call (including the namespaces). The second parameter is only used to execute functions with parameters and is a list of parameters passed as either an object new {Param1=1, Param2=2}, or a Dictionary <string, string> {"Param1", 1}, {"Param1", 2}}.
@inherits RazorPageTemplate
@functions {
public override void Configure()
{
TemplateId = new Guid("3ef9ff47-213e-419c-8ea9-45e154817e1c");
TemplateTitle = "Template with Function Helper Method";
}
[Placeholder(Id="content", Title="Content", IsDefault=true)]
public XhtmlDocument Content { get; set; }
}
<!DOCTYPE html>
<html lang="@Lang" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>@CurrentPageNode.Title</title>
</head>
<body>
<div>
@Markup(Content)
</div>
<div>
@Function("Composite.Navigation.Distributed",
new {Level=1, ShowParent="False", ShowChildPages="True",
Expand="False", NavigationId="NavigationSideBar"})
</div>
</body>
</html>