I reworked the form and list module to hopefully fix several issues and add some enhancements. This module is based on the original DNN Form and List module, so after it's fully tested, I will offer it for free. To get it production-ready, I need a few volunteer testers. If interested in taking a look, send me your email, and I'll send you the user guide and install ZIP. You must be on 10.3.3.
Here is the User Guide
Nov 1, 2026 · @George
BCC Forms lets you build a data-entry form and a list of the submitted records on any DNN page, without writing code. It is a standalone module for DNN Platform 10, derived from the open-source DNN Form and List module, and this guide covers version 01.02.00.
One module instance holds one set of fields (columns) and the records entered against them. Visitors fill in the form; the same records can be shown as a sortable table, cards, your own HTML template, or an XSL stylesheet.
Item
Requirement
DNN Platform
10.3.3 or later (10.4 or later recommended, see Troubleshooting)
.NET Framework
4.8
Database
SQL Server 2017 or later (as required by DNN 10)
Permissions to install
Host (superuser) account
BCC Forms installs side by side with DNN's own Form and List module; it uses its own folder (DesktopModules/BCCForms) and its own database tables (BCCForms_*).
A working form takes three steps: add the module, define its fields, and pick form or list mode.
The field list shows each field's main options as ticks (a tick means yes, an empty box no).
Option
What it does
Required
The form cannot be submitted without a value. Required fields show a red asterisk.
Display on List
Shows the field as a column (or card line) in the list. It does not affect the form.
Restricted Form Field
Only users with the module's "Edit also restricted columns" permission see and edit it.
Searchable
Includes the field in the list's search box.
Help text
Shown in a tooltip from the ⓘ icon next to the label.
Validation rule and message
A regular expression the value must match, and the message shown when it does not.
Show on edit (system fields)
Lets you show fields such as Created at on the form.
Type
Use it for
On the form
Text
Names, short answers, pick-lists
Text box, or a drop-down/radio / check list when you give it a list of values
Rich Text (HTML)
Formatted descriptions
HTML editor or a plain multi-line box
Integer, Decimal, Currency
Quantities and amounts
Number box; the list formats numbers (currency uses the site's currency)
Date, Date and Time, Time
Dates and times
Date picker and time box
True/False
Yes/no answers
Check box
Email
Email addresses
Text box with address validation; shown as a mail link
URL
Links to pages, files, or web addresses
DNN link picker
Image
Pictures from the site's file system
DNN file picker; shown as an image or thumbnail
Download
Files for visitors to download
DNN file picker; shown as a download link
Link to User's Profile
Pointing a record at a site user
User picker; shown as the user's name
Look-Up
Values from another BCC Forms list
Drop-down of that list's values
Calculated Column
A value worked out from other fields
Not editable; computed for the list
Separator
A heading that groups the fields below it
Section heading (optionally collapsible)
Created by/at, Changed by/at
Who saved the record and when
Filled automatically
The form lays its fields out in DNN's standard two-column rows by default; a form template lets you arrange them yourself.
Current View Options → Appearance sets what this page shows. It applies to the current page only, so the same module can show the form on one page and the list on another.
Appearance
Shows
List
The list, with an Add link for users allowed to add records
Form
Only the form (a typical contact or sign-up form)
Form above List
The form, with the list under it
Form below List
The list, with the form under it
Visitors also need permission to add records: in Module Settings → Permissions, grant Create Record / Submit Form to the roles that may submit (for a public form, All Users or Unauthenticated Users). Actions as Buttons shows Add / Show Records as buttons instead of menu items.
Action upon submit
What the visitor sees
Show Form and Text
Your thank-you text above a fresh, empty form
Show Text only
Only your thank-you text
Redirect to another page
The page you pick
The thank-you text is entered in the HTML editor under Displayed text after form post.
Turn on Enable Form Template to control the form's HTML. Use [label-for:Field Title] for a field's label and [editor-for:Field Title] for its input; any other HTML is written as is.
Click Generate Template for a starting point. It writes one DNN form row per field the form shows, marks required fields, and turns separators into section headings:
[label-for:Name] [editor-for:Name]
Notes:
The list can be shown four ways, and paging, sorting, the filter, and search work the same in all of them.
Choose under List Settings → List Layout.
Layout
Looks like
Best for
Table
A sortable table; click a column heading to sort. On phones, each record stacks as "title value" lines.
Data people scan and sort
Cards
Each record as a card in a grid that adjusts to the screen width, with an edit icon on records the user may edit
Directories, listings, galleries
HTML template
Your own header, item and footer HTML (below)
A custom design without XSL
XSL stylesheet
A stylesheet made with the XSL generator or by hand
Existing Form and List designs
Only fields with Display on List appear in the table and cards. Administrators also see hidden and system fields unless that is switched off in Module Settings.
Select an HTML template, then fill in the three boxes or click Generate starter template for a card design built from your visible fields.
Box
Written
Tokens
Header HTML
Once, before the records
[UDT:TotalRecords]records in the list, [UDT:PageRecords] records on this page
Item HTML
Once per record
See below
Footer HTML
Once, after the records
Same as the header
Item token
Inserts
[Field Title]
The value as the table shows it: links, formatted dates and numbers, user names
[Field Title:Text]
The stored value as plain text, safe to place inside attributes
[UDT:EditLink]
The edit icon, only when the user may edit the record
[UDT:EditUrl]
The edit page address on its own
[UDT:RowId]
The record's ID
[UDT:Index]
The record's position on the page (1, 2, 3 …)
Field titles are matched without regard to case. A token that matches nothing is left in the output, which makes typos easy to spot.
[UDT:EditLink] [Name] [Email] · [Phone]
[Email] · [Phone]
Pick an XSL stylesheet, then choose a file or click Generate New to open the XSL generator and build one from an HTML template with tokens. Stylesheets written for DNN Form and List keep working; the data uses the same names.
Setting
Effect
Sort Column / Sort Direction
The default order. In the table, clicking a heading overrides it for that visitor.
Paging
Records per page (1–50), or none for one long list.
Records Returned
Show only the first N records (1–1000), after sorting.
With paging on and no filter or search active, the list reads only the page being viewed from the database, so large lists stay fast. Sorting by text, number, date, or yes/no fields happens in the database too. Filters, search, calculated fields, and sorting by link or user columns use the slower path that loads all records; the results are the same.
Anonymous submissions can be checked by a CAPTCHA and a hidden honeypot field, and everything users type is cleaned before it is stored and shown.
In Module Settings → BCC Forms Settings, choose Spam protection for anonymous users. Signed-in users are never challenged.
Visitor sees
Keys needed
None
Nothing
No
DNN image CAPTCHA
An image with characters to retype
Google reCAPTCHA v2 (checkbox)
The "I'm not a robot" box
Yes, from google.com/recaptcha/admin
Google reCAPTCHA v3 (invisible, scored)
Nothing (a small Google badge); each submission is scored
Yes, v3 keys
Cloudflare Turnstile
A small check that usually passes on its own
Yes, from the Cloudflare dashboard
Grant these in Module Settings → Permissions.
Permission
Allows
Create Record/ Submit Form
Submitting the form (adding records)
Edit Record
Editing records
Delete Record
Deleting records
Display All Columns
Seeing fields hidden from the list
Edit Also Restricted Columns
Seeing and editing Restricted Form Fields
In form mode, permit list as well
Opening the list from a form-only page
In BCC Forms Settings:
Under Configuration → Email Settings, the module can send an email whenever a record is added, changed, or deleted.
Use
Trigger
Tick On New, On Update and/or On Delete
To
Addresses separated by ;. A field title in brackets sends to the address in that record, for example [email protected];[Email];[Created by] (works with Email, Created by, Changed by and User link fields)
Subject
Plain text with tokens, e.g. New request from [field:Name]
Email Message
The opening text of the email
On New/On Update/On Delete Text
Extra text added for each kind of change
Email Body Creation
Auto lists the record's fields under your text; XSL Script uses a stylesheet you edit or generate with the buttons next to it
From, Reply-To, CC, and BCC take addresses the same way as To. When From is empty, the email is sent from the site's email address (Site Settings in DNN).
Module menu → Export to CSV File. Pick a folder, file name, and delimiter (comma or semicolon). Optionally include the system fields and limit the export to records created between two dates. Values are exported as stored, without links or formatting.
Module menu → Import CSV File. Choose the file and delimiter.
Importing replaces the module's fields and records: every existing record and field definition is deleted, a Text field is created for each column of the file's first row, and each following row becomes a record. Afterwards, the module is switched to list view. Export first if you may need the old data.
After importing, open Configuration to change field types (for example to Date or Integer) as needed.
A template copies a module's fields, configuration, and, optionally, some records to new modules.
Other module menu items: Show All Data as XML (the data the XSL stylesheets see), Delete All Records, Save Configuration as default, and Reset to default Configuration.
Most problems come from permissions, CAPTCHA keys, or a template; when the module shows an error, the details are in Persona Bar → Manage → Admin Logs.
Symptom
Likely cause
What to do
Visitors don't see the form
No Create Record/ Submit Form permission for them
Grant it to All Users or Unauthenticated Users in Module Settings → Permissions
"We couldn't confirm you're not a robot" on every submit
Wrong or missing CAPTCHA keys, or keys for a different provider or domain
Re-enter the site and secret key for the selected provider; check the site's domain is registered with it
reCAPTCHA v3 rejects real visitors
Score threshold too high
Lower Minimum reCAPTCHA v3 Score (try 0.3) or switch to Turnstile
A field is missing from a template form
The template has no token for it
Add and/or click Generate Template again
Labels and fields don't line up in a template
The template uses a grid the theme doesn't have
Regenerate the template, or use your theme's own grid classes
A field is missing from the list
Display on List is off
Tick it in Data Table Setup
An HTML template shows [Something]
The token matches no field title
Check the spelling against the field titles
The list shows the table instead of my XSL
The stylesheet file is missing or has an error
Pick the file again; an XSL error message names the line
Rich text loses some formatting
It was cleaned for security
Allowed: formatting, lists, tables, links, images; scripts, frames, and forms are removed
An error in the module; the rest of the page works
An error while building the form or list
Look up the newest entry in Admin Logs and pass it to your developer
Does it need DNN 10.4? No, 10.3.3 works. On 10.3.x, the advanced HTML cleaner may not load because DNN 10.3 lacks one of its files; BCC Forms then falls back to DNN's older filter and logs this once. DNN 10.4 and later include the file.
Can it replace DNN Form and List? Yes, but it is a separate module: create BCC Forms modules and move data with CSV export and import. Existing XSL stylesheets keep working.
Does paging make large lists fast? Yes, when paging is on, and no filter or search is active; only the page shown is read from the database.
Where is the data stored? In the site database, in the BCCForms_Rows, BCCForms_Data and tables. Deleting a module from the recycle bin deletes its records.
These Forums are for the discussion of the open source CMS DNN platform and ecosystem.
For the benefit of the community and to protect the integrity of the ecosystem, please observe the following posting guidelines:
Awesome! Simply post in the forums using the link below and we'll get you started.