I would add that, over the years, the whole .NET framework has grown to a over-engineered beast. It’s coherent and consistent, but still a beast. So several parts of the framework simply goes too far on the Object Orientation and builds a excess of classes, realtions, patterns and so on, sometimes making very painful the decision on how to correctly implement things. That’s why you feel so liberated when trying some other alternatives like Ruby on Rails (which, I have to say, seems to be growing too much recently).
Using ASP.NET also drives you to blindly use those architectures, patterns and practices, that Microsoft loves, without realizing that usually simpler is better, and without giving a second thought on how and why you are doing what you are doing (LINQ, three tier architecture, and so on). I’ve seen horrible real-world examples of this.
On the other hand, the .NET framework has some very interesting features like being a complete infrastucture, and C# is evolving in very nice ways, like the new dynamic features. Good things can be done with .NET, but you have to question the “correct ways” as presented by Microsoft.