Tutorial 2: Code-Behind with VS 2005 Web Application Projects
        
        The below tutorial helps explain the code-behind model and project structure of 
        pages built within VS 2005 Web Application Projects. Please make sure that you have
        already completed Tutorial 1: Building 
        Your First Web Application Project before reviewing this one.
                
        Some Background on the VS 2003 Code-behind Model for ASP.NET Applications
        
        
            ASP.NET Pages in a VS 2003 web project have two files associated
            with them -- one is a .aspx file that contains the html and declarative server
            control markup, and the other is a .cs "code-behind" file that contains the UI logic
            for the page:
        
       
        
       
        
        Control markup declarations are defined within the .aspx file itself.  For example:
        
        
        
        
            And corresponding protected field declarations are added in the .cs code-behind class that
            match the name and type of controls defined within the .aspx file. For example:
        
        
        
            ASP.NET does the work of wiring up a reference from this code-behind field declaration
            to point to the declared control in the .aspx file at runtime.
            
            Developers can then program directly against this control within their code-behind
            file.  
            
            
        
            VS 2003 automatically adds/updates these protected control field declarations at the top of the
            code-behind file (these are updated everytime a developer switches into WYSIWYG design-view):
        
        
        
        VS 2003 also then maintains a hidden region block inside the code-behind of tool-generated code
        to register event-handlers and keep them in sync with the design-surface:
        
        
        
        There are two common complaints/problems with this:
        
            1) VS 2003 is adding/deleting code in the same file where the developer is authoring
            their own code -- and accidental conflicts/mistakes do end up happening (for example:
            some code that the developer writes can sometimes get modified or deleted by VS). 
            The tool-generated hidden block above is also a little "messy" for some people's tastes. 
        
        
            2) The control-declarations are only updated when a developer using VS 2003 activates
            the WYSIWYG page designer.  If a developer is only using the source-editor to customize
            the page, they will not get control updates, and will instead have to add these
            control declarations manually (which is a pain).
        
        VS 2005 Code-behind Model for ASP.NET Applications
        VS 2005 uses a code-behind model conceptually the same as VS 2003.  Specifically, each .aspx
        page continues to inherit from a code-behind class that contains protected control field references
        for each control in the .aspx page: 
        
        
            What is different between VS 2003 and VS 2005 is that Visual Studio no longer injects
            its tool-specific wire-up code in the developer's code-behind file.  Instead,
            it takes advantage of a new language feature in C# and VB called "partial types"
            (or partial classes) to split the code-behind implementation across two files.  One
            of these partial class files is the developer-owned code-behind file that contains developer-written
            event-handlers and code for the page.  The other partial
            class file is then a tool-generated/maintained
            file that contains the protected
            control field declarations and the other design-time code that Visual Studio requires. 
            The benefit of splitting them out into two separate files at design-time is that
            it ensures that the code that VS creates and maintains never interferes (or deletes)
            code that a developer writes.  At compile-time, these files are compiled together
            and generate a single code-behind class. 
        
            With the VS 2005 Web Application project model, the design-time partial class is
            generated and persisted on disk by VS 2005.  This new
            design-time partial-class file has the
            filename naming pattern: PageName.aspx.designer.cs.  If you expand any
            new page created within your VS 2005 Web Application project, you can see this file
            listed under the associated Page.aspx file along with the
            developer-owned code-behind file:
        
        
        
        
            If you open up the code-behind file of the page (Default.aspx.cs), you'll then see the code-behind
            logic of the page -- which contains all of the code and event handlers that a developer
            writes (and no tool-generated "code-spit" content -- which means it stays very clean):
        
        
        
               
        If you open the Default.aspx.designer.cs file, you'll then see the design-time
        code of the page -- which contains the field declarations for controls within the .aspx
        page:
        
        
        
        Because the MyWebProject._Default class is marked as "partial" in both of the above 
        two files, the compiler will merge them into a single generated class at compile-time.
        This means that any variable, method or field generated in the default.aspx.designer.cs file can be 
        used from the default.aspx.cs code-behind file (just as if it was declared in the code-behind
        file itself).  For example, within the Page_Load event handler we could easily add the below code
        that uses the "Label1" and "Calendar1" control:
        
        
        
        This will compile clean and run just fine -- because the "Label1" and "Calendar1" field references have been
        defined within the default.aspx.designer.cs file.
        
        
            When you do a build inside a VS 2005 Web Application project, all pages, user-controls, 
            master pages (and their associated code-behind files+design-time generated files), along with all
            other standalone classes within the project are compiled into a single assembly.  This 
            is the same behavior as with VS 2003.
        
       
        Click here to go to the next tutorial.