Create Page
Audience:
Low-code EngineersSkill Prerequisites:
Actions,Tokens
Creates a new DNN page in the current portal from a page template, and can save the new page's URL and ID in tokens. You set the name, title, parent page, menu visibility, meta data, dates, permissions and custom settings. The page's layout and modules come from the template.
The page is published when the action finishes.
This action is part of the Portal Management add-on, which is installed and licensed separately (feature package PORTAL). If it isn't licensed, the action fails with a not-licensed error.
Typical Use Cases
- Create a page for each new customer, project or event from a form or workflow
- Build a site structure (parent and child pages) from data
- Create a page from a standard layout, then redirect the user to it with Redirect to URL
Don't use it to
- Create a page without a template. The Template or Dynamic Template parameter is required.
- Create a page in another portal. The page is always created in the portal the action runs in.
- Change an existing page. Use Update Page instead.
- Set the page's theme (skin) or container. Other Settings only writes custom page settings. The theme and container come from the template.
Related Actions
| Action Name | Description |
|---|---|
| Export Page | Exports an existing page as XML. |
| Load Page | Reads a page's details into tokens. |
| Update Page | Changes the name, title, parent, permissions or settings of a page. |
| Delete Page (Soft) | Moves a page to the Recycle Bin. |
| Delete Page (Hard) | Deletes a page permanently. |
| Add Module | Adds a new module to the page. |
| Add Existing Module | Adds an existing module to the page. |
| Create Portal | Creates a new portal. |
Input Parameter Reference
| Parameter | Description | Supports Tokens | Default | Required |
|---|---|---|---|---|
| Page Name | The name of the page, for example [ProjectName]. It's used in the menu and in the page's URL. If it's empty, the action fails with Missing page name. | Yes | empty string | Yes |
| Page Title | The page title shown in the browser tab. It always replaces the title from the template, so an empty value clears it. | Yes | empty string | No |
| Show In Menu | Whether the page appears in the menu. Use true/false or 1/0. If it's empty, the page is hidden from the menu. | Yes | false | No |
| Template | A page template file in the portal, selected from the list. Only .page.template files are listed. These are the files DNN's own Export Page feature creates, usually in the portal's Templates folder. | No | empty string | Yes, unless Dynamic Template is set |
| Dynamic Template | The path of the template file, relative to the portal's home folder, for example Templates/[TemplateName].page.template. When it's set, it's used instead of Template. | Yes | empty string | No |
| Parent Page | The page to create the new page under, selected from the list. Leave it empty to create a root page. | No | empty string | No |
| Parent Page Token | The ID of the parent page, for example [Tab:TabId] to create the page under the current page. It's used instead of Parent Page when it's a number. A value that isn't a number, such as a page name, is ignored and Parent Page is used. | Yes | empty string | No |
| Page Description | The page's meta description. Keep it short, with no HTML. If it's empty, the template's description is kept. | Yes | empty string | No |
| Page Keywords | The page's meta keywords. If it's empty, the template's keywords are kept. | Yes | empty string | No |
| Start Date | The date from which the page is visible, for example [DateStart]. Leave it empty to show the page right away. A value that isn't a valid date is ignored. | Yes | empty string | No |
| End Date | The date after which the page is no longer visible. Leave it empty for no end date. A value that isn't a valid date is ignored. | Yes | empty string | No |
| Permissions | A list of page permissions. In the first column, enter a permission key (for example VIEW or EDIT) or name (for example View Tab or Edit Tab). In the second, enter role IDs or role names separated by commas or semicolons, for example Registered Users;Editors. Each permission you list replaces that permission from the template. Unknown permissions are skipped. The second column supports tokens, including [PermissionGrid:PermissionName] from a Permission Grid field. | Yes (role list) | empty | No |
| Other Settings | A list of custom page settings, as name and value pairs. The value supports tokens. The settings can be read later with [Tab:SettingName] tokens or with Load Page. | Yes (value) | empty | No |
Output Parameters Reference
| Parameter | Description |
|---|---|
| Store URL in Token | The name of the token that receives the full URL of the new page, for example NewPageUrl. Square brackets are optional. Leave it empty if you don't need the URL. |
| Store ID in Token | The name of the token that receives the ID (tab ID) of the new page, for example NewPageId. Square brackets are optional. Use it to add modules to the page or to change it later. |
How the page is built
- The template file is loaded. If it can't be loaded, the action fails with
Could not create page. Could not load the page template.and no page is created. - The page is added under the parent page, and the template's
<tab>content is applied to it. - The name, title, menu visibility, description, keywords and dates from the action are applied.
- The portal's Administrators role gets all page permissions, unless the template already gives it permissions. Then the permissions you listed are applied.
- The custom settings are saved, and the page is published.
Considerations
- There's no permission check in the action. Anyone who can run it creates pages. Only put it on pages, forms, workflows or APIs that trusted users can reach, and add a condition as a second guard.
- Be careful with user input in Dynamic Template. The path is read from the portal's home folder. Don't build it from values users can change freely.
- Include Administrators in the permissions you list. A listed permission replaces every grant of that permission, including the one given to the Administrators role in step 4.
- Page names aren't checked. The action doesn't check whether a page with the same name already exists under the same parent.
- A page name that's a number can later be mistaken for a page ID by the other page actions, because they try the identifier as an ID first. Avoid page names that are only digits.
- Menu visibility defaults to hidden. Set Show In Menu to
trueif the page should appear in the menu. - Dates are parsed in the server's culture. Use an unambiguous format, for example
2026-10-01. - Make your own template with DNN's Export Page feature, or build the XML with Export Page and save it as a file with Save File. The action uses the first
<tab>element in the file.
Examples
To understand how to use the below examples, please see Running Examples.
1. Create a project page under the current page
This action creates a page named after the project, under the current page, from a template in the portal's Templates folder. Only registered users can view it. The new page's URL and ID are saved in [NewPageUrl] and [NewPageId].
{
"Title": "Create Page",
"ActionType": "CreatePage",
"Description": "Create a page for the new project",
"Condition": "[ProjectName] != \"\"",
"Parameters": {
"PageName": "[ProjectName]",
"PageTitle": "[ProjectName] - Project Workspace",
"ShowInMenu": "true",
"Template": "Templates/Project.page.template",
"ParentPageToken": "[Tab:TabId]",
"PageDesc": "Workspace for project [ProjectName]",
"Permissions": [
{
"name": "VIEW",
"value": "Registered Users"
}
],
"OtherSettings": [
{
"name": "ProjectId",
"value": "[ProjectId]"
}
],
"TokenNameForUrl": "NewPageUrl",
"TokenNameForId": "NewPageId"
}
}
Revised 09/27/2026