Back in the dark days of .NET 1.1 I created (I guess like everyone) a sort of MVC system for an application that went like this.
A page was made to be a sort of 'fake' master. This had some plumbing to show menus, scripts, styles, etc.
The 'views' were individual user controls.
There was a table with information about each view. For example, 'Product' would load ~/Controls/Product.ascx
into a placeholder. The table also had a field that contained the type name of the model class (as if). Each model implemented a well-known interface. This class was instantiated using Activator.CreateInstance()
and called to initialize, and was then passed to the control itself (inversion of control?). The control then called various methods to get datasets or whatnot. The interface itself was normalized to have the usual CRUD methods (Read/Write/List/Delete). There was also DAL/ORM layer below this.
It wasn't pretty, but it worked well. It was easy to test and develop against, and most developers that came on board would catch on fairly quickly. Most of all, it was relatively simple to create.