It seems everyone is writing about the differences between MonoRail and WebForms these days. Not to be left out, I’ll throw a few of my own comments into the mix.
I think that one’s attraction (or hatred) of MonoRail or ASP.Net’s WebForms is based on their programming background. (At least, it is in my case, and that’s at least one person, so that statement can’t be totally wrong.)
- People who come from the old days of Visual Basic programming or whose experience with web programming is WebForms and ASP.Net will feel comfortable with ASP.Net.
For all its flaws, WebForms has a lot of power, but the power comes at a price. Web forms does a lot for you, which is its benefit and its bane. If you want total control of your application, you’ll be frustrated with WebForms. MonoRail leaves a lot of things in your hands (particularly on the presentation side), and tries to help you do things rather than do things for you. That’s a big difference.
One of the reasons for the popularity of ASP.Net and WebForms (aside from Microsoft, of course) are the many web controls that come built-in or that you can buy to extend your application’s capabilities without having to write your own complex code. The same issues described above, however, still apply. Whenever you rely on a web control to do a complex task for you, you’re sacrificing some control.
That’s not to say there are no "web-control-like" solutions for MonoRail. There are many community-developed scripts and code blocks that can be used to extend the functionality of a web site built on MonoRail, providing features similar to web controls with less mysterious baggage. Consider the following.
- Prototype, script.aculo.us and Behaviour
- Really Easy Field Validation
- FreeStyle menus
- Cascading popup menus
- Bubble tooltips
- Control.Tabs or Fatabulous
- Better date input
I think you get the idea. All of the above are open source projects that would be difficult to use in a typical web forms project. Sure, with MonoRail you can’t use components from vendors like ComponentArt (which are very good), but I think that’s more than an adequate trade-off. And, of course, any one of the tools above can provide the same power/control trade-off of a web control, but in my experience, it is not nearly on the level of a traditional ASP.Net control.
For all the time I’ve spent implementing things on MonoRail that seem "out of the box" in WebForms, it’s no worse than the time wasted trying to figure out why a GridView doesn’t do what I expect it to, or trying to get a GridView to provide markup that it simply can’t. And I’d rather spend time learning than time debugging any day.