Does ASP.NET v2 allow you to do the "wrong" thing?
One of the goals of my book was to teach former script people (like me) that the world object-oriented programming was worth understanding and implementing. In thinking about the things that cause a mental block for developers in transition, clearly Visual Studio's codebehind model was one of the problems. Not only did we expect the developer to think of objects and classes (oh my!) in more of an abstract sense, but we also wanted them to think about a system of files (assemblies, codebehind, pages) that were also spread apart in an unfamiliar way. The truth is, if you fought against VS, you could do things "the old way" anyway, it was just a pain.
Now v2 comes along, and we can comfortably put our code right there in the page. The design of an application can still be bad, just as it was in v1.x. I should know... the first port I did of POP Forums put the crap all over the place with no true reuse of code. It was a nightmare, but familiar ground for someone coming from the ASP.old world.
PHP is huge, and it's not going away. It's easy to learn. ASP.NET, as of v2, is also a lot easier to learn. The simplicity of the physical file layout makes it easier for a beginner to get their head around what's going on. The challenge is to get them to the next level, and this is what I've been telling bloggers, authors and publishers for two years now. I feel like no one is listening. You can't start bantering about design patterns with a transitional developer before they even understand what a class is. One does not go from script person to uber-code monkey. There are interim steps. In a world where we use iterative development every day, you'd think people would get that!
I guess what I really mean is, don't jump out there and say, "You're doing it wrong, stupid!" Tell people, "This is a better way to do it, and this is why."