When you write server code in the ASPX, it is compiled. It's just not compiled ahead of time. All .net code is compiled to Microsoft Intermediate Language (MSIL) which is then Just-In-Time (JIT) compiled to machine specific run-time code. By compiling in visual studio using code-behind files, you are manually executing the compile to MSIL (into the DLL). When IIS needs to execute the code, it still has to JIT compile from the DLL into machine code. It also compiles the ASPX page into a temporary DLL (in MSIL) when get's JIT compiled. Under both scenarios, the ASPX is getting compiled, you've just helped it by moving some of the server code into a precompiled DLL.
I almost exclusively use the code-behind model. It maintains the visual/logic separation or your markup and server code but more importantly it allows the classes within a project to work together. For a web application of any reasonable complexity you would need to use the code behind model. In order for page classes to utilize other classes they must all live within an assembly that contains them or can access them by reference to other assemblies. A self contained ASPX with inline server code lives as an isolated class entity making it very difficult to reference outside resource (like other classes).
What exactly do you mean by "more controlled code"? Is
VB.net code written in-line with the ASPX markup "out of control"?
Peter
------------------------------------------------------
Work smarter, not harder.