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.

Module Development for Non-Developers, Skinners, & DNN Beginners - Blog Series Intro

I first bumped into DNN back around 2006 when I was a site admin at a local university. DNN was at around version 4.7 back then and the university’s Admissions department at the school started using a 3rd party solution that was based on something called “DotNetNuke”. Inevitably the Admissions department came to me with a change request and I had to learn more about this application called DotNetNuke. 

It’s been a while since then and my initial research into DNN got me hooked and led me to using DNN more and more and consequently I wanted to learn more and more about it. I remember being new, aggravating people to help me, reading forums and blogs trying to learn more, spending time on, reading Michael Washington’s site a lot, and doing anything I could to learn about DNN in general.

At first just learning how DNN is architected and where I should go to update various settings and permissions within DNN were my goals. It didn’t take me long at all to realize that I could do a lot more with DNN than I could have ever done on my own. Over time I learned more about the DNN Community and came to recognize that by using DNN I was essentially standing on the shoulders (and generosity) of developers from around the world who worked on the platform and freely contributed their code. I did not know these people, but I knew they were smarter than me and I knew that I appreciated their generosity!

After learning the basics of how to manage a DNN site I then wanted to know how to update the look and feel of the site even more. I am a very hands-on, visual learner with a short attention span so I set down the path which I would later learn is referred to as “skinning” a DNN site. I wasn’t a front-end or back-end developer guru and don’t have a really strong background in development. Initially I could only do simple things like change a font size, but I pushed myself to learn more about how a skin works and how it is coded. Over time I learned more about skinning and got to where I could change backgrounds, create different pane layouts, and create unique site designs in DNN.

I spent a few years learning all about site administration and skinning and eventually thought to myself that it would be neat to know how to develop a module. I interacted with modules all the time when managing DNN sites. Though, developing a module required a lot of skills that I didn’t have at the time and many of which I am still learning. I wanted to learn more and I joined the Charlotte based DNN user group, the “QCDUG”. I thought to myself that hopefully I could meet people from whom I could “mooch” knowledge. If you ask Allen Foster (former president of QCDUG) he can tell you about the many questions I used to ask him when I was first starting out. I was embarrassed to ask Allen so many questions that were so basic, but he made it ok for me to be clueless and I still appreciate that. Allen spent a lot of time with me on meetings with no reason to help me other than probably feeling sorry for me. Allen’s generosity with his time fell right in line with the open source mindset of sharing and helped me get the beginnings of understanding of module development.

One thing I very vividly remember was being frustrated when I was trying to learn about module development. Part of the frustration was due to my own lack of knowledge and experience, but the other part was that I couldn’t seem to connect all the dots. Yes, there were tutorials, but none of them were geared for me, the guy who wasn’t a strong developer, the guy who needs hand holding and wants to know the how and why of everything, the guy who spends more time confused than actually making progress. I needed a start to finish tutorial with explanations of what’s happening all along the way at the most basic level. I needed diagrams, videos, and explanations of concepts that I should probably have already known.

Back then I would read one person’s tutorial and get understanding about a certain topic, then I would read a different person’s tutorial and gain understanding about a different topic or about how I could do the same topic, but yet in a totally different way. Some tutorials assumed that readers had a certain level of development knowledge and a lot of times I even missed that cut! It was indeed good to learn the bits and pieces, but at the same time it was frustrating because I simply couldn’t put it all together. I could never get a firm grasp on it all. As time passed I kept on pushing, nagging, and learning and that still continues today.  

So here we are now in 2014 and I am still learning about module development and I nag people weekly with questions trying to learn more. One thing I promised myself back in the moments of frustration when I was trying to learn more about module development was that if I ever could code even the most basic module that I would write a tutorial blog series about it targeted at the “me” back in 2006.  This blog series is the first entry of me staying true to that promise.

So if you’re the person who may be trying to learn about module development, but yet are intimidated by all the smart people that use this site or if you are the person who is hesitant to ask the basic questions or if you are new to DNN and simply want to know more or if you are a front-end developer who’s trying to learn more about module development (and development in general)… if you are any of those people then this tutorial series is dedicated to you because I either used to be you or still am you.

What to Expect in This Series

I’m going to attempt to write this blog series about module development from the perspective of a complete newbie. I’m going to try to explain concepts, code, and some history too. If you are a seasoned developer, feel free to laugh at my attempts to explain concepts because it will probably be a different “style” than normal, but please do read any comments posted to the series and assist by answering questions and providing insight into things I could have described better. I’m also going to try to speak to the “multiple intelligences” or multiple learning styles that people have. I’m going to document things thoroughly in text, provide conceptual images and screenshots, and videos in hopes of providing something for how each learning styles learn best. If any external resources are helpful I will include links to them as well.

I invite you to join me on this blog series as we go from absolutely clueless to having a basic, but modern module. This series may not be the best module development series out there, but hopefully it will help someone somewhere move a step or two closer to developing your own module. If that happens then this series will have been a success as that is my intended goal.

Series RoadMap
I'm going to post these entries for the next 21 days in a row. So come on back if you want to keep up with the series!

  1. Series Intro (This blog)
  2. What is a Module?
  3. Software and Resources
  4. Installing DNN
  5. The "Tasks" Module
  6. Module Development Templates
  7. Designing and Styling the View Control
  8. Creating the Tasks Table
  9. Creating the Tasks Class
  10. Creating the GetTasks Stored Procedure
  11. Creating the Task Controller Class
  12. Module Development vs. Modern Module Development
  13. Creating the Web Service Class
  14. Using jQuery & Ajax
  15. Mentally Mapping The Pieces Together
  16. Debugging a DNN Module
  17. Adding Tasks
  18. Editing Tasks
  19. Deleting Tasks
  20. Giving Our Module a Setting
  21. Installing Our Module in Another DNN Instance
  22. Series Conclusion


Geoff Barlow
Hi Clinton,

I'm looking forward to your blog series.

I know how you feel and I still feel out of my depth here, but we do our best to give back where we can.

I'm glad that someone has thought about this, build a module from scratch without use of other modules (The old fashioned way). Just wish that I had thought about doing this!

Where possible I'll do my best to give back and help out where I can with your series! Hopefully other people will do the same.

Good luck!

Geoff Barlow Monday, September 29, 2014 1:04 PM (link)
Clinton Patterson
Thanks Geoff! I appreciate it... and I'm sure that I'm going to miss a step somewhere along the way so having you experienced guys participate will definitely be helpful for me and everyone who reads this series. Thanks again...
Clinton Patterson Monday, September 29, 2014 1:38 PM (link)
David Poindexter
This looks very interesting Clint. I will definitely add this series to my reading list!
David Poindexter Tuesday, October 21, 2014 3:34 PM (link)
mohammad azarbara
Geoff, this is wonderful blog series.
i will follow your blog.
mohammad azarbara Wednesday, October 29, 2014 1:00 PM (link)
Geoff Barlow
@mohammad this blog was created by Clint and all credits should go to him!, but you are correct... it is a great blog for people who are looking to start to create modules for Dnn!

Geoff Barlow Thursday, October 30, 2014 4:07 AM (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 (21)
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 (269)
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?