DNN Development

DNN Development

Be Part of the Future: Test/Review DNN 9.x

09 Nov

Exciting times are upon us as users within the DNN ecosystem, regardless of if we are users of the OpenSource DNN Platform product, or if we are users of the commercial Evoq product lines.  The next release of DNN 9 will include some of the most significant changes to functionality that we have seen in many years.  With the coming change, we are at a crossroad, where community involvement is critical to ensure that the next version of the product is as good as possible.

tags: DNN, DNN Development, DNN Install/Upgrade

Being a Good DNN Citizen: Referencing Database Tables

15 Jul

For quite a while now I have written about development best practices, methods to improve the performance of developed solutions, and a little about how to be a good citizen with other portions of the application.  In this post I will take a look at a few standard situations that I have encountered when working with developers new to the DNN Platform.  

tags: DNN Development, Quick Tips

When Memory Caching Doesn't Mean Memory

05 Apr

For a number of years I have been providing guidance on how to get the best performance from DNN. One of my key recommendations is to change the caching mode to "Memory" from the default setting of "File." The setting change itself is quick and harmless, simply change the value in Host Settings are you are done. Well, come to find out it isn't exactly that easy.

tags: DNN, DNN Development, Performance

DNN/Evoq Scheduler: Setting Expectations

30 Dec

One of the fundamental features of the DNN/Evoq platform is the the internal "Scheduler" system.  Creating a Scheduled Job is an easy process, and something I have blogged about in the past.  However, I have been seeing more questions recently around what exactly is meant by the "5 Minute" Interval or other settings regarding the scheduler jobs.  The root cause is the differences in expectations versus what is possible.

tags: DNN, DNN Administration, DNN Development

Fixing Failing DNN Scheduler DNN 7.3.x Issues

23 Sep

In the past few months I have had to work with various issues with DNN/Evoq sites not executing scheduler jobs.  A number of various blog posts as well as forum posts have been started on the issue, and all point to a similar issue with regards to case-sensitivity with the scheduler and the web server name.  I had a recent situation though where I had fixed all of the issues outlined but was still seeing an error.

tags: DNN, DNN Administration, DNN Development, Quick Tips

Avoiding Issues with DNN EncryptParameter

08 Sep

Working with DNN extension development we often need to share information from page-to-page or other locations within our application and we want to do so in a secure manner.  For the longest time DNN has contained a handy set of methods in the UrlUtils namespace, EncryptParameter and DecryptParameter.  They are easy to use, but just recently I have uncovered a very unusual situation that resulted in an error.  Funnily enough, this code has been running in production for more than 5 years!

tags: DNN, DNN Development, Quick Tips

DNN Quick Tip: Ajax Postback Controls

15 Dec

In an effort to get more regular content out here to the blog I am going to try and resume my "Quick Tips" posts.  These are much shorter posts than some of the more involved ones that I do, but cover common questions and tips that I get via email.  A very common request that I get from developers after they have set the "SupportsPartialRendering" flag within their module manifest is how can they set a control to force a postback quickly & easily.  Lets investigate!

tags: DNN Development, Quick Tips

Load Testing Your Application: Art or Science?

12 Sep

Earlier this year I blogged about this importing of understanding and knowing how your application will perform under load.  (See it here).  After receiving a lot of questions from individuals wanting to learn more about "how" they can load test their applications and the tools that I use when testing applications I thought it would be good to follow up with a post to shed a bit of light on the process.  

tags: ASP.NET, DNN Development, .NET 4.0, Performance, .NET 4.5

Module Performance; Set Yourself Apart

06 Jul

With a plethora of modules on the market today, it is often hard for users to select the "right one" for their solution. Help yourself, and help your customers by setting your modules apart in one of the most important ways, performance. Not all DNN sites are large, not all DNN sites are small, that's the beauty of the platform. However, many modules & vendors ignore this major difference. Lets look as some simple tips & tricks to help us set our modules apart.

tags: DNN, DNN Administration, DNN Development, Performance

Enterprise Extension Development with DotNetNuke Part Four - Environment & Testing

07 Oct

If you have been following this blog series you will know that we have been making strides from the basics of what we are trying to accomplish under the term Enterprise Extension Development in the part one post.  In parts two and three we continued the trend and talked about project structure, NuGet, and overall organization.  If you have been following along since the beginning I'm sure that you have a number of questions.  I know I've been getting a lot of e-mails asking about various parts of the process now that we have setup our projects in a manner that doesn't necessarily match to what you would expect for working with DNN.  So lets continue the discussion with a little recap of what we have accomplished so far, then we will answer the questions.

tags: DNN Development

Enterprise Extension Development with DotNetNuke Part Three

29 Sep

This post is a continuation of my ongoing Enterprise Extension Development blog series talking about how to effectively leverage DotNetNuke in complex environments. In Part One we set the stage for why it is important to look at Enterprise Development slightly differently. In part two we started on the slight differences to basic project structures needed to ensure that we can "Compile Anywhere" and move our projects quickly between machines etc. In this part of the series we will take a look at your code structures within, to handle interdependencies etc successfully.

tags: DNN, DNN Development

Enterprise Extension Development with DNN Part Two

25 Jul

A few weeks ago I set the stage for this series of posts with my Enterprise Extension Development with DotNetNuke Part One post.  This article, the next in the series, ended up getting delayed a bit.  As many of you know there has been a lot changing within the DotNetNuke world, as all of this unfolded my priorities were pulled from these posts to other areas of concern.  Now, I'm back on these posts and want to make sure to dive into this in detail.  In the first post of the series I covered the high-level details.  The reasoning behind this series, and the main goals that I hope to accomplish by putting this information out there.  This post is dedicated to the development environment, and development structure for our projects.

tags: DNN, DNN Development

Enterprise Extension Development With DotNetNuke Part One

15 Jun

Earlier this year I spoke at the Southern Fried DotNetNuke event and one of the most popular of my talks was "Developing Enterprise Solutions with DotNetNuke."  Now that we have one of the final hurdles cleared from an implementation perspective in this post, and future ones I will start to share all of the details that I have been promising.   This post will serve as a launch point for the future parts, as of this point in time I believe this will span 8-10 posts to give everything the proper coverage necessary.  As the series grows I will update this post with links to the future sections.  So lets get to it!

tags: DNN, DNN Development

Official DotNetNuke NuGet Packages.

13 Jun

Many of you have been asking me about my promised Enterprise DotNetNuke Development blog postings that I have been promising since the Southern Fried DotNetNuke event earlier this year.  I have been working on them, but one of the key pieces for me was to figure out how to get NuGet packages to the greater population as I was working locally with a private NuGet Server for my own purposes.  I'm happy to be able to note that today DotNetNuke corporation released official NuGet packages to the nuget.org repository and they are freely available for users as of today.  In this posting I'll run through the different packages that are available, when you would want to use them, and what versions are available as of this posting.  

tags: DNN, DNN Development

DotNetNuke Form Patterns and You! 6.x or 7.x?

19 May

As a developer of hundreds of custom DotNetNuke extensions I have to say one of my favorite enhancements to the DotNetNuke platform over the last few years was the inclusion of the new DotNetNuke Form Pattern that was part of the 6.x release.  By incorporating a consistent design pattern it became trivial for extension developers to build modules that had similar UI patterns and would thus have consistently styled applications.  By doing this it is possible to make the understanding of flow within your applications easier as you are leverage a UI style that more similarly matches that of the platform itself.  However, as with any new feature it hasn't came without a few "bumps" in the road.  There were a few changes between 6.x and 7.x that have caused a bit of a problem for those of us that have already adopted the patterns, or those that might.  In this post we will look at these differences and the one small change that you can make for a seamless experience regardless of if you are targeting 6.x or 7.x!

tags: DNN, DNN Development

ASP.NET Web Forms Model Binding – My Favorite ASP.NET 4.5 Feature

22 Apr

I have been working on this blog posting for over 2-3 weeks, by far one of the longest writes of any posting that I’ve done in the past. The reason for this is that I’m writing about a concept that you should already be aware of which is the inclusion of Model Binding Support for Web Forms in ASP.NET 4.5. You can find a number of resources out there that talk about this, including this amazing tutorial series. So why do I feel the need to spend so much of my time writing about this feature? Well read on to find out!

tags: ASP.NET, DNN Development, .NET 4.5

Simplifying DotNetNuke Module MSBuild Packaging With Auto Set Package Name

04 Mar

DotNetNuke module development became a lot easier when it became easy to use MSBuild to simply build your project and get a nice install-able module package in the end.  I've been using this process for a number of years now, but there have always been those little things with the default templates that many have been distributing that just don't meet my needs 100%.  For example a few years back I blogged about a fix for Auto Packaging Multiple Modules.  This post shows a fix for one of my other biggest pet-peeves when it comes to the auto-package process and that comes from the determination of the 'PackageName' that is used to name the destination file.

tags: DNN, DNN Development

Creating an ASP.NET 4.5 File Security Process

26 Feb

Often when working with web applications it is necessary to secure access to documents or other user supplied resources.  If you look online you will find a number of different recommendations on how to accomplish this.  Some will recommend a HTTP Handler, some will recommend a simple ASPX, others will have other random ideas.  Regardless of the actual implementation there is always a common area of mixed recommendation, once you have validated that the user has the proper permissions to access the resource, how do you get the item to the user?  In this post I'll discuss a new API that is publicly available in .NET 4.5 that helps with one problem area.

tags: ASP.NET, C#, DNN Development, .NET 4.5

Using the DotNetNuke Extension Verification Service

01 Feb

As a person that has either directly written or managed the creation of over 400 custom DotNetNuke extensions in the past few years, the DotNetNuke package process is still the one item that I will at times overlook.  Well, recently DotNetNuke released a utility to help those of us looking to ensure that our extensions meet all of the proper requirements for consistent installation.  

tags: DNN, DNN Development

Using DotNetNuke Caching in Custom Modules

03 Nov

One of the biggest concerns for developers these days is how to increase the performance of delivered applications. User expectations have changed over the past few years and the expectations are very, very high in regards to page load times and how quickly information should be returned to the users. Thankfully, as part of DotNetNuke there are a number of different features that can help applications work quickly. Some of these features are known by everyone, things such as the DotNetNuke performance settings under "Host Settings", Cache Time settings on a module by module basis, and if on Professional Edition the built in page Output Cache Provider. However, one often overlooked API that is helpful for developers is the DataCache API. In this post I'll do a deep dive into why this API is so helpful and some scenarios where leveraging this API it can reduce page load times and system resources needed for each page request.

tags: DNN, DNN Development

Using radCaptcha Via DotNetNuke Wrappers

23 Jun

When putting a form that is public facing we often need to add a captcha to help prevent bots from submitting our forms.  Historically there has been a control available within DotNetNuke that worked for this, but admittedly it didn't have the best customization nor was it the most "pretty" of them out there.  Ever since DotNetNuke has had the Telerik Controls a new option has been available yet its usage isn't the most widely documented.  In this post I'll show you how to use RadCaptcha in your own custom modules.

tags: DNN, DNN Development, .NET 4.0, Quick Tips, .NET 4.5

jQuery and Clicking an ASP.NET Linkbutton

21 Jun

As a web developer one common request is to make sure that the interfaces we build out for users look the best that they can and also provide users with the best experience both via the keyboard and mouse.  As part of this we will often have areas of conflict.  This post is going to cover one common scenario that will impact users that might be using DotNetNuke common styles or working to create their own custom button styles.  With ASP.NET it is common for people to use "LinkButton" controls to trigger actions rather than your standard "Button" controls as they are easier to style.

tags: ASP.NET, .NET 3.5, DNN Development, .NET 4.0, .NET 4.5

Getting Up to Speed on DNN 6.x Design

19 Dec

So like many developers I have been spending some time recently updating my client, commercial, and open-source modules to support the new DotNetNuke 6 Form Pattern from a design perspective, to make my modules better integrate into the system.  Looking around when I was starting there is very little "true" documentation on this concept, and for me it was a bit cumbersome pulling everything together.  I started with this Wiki Article and then ended up spending a lot of time digging/inspecting lots of other modules that had been upgraded.  So in this post, I'm going to take a bit more of a 'code-centric" no-nonsense approach to what your form should really look like, I hope that this helps you.

tags: DNN, DNN Development, Quick Tips

Force User Roles Update via DotNetNuke

07 Nov

One of the things that I have been finding that I do a lot recently is updating user security roles based on actions either taken by the users or actions that have been taken by others.  Doing so is quite simple from a DotNetNuke API perspective but how do you go about actually forcing the role membership change right away?  That is what I'll talk about in this post.

tags: C#, DNN Development, Quick Tips

SQL Server Forward_Only Cursor for Performance

23 Sep

For those of you that follow me on Twitter you might have heard my recent comments around a DotNetNuke SQL Script that I had to run that would have an impact of between 6 and 9 million SQL statements being executed on a database.  As part of this project I was focusing a lot on SQL Server performance, and getting the best overall bang for the buck with the query. Sadly, given what I was working with a Cursor was needed to ensure that I had the best, most stable solution.  In this post I'll share a little about the process and the lesson learned with cursors.

tags: SQL, DNN Development

Auto Packaging Multiple Modules with DotNetNuke

07 Jul

Like many people I have been building DotNetNuke Modules using Chris Hammond's DotNetNuke Module Template.  It is a great template set and works well in 99.9% of cases.  However, recently I have been building more and more complex module solutions for customers where within a single project I have a need to package up two or more "distinct" modules.  Therefore I have one DotNetNuke Module Manifest and it will install multiple modules.  Overall the process works great, but there is one small nuance, the filename, if you have two modules you will get xx.xx.xx.yy.yy.yy as the filename, which is the version of module 1, and the version of module two.  In my case I just want the first module to show, and in this post I'll show you how.

tags: DNN, DNN Development, Quick Tips

DotNetNuke Scheduled Jobs Using the API

17 Apr

A while back I blogged about Creating DotNetNuke Scheduled Jobs and promised a "part two" article, this is that article.  In the previous installment I talked about the process of creating and manually installing a scheduled job.  This article is designed to take this to the next step and discuss how you interact with the Scheduler System to handle installation and other validation methods of scheduled jobs.  I will explain the finer points in regards to checking to see if a job exists and creating or modifying a job.

tags: DNN, DNN Development

DotNetNuke Going to C# - My Thoughts

01 Mar

Well, as I'm sure that most of you have figured out already, DotNetNuke Corporation announced yesterday that starting with Version 6.x of DotNetNuke the core will be using C# as the programming language.  This change is something that has been talked about at community events in the past and various people have shared their comments on the potential decision, and even since yesterday people have voiced their opinions on it now that the change is official.  With this post I'm going to share a few of my thoughts on this, and hopefully take a slightly different approach.

tags: DNN, C#, DNN Development

Creating DotNetNuke Scheduled Jobs

18 Jan

So for a long time now I have been promising an article on creating DotNetNuke Scheduled jobs and finally I'm actually getting it written.  This article is actually the first in a series of two articles.  This one will start out with the programming process involved, and the general "manual" setup process to actually get the job going.  The second article will focus on using the DotNetNuke API's to be able to validate and configure a scheduled job from within a module, making the user setup process easier.

tags: DNN, Tutorials, DNN Development

DotNetNuke Growing Pains and You, How to Cope

22 Jun

I have had this blog posting all ready to go now for a good three to four weeks, but have been in deep internal conversation in regards to the posting of the article.  I have decided that more than anything posting this publicly might stop some of the e-mails that I get bombarded with each and every day that start out with "what do I do" or "do you still believe in DNN".

Before I start the post I am NOT in any way, shape, or form pointing fingers or expressing any displeasure at the platform or any of the members involved.  I am still a DotNetNuke core team member, I believe fully in the platform, and I will continue to adopt and recommend usage of the platform for the foreseeable future.  The point of this post is very simple, to talk about what has been going on in the DotNetNuke community and my opinions on how to manage expectations and cope with the situation.  Please remember the disclaimer that is posted at the bottom of this blog, these thoughts are mine and mine alone.

tags: DNN, DNN Administration, DNN Development

DNN 5.2.x Changes to Module Create Process

09 Feb

In a few of the most recent versions of DotNetNuke, major changes have been completed in the way that a user manually imports a module definition to test a manifest file.  This is specifically the process that is mentioned in my book to test a module while developing, before it has been packaged for installation on another portal.  From what I gather, the behavior might change back a bit, but for now the process is slightly different that indicated in my book.  In this blog posting I'll document the changes, and a workaround solution.

tags: DNN, DNN Development

Spell Check for DNN Module Developers

16 Dec

I have talked to many developers that have one common feature request that we would like to see for Visual Studio, Spell Check.  As a developer one of the most troubling things can be minor typo's in code after it has been completed.  Although simple to fix, it can be embarrassing to have a typo that goes out in a module that a client is reviewing or that you put up for sale on SnowCovered.  Well, today I got an email from Chad Nash at DataSprings, and they have a set of tools that are going to help us out on this front from a DNN module perspective.

tags: DNN, Product Review, DNN Development

The Importance of a Consistent Development Environment

29 Sep

I am again traveling this week, in Toronto speaking at Tech Days Canada 2009, and as luck would have it I needed to complete some work on a few custom DotNetNuke modules for clients on a "Urgent" basis.  So this afternoon I darted off to the speaker room to get an internet connection, just recently I re-formatted my laptop to move to Windows 7, one of the main reasons that I needed to re-format the system was to create an environment that matched my primary development machine, today was the first true test of this new configuration.  Thankfully everything worked as expected and all issues were resolved.  In this blog post, I'll explain a bit as to why it is important when working on multiple environments to have consistent system configurations.

tags: .NET 1.1, .NET 2.0, General Tech, .NET 3.5, DNN Development

Performance Tuning DotNetNuke Modules with ANTS Profiler

11 Aug

As I have mentioned in past posts here on this blog and via other communication channels I strongly believe that ANTS profiler which is offered by Red Gate software is a must-have tool for all software developers.  Most recently with my day job I have been working with profiler a lot more than usual and it prompted me to re-visit the concept of profiling within the constructs of a DotNetNuke installation.  I've had many individuals with questions before about, is it possible to profile a DNN module, or how do you set it up.  Well this article will walk through all of the steps necessary to profile a single module within a local installation.

tags: Tutorials, ASP.NET, DNN Development

How To Get Design-Time Support for DNN Controls

04 Aug

 As everyone that is a regular reader of this blog is already aware of I am a big fan of the WAP development model for all DotNetNuke development projects.  Now, one of the most common issues that individuals have reported to me is that "design-time" support is not there for common DotNetNuke user controls that are common to integrate with custom modules.  The controls I'm discussing are the DNN Label, Text Editor, and Url Controls.  Luckly though it is VERY simple to get full design time support for the controls and this article will show you how to accomplish this!

tags: DNN, Tutorials, ASP.NET, DNN Development

DNN Navigation Redirect With Parameters and No Control

08 Jun

When working with DotNetNuke I often find it necessary to do a redirection back to the current page, with additional querystring parameters.  Not actually switching views, but just back to the same page so that some other action could be taken for a specific module.  In the past most of the examples I found used this process.

DotNetNuke.Common.Globals.NavigateUrl(this.TabId) + "?mykey=myvalue"

Which would create a url such as

http://www.mysite.com/MyFolder/Default.aspx?mykey=myvalue

Although a fully functional URL that works 100%, it is not something that can be easily copied, and overall doesn't look all that fancy.  Looking through the functionality of the various NavigateUrl overloads, it didn't seem apparent that there was something that could be used to re-write that type of URL.  Well I missed something using the following code.

DotNetNuke.Common.Globals.NavigateUrl(this.TabId, "", "mykey=myvalue")

From this example we provide the tabId, a blank ControlKey, and then our added parameter value.  We could add additional parameters as well.

This results in a URL similar to the following.

http://www.mysite.com/MyFolder/mykey/myvalue/Default.aspx

Now, this is a fully re-written URL, and something much easier for a person to remember.  I hope this has been helpful!

tags: DNN, DNN Development

Development Environment and Tools Used

22 May

A very common question that I get asked by people is; what tools do you use to complete your development and what type of system do you use.  Now, I believe I have written a bit about this in the past, but I thought I would take some time to go through and give a bit of a detailed overview of what I use for development and why I have selected the hardware and software that I have.  I will cover this in detail from both the hardware and software point of view.

tags: ASP.NET, .NET 1.1, .NET 2.0, General Tech, Productivity Tools, .NET 3.5, C#, DNN Development

Programmatically Creating DNN Roles A Gotcha Moment!

14 May

This is just a quick blog post to hopefully share some helpful information.  Recently when working on a DotNetNuke Authentication Provider for a client I was tasked with syncing roles from the external system into DNN.  Simple enough right?  We can just use the "RoleController" and the "AddRole" method to add the role to the system. Well, that is the process but it doesn't work 100% unless you specify specific items.  The following sections show what I tried, and what actually works, along with a few notes.

tags: DNN Development

Review of SourceGear Vault Source Control Provider

16 Apr

My last blog article "Selecting the Right Source Control Provider" touched on the evaluation criteria that I use when looking for a source control system. This article is a review of sorts of SourceGear's Vault product, my preferred source control system. I'll start by reviewing vault as it relates to the criteria from the previous article, I will then provide my overall feedback on my experience with Vault.

tags: ASP.NET, Product Review, .NET 1.1, .NET 2.0, General Tech, Productivity Tools, .NET 3.5, C#, DNN Development

Selecting the Right Source Control Provider

08 Apr

One of the most common questions that I have been getting recently has been "what source control provider do you use and why?".  This article is the first in a series of two articles about source control.  This article takes a quick look at criteria that I believe is important to consider when it comes to evaluating source control systems for use.  The next article in the series will be a review of the source control system that I use, in relation to the evaluation criteria that I list in this article.

tags: SQL, ASP.NET, .NET 1.1, .NET 2.0, General Tech, .NET 3.5, C#, VB, DNN Development

Creating DotNetNuke SqlDataProvider Files Using SSMS

26 Jan

One of the biggest failure points I see with third-party DotNetNuke modules, including some of my first released modules were failures due to the lack of support for ObjectQualifier or DatabaseOwner values within the SqlDataProvider files.  Although the process to add support for these two tokens is easy to add, it is very hard for those of us that like to test our database structures outside of DotNetNuke before we actually commit to building our modules.  Thankfully, with a bit of research, I have found a way to build SQL Scripts for DotNetNuke using SQL Server Management Studio (SSMS) in a normal fashion and using a simple find/replace operation to bring everything into compliance with DotNetNuke integration.  This post will explore the method that I use to accomplish this.

tags: DNN, Tutorials, SQL, DNN Development

Creating a DotNetNuke User Account From Code

22 Dec

Just recently an issue was brought to my attention that my External Database Provider module when creating users was making it so that notification e-mails could not be sent when assigning roles. So I started looking into the code, and how I was creating a user. The user creation code was something that I have been using for a long time, some code that was first found on a blog or forum post about 2-3 years ago. Not noticing anything wrong with the code, at least from an obvious point of view I started to look into the database to see if there were any differences at the database level. Looking into the users' information I noticed that they were missing their user profile, and then I found out that a few key elements still needed to be set to "fully" create the user. This posting shows you the "Full Code" to insert a user into a DotNetNuke portal from a C# Codebehind, translation into VB should be very simple.

tags: DNN, Tutorials, DNN Development

Using the AJAX Control Toolkit in DotNetNuke

13 Sep

I find that web development projects are requiring more and more AJAX functionality. The bells and whistles that come with AJAX are hard things for many people to live without. One of the more common toolsets to use when working with AJAX items in the .NET environment is the ASP.NET AJAX Control Toolkit. I have found that with VERY minimal effort you can fully implement the toolkit inside a DNN installation and it can even be done WITHOUT modification to the web.config file. This blog entry will provide information on how to incorporate the ASP.NET AJAX Control Toolkit into your project. I will simply discuss the DNN implementation, I am NOT going to actually discuss the usage of any specific control.

tags: DNN Development

Content provided in this blog is provided "AS-IS" and the information should be used at your own discretion.  The thoughts and opinions expressed are the personal thoughts of Mitchel Sellers and do not reflect the opinions of his employer.

Connect with Mitchel

I hope the information here has been helpful. To stay connected you can also subscribe to blog updates via email, contact Mitchel about consulting services, or reach out for assistance via CodeMendor

Content Copyright

Content in this blog is copyright protected.  Re-publishing on other websites is allowed as long as proper credit and backlink to the article is provided.  Any other re-publishing or distribution of this content is prohibited without written permission from Mitchel Sellers.