In the normal code-behind technique, your page inherits from this regular class you create as the code-behind class. I’m implementing a template feature in my project, and most templates will be just markup without code, so there is no need for a code-behind class; however, I wanted to make sure every template implemented two properties, so I thought, “I’ll use an abstract class”. I created an abstract class and inherited my pages from it. It worked great, but I had a problem with the VS.NET designer. I can view the Template page in the designer because “the designer can’t create an instance of an abstract class”. Then I thought, “what benefit am I getting by making this base class abstract? Not much. If I make it a regular class, I can implement virtual, default values. So that’s what I did.
Lesson learned: Code-behind classes need to be non-abstract so the designer can function properly.