We’re Engage

Your partner in turning your vision into technical excellence.

Start Your Journey With Us →

For over 25 years, we’ve combined our technical expertise with a partnership-focused approach𑁋delivering results that truly speak for themselves.

What truly sets us apart is how we engage with our partners. We take the time to understand what matters most to them, which is why every approach we take is uniquely tailored to their specific solution.

Discovery & Strategy

We kick off every project by working closely with you and your team in a discovery meeting to understand your vision and needs. Depending on the complexity and scale of our proposed solution, we’ll put together a team that includes project managers, designers, developers, or analysts, all tailored to your specific project. We’ll then present those custom solutions, discuss timelines, and clarify data requirements to make sure everyone is aligned from the start.

User Experience Design

Our design process is rooted in understanding your users and their behaviors. We gather user insights through research, interviews, and questionnaires which inform our design decisions. By focusing on user-centered and intentional designs, we create experiences that resonate with your audience.

Software Development

Our team works closely with you to create a solution that is both scalable and cost-effective. We keep the lines of communication open to ensure we're getting quick feedback from you at every stage. This allows us to continuously improve the solution and guarantee that we deliver the best possible results.

Continuous Optimization

As your partner, we view your solution as a long-term asset that we've designed to evolve alongside your growing needs. Projects typically unfold in multiple phases with each phase designed to optimize performance and ensure lasting success. Your dedicated team will equip you with actionable insights and best practices to keep you informed and supported with regular updates and performance improvements.

“Unlike large software companies where you’re just a number, Engage is a partner that listens, communicates, and adapts to our needs—not just for development, but for the years to come. That’s exactly what we were looking for, and we found it in Engage.”

Matt Wells, Vice President Mid-west Truckers Association Inc

Latest News

DotNetNuke Gotcha: Upgrading DotNetNuke Modules

I was recently tasked with investigating a mysterious error on a customer's site, which I finally tracked down to an oversight in the upgrade process of a DotNetNuke module.  The error threw up a YSOD, (though in later testing on a different site, it also showed up in a regular DNN red triangle error message), with an error message like "Multiple controls with the same ID 'ctr376' were found. FindControl requires that controls have unique IDs."  Talking it through with Chris, we figured out that there were two entries in this module definition for the same control key.  So, when we tried to go to the Edit control, DNN was attempting to load two different .ascx controls in the Admin control, which caused the whole thing to kind of blow up and die.

So, how did we get two controls registered for the same control key?  The answer was obvious enough, probably because it's bit me before: upgrades.  When you upgrade a module in DNN, the installer adds any new control definitions that it finds in your module's manifest file.  It doesn't, however, remove control definitions that it doesn't find any more.  This means that if you rename a ControlKey, or, as in this case, you rename a control itself, you'll have duplicate entries pointing to incorrect information.  Most of the time this isn't too much of an issue, but sometimes it'll cause mysterious errors that take up your morning before you figure them out.

The solution: Be aware when you are renaming or removing any entries from your module's manifest.  When you find yourself renaming, make sure that you add a line to that version's SQL script to remove the old entry from the database.  At the very least this keeps your module definition clean, and it also avoids nasty, hard-to-track-down bugs.  This would look something like

DELETE {databaseOwner}[{objectQualifier}ModuleControls]
    WHERE ControlKey 'Edit'
        AND ControlSrc 'DesktopModules/EngageSample/Edit.ascx'

One other note, if you rename or remove a control from your module, there's also a mechanism to have those removed from the site upon upgrade.  If you add a text file with the name of the version to your module (and to your manifest's files section), DNN will look for any files listed in that file, and delete them if it finds them.  For example, if I rename Edit.ascx to EditSample.ascx in version 02.02.05 of a module, I can add 02.02.05.txt to the module package and manifest.  This file would contain one line, "DesktopModules/EngageSample/Edit.ascx" and I could add additional lines for other files, including files in the bin folder, if I needed to.  Upon uploading the new 02.02.05 module package, no more Edit.ascx.

These two techniques, applied together, can help keep your module nice and tidy as you upgrade, and keep all of those mysterious, day-stealing errors away.

Hope it helps!

Turn Your Vision into Technical Excellence

Partner With Us →
© 1999-2025 Engage