Learn More





DNN Community Blog

The Community Blog is a personal opinion of community members and by no means the official standpoint of DNN Corp or DNN Platform. This is a place to express personal thoughts about DNNPlatform, the community and its ecosystem. Do you have useful information that you would like to share with the DNN Community in a featured article or blog? If so, please contact .

The use of the Community Blog is covered by our Community Blog Guidelines - please read before commenting or posting.

2sxc App vs. 2sxc Content - Which One Should I use?

Technically both the App and the Content module could be used for the same things - but you shouldn't, because they behave differently and provide a different UX. Here's an overview.

Purpose of the Content Module

This module is specifically meant for all the kinds of uncomplicated content like images, text/image combinations, page-decoration, a video, various content-links and more.

Purpose of the App Module

Apps are like DNN Modules on Steroids. They can be used for almost everything that DNN Modules could be used for, but they provide many advantages like

  1. Loads of data-features (like data-management, import/export, versioning, multi-language, etc.)
  2. Razor development instead of WebForms
  3. Built in REST and capabilities for custom WebAPIs
  4. Best practices and APIs for JavaScript, Angular, React based applications
  5. Integration with Git, npm, grunt, gulp, bower
  6. Automated deployment helpers for packaging the app
  7. Automated asset management with ADAM
  8. …and way more

Different User Experience

Because of this different purpose, many functionalities for the site editor are optimized to each use case. For example, inserting the Content Module will result in the editor doing the following

  1. choose what he/she wants to insert - the initial choice is the Content-Type (a Person, a Picture, etc.)
  2. choose how he/she wants to layout this content-type

On the other hand, a more complex App would be very confusing to insert like this. Imagine if a blog-app asked the editor "do you want to insert a blog-post, a tag or an author?" as the first question. This would be very confusing. Because of this, the sequence on the App is:

  1. choose which app
  2. choose which view

The view will then determine if this is a one-item view (like a view called "Author-Details) or a list-view (like Blog-Posts). It will also determine what data is to be shown, often showing many different content-types (like Posts and Tags) in the same view.

Different AJAX Reloading

Editing items in the Content-Module will automatically use AJAX to reload the view. This is fast and cool. But the default on the App is not AJAX, because App-views are often so complex, that an AJAX-reload might not work (because of page-initialization) or maybe should be done differently, by just reloading the JSON-stream. So to implement AJAX on your app-views, you must turn this on manually using this setting:

Different Features Enabled in Admin

Various advanced App-Module features are disabled in the admin section of the Content-Module. We did this because otherwise developers who don't know about this separation would quickly mess up. The main features disabled in Content are:

  1. WebAPI - you can't create your own WebAPIs in the Content-App
  2. Visual Data Query (aka Pipeline Designer) which is needed to query data is not available in Content
  3. Automatic View Switching using URL parameters is disabled in Content, because that is usually needed for list/details scenarios, which are better placed in an own App
  4. App Resources (for multi-language templates) are not enabled in Content, as these templates usually don't have labels or buttons.
  5. App Settings (like app-wide configuration values) are not enabled in Content, as these 


I hope this cleared up some misconceptions and helps you develop awesome solutions which best serve your editors and users.

Love from Switzerland,

Daniel Mettler grew up in the jungles of Indonesia and is founder and CEO of 2sic internet solutions in Switzerland and Liechtenstein, an 20-head web specialist with over 800 DNN projects since 1999. He is also chief architect of 2sxc (see forge), an open source module for creating attractive content and DNN Apps.

Read more posts by Daniel Mettler


Fuji Nguyen
Daniel - I watched one of your video "creating an app in 10 minutes". Got to tell you that it appeared easy in the video, however it took 10 days to figure it out!!! Appreciate you take time to explain various concept in this blog. It is very helpful in deciding when to use App vs Content. I really like the App capability - module on steroid. I put it in to use and it worked great. Here is an example - BTW it will take 30 days to figure out Visual Data Query (aka Pipeline Designer). This thing is a bear.
Fuji Nguyen Friday, September 30, 2016 9:18 PM (link)
2sic Daniel Mettler
@Fuji thanks for the feedback :).
The visual query should make things easier, if it takes 30 days then we're certainly not there yet. Do you have any recommendations based on your learning curve?
2sic Daniel Mettler Tuesday, October 04, 2016 2:37 AM (link)
Fuji Nguyen
Hi Daniel - for the App learning curve experience, I tried to relate the concept to traditional user control and its code behind. Instead of using user control, it is now HTML tag. Instead of writing C#, it is now razor and javascript.

For the visual query, I tried to relate it to Microsoft Management Studio/Query utility. It would be helpful to explain the input and output of the visual query. For example, the input to management studio are table/view and the out put is data. We can also use management studio to create view, store procedure, functions, etc.

Once again thank you for sharing the sexy content module. I like your approach of agile/light weight app vs. the traditional thick custom DNN module. Great invention. Keep up good work!!!
Fuji Nguyen Wednesday, October 05, 2016 10:41 PM (link)

Comment Form

Only registered users may post comments.


2sic Daniel Mettler (124)
Aderson Oliveira (15)
Alec Whittington (11)
Alex Shirley (10)
Andrew Nurse (30)
Anthony Glenwright (5)
Antonio Chagoury (28)
Ash Prasad (22)
Ben Schmidt (1)
Benjamin Hermann (25)
Benoit Sarton (9)
Beth Firebaugh (12)
Bill Walker (36)
Bob Kruger (5)
Brian Dukes (2)
Brice Snow (1)
Bruce Chapman (20)
Bryan Andrews (1)
cathal connolly (55)
Charles Nurse (163)
Chris Hammond (203)
Chris Paterra (55)
Clinton Patterson (28)
Cuong Dang (21)
Daniel Bartholomew (2)
Dave Buckner (2)
David Poindexter (3)
David Rodriguez (2)
Doug Howell (11)
Erik van Ballegoij (30)
Ernst Peter Tamminga (74)
Geoff Barlow (6)
Gifford Watkins (3)
Gilles Le Pigocher (3)
Ian Robinson (7)
Israel Martinez (17)
Jan Blomquist (2)
Jan Jonas (3)
Jaspreet Bhatia (1)
Jenni Merrifield (6)
Joe Brinkman (270)
John Mitchell (1)
Jon Henning (14)
Jonathan Sheely (4)
Jordan Coopersmith (1)
Joseph Craig (2)
Kan Ma (1)
Keivan Beigi (3)
Ken Grierson (10)
Kevin Schreiner (6)
Leigh Pointer (31)
Lorraine Young (60)
Malik Khan (1)
Matthias Schlomann (15)
Mauricio Márquez (5)
Michael Doxsey (7)
Michael Tobisch (3)
Michael Washington (202)
Mike Horton (19)
Mitchel Sellers (28)
Nathan Rover (3)
Navin V Nagiah (14)
Néstor Sánchez (31)
Nik Kalyani (14)
Peter Donker (52)
Philip Beadle (135)
Philipp Becker (4)
Richard Dumas (22)
Robert J Collins (5)
Roger Selwyn (8)
Ruben Lopez (1)
Ryan Martinez (1)
Salar Golestanian (4)
Sanjay Mehrotra (9)
Scott McCulloch (1)
Scott S (11)
Scott Wilkinson (3)
Scott Willhite (97)
Sebastian Leupold (80)
Shaun Walker (237)
Shawn Mehaffie (17)
Stefan Cullmann (12)
Stefan Kamphuis (12)
Steve Fabian (31)
Timo Breumelhof (24)
Tony Henrich (3)
Torsten Weggen (2)
Vicenç Masanas (27)
Vincent Nguyen (3)
Vitaly Kozadayev (6)
Will Morgenweck (37)
Will Strohl (163)
William Severance (5)
Try Evoq
For Free
Start Free Trial
a Demo
See Evoq Live
Need More Information?