You are previewing Professional ASP.NET 3.5 SP1 Edition: In C# and VB.
O'Reilly logo
Professional ASP.NET 3.5 SP1 Edition: In C# and VB

Book Description

Professional ASP.NET 3.5 SP1 In C# and VB

ASP.NET 3.5 brings the power of Visual Studio® 2008 along with the multitude of language improvements in C# 2008 and Visual Basic® 2008 as well as powerful new technology called LINQ, together with the ASP.NET 2.0 Framework you already know and love. Packed with valuable coverage of ASP.NET 3.5 SP1, this essential resource offers both C# and VB examples throughout the book, and shares new and updated content on the ADO.NET Entity Framework, ADO.NET Dynamic Data, and ADO.NET Data Services.

While ASP.NET 3.5 boasts server controls like the ListView and the incredibly flexible GridView, it also includes advancements in AJAX technology combined with JavaScript® debugging features in Visual Studio 2008. With this book, a stellar author team covers the new controls in the AJAX toolbox, the back button history, and script combining, and they also examine the new capabilities of WCF including changes to DataContractSerializer. In addition, the accompanying CD-ROM features the entire book in PDF format.

What you will learn from this book

  • The concepts underlying the server control and its pivotal role in ASP.NET development

  • How to create templated ASP.NET pages using the master page feature

  • How to work with data from enterprise databases including SQL Server®

  • Ways to debug, package, and deploy ASP.NET applications, monitor their health and performance, and handle errors

  • How to retrieve, update, and delete data quickly and logically using LINQ with side-by-side examples comparing LINQ to existing techniques

  • Ways to localize your web site in multiple languages for a world-wide audience

  • Methods for adding AJAX capabilities to your ASP.NET applications

  • The many benefits of the new data access additions

  • Ways to use and extend the Provider Model for accessing data stores, processes, and more

  • What freeware tools you need in Scott Hanselman's ASP.NET Ultimate Developer Tools appendix

Who this book is for

This book is for programmers and developers who are looking to make the transition to ASP.NET 3.5 SP1 with Visual Studio 2008 and either C# 3.0 (2008) or Visual Basic 9 (2008).

CD-ROM includes the full book in PDF format and a selection of 7 Wrox Blox mini e-books including:

  1. Internet Explorer 8 and Its Impact on Your ASP.NET Web Sites

  2. Jumping from ASP.NET to Silverlight 2

  3. Leverage LINQ in ASP.NET 3.5 Projects

Table of Contents

  1. Copyright
  2. About the Authors
  3. Credits
  4. Acknowledgments
  5. Introduction
    1. A Little Bit of History
    2. The Goals of ASP.NET
      1. Developer Productivity
      2. Performance and Scalability
    3. Additional Features of ASP.NET 3.5 and 3.5 SP1
      1. New Developer Infrastructures
        1. Membership and Role Management
        2. Personalization
        3. The ASP.NET Portal Framework
        4. Site Navigation
        5. The ADO.NET Entity Framework
        6. ASP.NET Dynamic Data
        7. ADO.NET Data Services
      2. The ASP.NET Compilation System
      3. Health Monitoring for Your ASP.NET Applications
      4. Reading and Writing Configuration Settings
      5. Localization
      6. Expanding on the Page Framework
        1. Master Pages
        2. Themes
      7. Objects for Accessing Data
    4. What You Need for ASP.NET 3.5 SP1
    5. Who Should Read This Book?
    6. What This Book Covers
    7. Conventions
    8. Source Code
    9. Errata
    10. p2p.wrox.com
  6. 1. Application and Page Frameworks
    1. 1.1. Application Location Options
      1. 1.1.1. Built-In Web Server
      2. 1.1.2. IIS
      3. 1.1.3. FTP
      4. 1.1.4. Web Site Requiring FrontPage Extensions
    2. 1.2. The ASP.NET Page Structure Options
      1. 1.2.1. Inline Coding
      2. 1.2.2. Code-Behind Model
    3. 1.3. ASP.NET 3.5 Page Directives
      1. 1.3.1. @Page
      2. 1.3.2. @Master
      3. 1.3.3. @Control
      4. 1.3.4. @Import
      5. 1.3.5. @Implements
      6. 1.3.6. @Register
      7. 1.3.7. @Assembly
      8. 1.3.8. @PreviousPageType
      9. 1.3.9. @MasterType
      10. 1.3.10. @OutputCache
      11. 1.3.11. @Reference
    4. 1.4. ASP.NET Page Events
    5. 1.5. Dealing with PostBacks
    6. 1.6. Cross-Page Posting
    7. 1.7. ASP.NET Application Folders
      1. 1.7.1. \App_Code Folder
      2. 1.7.2. \App_Data Folder
      3. 1.7.3. \App_Themes Folder
      4. 1.7.4. \App_GlobalResources Folder
      5. 1.7.5. \App_LocalResources
      6. 1.7.6. \App_WebReferences
      7. 1.7.7. \App_Browsers
    8. 1.8. Compilation
    9. 1.9. Build Providers
      1. 1.9.1. Using the Built-in Build Providers
      2. 1.9.2. Using Your Own Build Providers
    10. 1.10. Global.asax
    11. 1.11. Working with Classes Through VS2008
    12. 1.12. Summary
  7. 2. ASP.NET Server Controls and Client-Side Scripts
    1. 2.1. ASP.NET Server Controls
      1. 2.1.1. Types of Server Controls
      2. 2.1.2. Building with Server Controls
        1. 2.1.2.1. Working with Server Controls on a Design Surface
        2. 2.1.2.2. Coding Server Controls
      3. 2.1.3. Working with Server Control Events
    2. 2.2. Applying Styles to Server Controls
      1. 2.2.1. Examining the Controls' Common Properties
      2. 2.2.2. Changing Styles Using Cascading Style Sheets
        1. 2.2.2.1. Applying Styles Directly to HTML Elements
        2. 2.2.2.2. Working with the Visual Studio Style Builder
        3. 2.2.2.3. Creating External StyleSheets
        4. 2.2.2.4. Creating Internal Stylesheets
    3. 2.3. HTML Server Controls
      1. 2.3.1. Looking at the HtmlControl Base Class
      2. 2.3.2. Looking at the HtmlContainerControl Class
      3. 2.3.3. Looking at All the HTML Classes
      4. 2.3.4. Using the HtmlGenericControl Class
    4. 2.4. Manipulating Pages and Server Controls with JavaScript
      1. 2.4.1. Using Page.ClientScript.RegisterClientScriptBlock
      2. 2.4.2. Using Page.ClientScript.RegisterStartupScript
      3. 2.4.3. Using Page.ClientScript.RegisterClientScriptInclude
    5. 2.5. Client-Side Callback
      1. 2.5.1. Comparing a Typical Postback to a Callback
      2. 2.5.2. Using the Callback Feature — A Simple Approach
      3. 2.5.3. Using the Callback Feature with a Single Parameter
      4. 2.5.4. Using the Callback Feature — A More Complex Example
    6. 2.6. Summary
  8. 3. ASP.NET Web Server Controls
    1. 3.1. An Overview of Web Server Controls
    2. 3.2. The Label Server Control
    3. 3.3. The Literal Server Control
    4. 3.4. The TextBox Server Control
      1. 3.4.1. Using the Focus() Method
      2. 3.4.2. Using AutoPostBack
      3. 3.4.3. Using AutoCompleteType
    5. 3.5. The Button Server Control
      1. 3.5.1. The CausesValidation Property
      2. 3.5.2. The CommandName Property
      3. 3.5.3. Buttons That Work with Client-Side JavaScript
    6. 3.6. The LinkButton Server Control
    7. 3.7. The ImageButton Server Control
    8. 3.8. The HyperLink Server Control
    9. 3.9. The DropDownList Server Control
    10. 3.10. Visually Removing Items from a Collection
    11. 3.11. The ListBox Server Control
      1. 3.11.1. Allowing Users to Select Multiple Items
      2. 3.11.2. An Example of Using the ListBox Control
      3. 3.11.3. Adding Items to a Collection
    12. 3.12. The CheckBox Server Control
      1. 3.12.1. How to Determine Whether Check Boxes Are Checked
      2. 3.12.2. Assigning a Value to a Check Box
      3. 3.12.3. Aligning Text Around the Check Box
    13. 3.13. The CheckBoxList Server Control
    14. 3.14. The RadioButton Server Control
    15. 3.15. The RadioButtonList Server Control
    16. 3.16. Image Server Control
    17. 3.17. Table Server Control
    18. 3.18. The Calendar Server Control
      1. 3.18.1. Making a Date Selection from the Calendar Control
      2. 3.18.2. Choosing a Date Format to Output from the Calendar
      3. 3.18.3. Making Day, Week, or Month Selections
      4. 3.18.4. Working with Date Ranges
      5. 3.18.5. Modifying the Style and Behavior of Your Calendar
    19. 3.19. AdRotator Server Control
    20. 3.20. The Xml Server Control
    21. 3.21. Panel Server Control
    22. 3.22. The PlaceHolder Server Control
    23. 3.23. BulletedList Server Control
    24. 3.24. HiddenField Server Control
    25. 3.25. FileUpload Server Control
      1. 3.25.1. Uploading Files Using the FileUpload Control
      2. 3.25.2. Giving ASP.NET Proper Permissions to Upload Files
      3. 3.25.3. Understanding File Size Limitations
      4. 3.25.4. Uploading Multiple Files from the Same Page
      5. 3.25.5. Placing the Uploaded File into a Stream Object
      6. 3.25.6. Moving File Contents from a Stream Object to a Byte Array
    26. 3.26. MultiView and View Server Controls
    27. 3.27. Wizard Server Control
      1. 3.27.1. Customizing the Side Navigation
      2. 3.27.2. Examining the AllowReturn Attribute
      3. 3.27.3. Working with the StepType Attribute
      4. 3.27.4. Adding a Header to the Wizard Control
      5. 3.27.5. Working with the Wizard's Navigation System
      6. 3.27.6. Utilizing Wizard Control Events
      7. 3.27.7. Using the Wizard Control to Show Form Elements
    28. 3.28. ImageMap Server Control
    29. 3.29. Summary
  9. 4. Validation Server Controls
    1. 4.1. Understanding Validation
    2. 4.2. Client-Side versus Server-Side Validation
    3. 4.3. ASP.NET Validation Server Controls
      1. 4.3.1. Validation Causes
      2. 4.3.2. The RequiredFieldValidator Server Control
        1. 4.3.2.1. Looking at the Results Generated
        2. 4.3.2.2. Using the InitialValue Property
        3. 4.3.2.3. Disallowing Blank Entries and Requiring Changes at the Same Time
        4. 4.3.2.4. Validating Drop-Down Lists with the RequiredFieldValidator Control
      3. 4.3.3. The CompareValidator Server Control
        1. 4.3.3.1. Validating Against Other Controls
        2. 4.3.3.2. Validating Against Constants
      4. 4.3.4. The RangeValidator Server Control
      5. 4.3.5. The RegularExpressionValidator Server Control
      6. 4.3.6. The CustomValidator Server Control
        1. 4.3.6.1. Using Client-Side Validation
        2. 4.3.6.2. Using Server-Side Validation
        3. 4.3.6.3. Using Client-Side and Server-Side Validation Together
      7. 4.3.7. The ValidationSummary Server Control
    4. 4.4. Turning Off Client-Side Validation
    5. 4.5. Using Images and Sounds for Error Notifications
    6. 4.6. Working with Validation Groups
    7. 4.7. Summary
  10. 5. Working with Master Pages
    1. 5.1. Why Do You Need Master Pages?
    2. 5.2. The Basics of Master Pages
    3. 5.3. Coding a Master Page
    4. 5.4. Coding a Content Page
      1. 5.4.1. Mixing Page Types and Languages
      2. 5.4.2. Specifying Which Master Page to Use
      3. 5.4.3. Working with the Page Title
      4. 5.4.4. Working with Controls and Properties from the Master Page
    5. 5.5. Specifying Default Content in the Master Page
    6. 5.6. Programmatically Assigning the Master Page
    7. 5.7. Nesting Master Pages
    8. 5.8. Container-Specific Master Pages
    9. 5.9. Event Ordering
    10. 5.10. Caching with Master Pages
    11. 5.11. ASP.NET AJAX and Master Pages
    12. 5.12. Summary
  11. 6. Themes and Skins
    1. 6.1. Using ASP.NET Themes
      1. 6.1.1. Applying a Theme to a Single ASP.NET Page
      2. 6.1.2. Applying a Theme to an Entire Application
      3. 6.1.3. Removing Themes from Server Controls
      4. 6.1.4. Removing Themes from Web Pages
      5. 6.1.5. Understanding Themes When Using Master Pages
      6. 6.1.6. Understanding the StyleSheetTheme Attribute
    2. 6.2. Creating Your Own Themes
      1. 6.2.1. Creating the Proper Folder Structure
      2. 6.2.2. Creating a Skin
      3. 6.2.3. Including CSS Files in Your Themes
      4. 6.2.4. Having Your Themes Include Images
    3. 6.3. Defining Multiple Skin Options
    4. 6.4. Programmatically Working with Themes
      1. 6.4.1. Assigning the Page's Theme Programmatically
      2. 6.4.2. Assigning a Control's SkinID Programmatically
    5. 6.5. Themes, Skins, and Custom Controls
    6. 6.6. Summary
  12. 7. Data Binding in ASP.NET 3.5
    1. 7.1. Data Source Controls
      1. 7.1.1. SqlDataSource Control
        1. 7.1.1.1. Configuring a Data Connection
        2. 7.1.1.2. Data Source Mode Property
        3. 7.1.1.3. Filtering Data Using SelectParameters
        4. 7.1.1.4. Conflict Detection Property
        5. 7.1.1.5. SqlDataSource Events
        6. 7.1.1.6. Using the Data Source Events to Handle Database Errors
        7. 7.1.1.7. Using the SqlDataSource with Oracle
      2. 7.1.2. LINQ Data Source Control
        1. 7.1.2.1. Query Operations
          1. 7.1.2.1.1. Defining a Where Clause
          2. 7.1.2.1.2. Defining an OrderBy Clause
          3. 7.1.2.1.3. Grouping Query Data
        2. 7.1.2.2. Data Concurrency
        3. 7.1.2.3. LinqDataSource Events
      3. 7.1.3. AccessDataSource Control
      4. 7.1.4. XmlDataSource Control
      5. 7.1.5. ObjectDataSource Control
        1. 7.1.5.1. ObjectDataSource Events
      6. 7.1.6. SiteMapDataSource Control
    2. 7.2. Configuring Data Source Control Caching
    3. 7.3. Storing Connection Information
    4. 7.4. Using Bound List Controls with Data Source Controls
      1. 7.4.1. GridView
        1. 7.4.1.1. Displaying Data with the GridView
        2. 7.4.1.2. Using the EmptyDataText and EmptyDataTemplate Properties
        3. 7.4.1.3. Enabling GridView Column Sorting
        4. 7.4.1.4. Enabling the GridView Pager
        5. 7.4.1.5. Customizing Columns in the GridView
        6. 7.4.1.6. Using the TemplateField Column
      2. 7.4.2. Editing GridView Row Data
        1. 7.4.2.1. Handling Errors When Updating Data
        2. 7.4.2.2. Using the TemplateField's EditItemTemplate
      3. 7.4.3. Deleting GridView Data
        1. 7.4.3.1. Other GridView Formatting Features
      4. 7.4.4. DetailsView
        1. 7.4.4.1. Customizing the DetailsView Display
        2. 7.4.4.2. Using the DetailsView and GridView Together
        3. 7.4.4.3. SelectParameters versus FilterParameters
      5. 7.4.5. Inserting, Updating, and Deleting Data Using DetailsView
      6. 7.4.6. ListView
        1. 7.4.6.1. Getting Started with the ListView
          1. 7.4.6.1.1. ListView Templates
          2. 7.4.6.1.2. ListView Data Item Rendering
          3. 7.4.6.1.3. ListView Group Rendering
          4. 7.4.6.1.4. Using the EmptyItemTemplate
        2. 7.4.6.2. ListView Data Binding and Commands
        3. 7.4.6.3. ListView Paging and the Pager Control
      7. 7.4.7. FormView
    5. 7.5. Other Databound Controls
      1. 7.5.1. DropDownList, ListBox, RadioButtonList, and CheckBoxList
      2. 7.5.2. TreeView
      3. 7.5.3. Ad Rotator
      4. 7.5.4. Menu
    6. 7.6. Inline Data-Binding Syntax
      1. 7.6.1. Data-Binding Syntax Changes
      2. 7.6.2. XML Data Binding
    7. 7.7. Expressions and Expression Builders
    8. 7.8. Summary
  13. 8. Data Management with ADO.NET
    1. 8.1. Basic ADO.NET Features
      1. 8.1.1. Common ADO.NET Tasks
        1. 8.1.1.1. Selecting Data
        2. 8.1.1.2. Inserting Data
        3. 8.1.1.3. Updating Data
        4. 8.1.1.4. Deleting Data
      2. 8.1.2. Basic ADO.NET Namespaces and Classes
      3. 8.1.3. Using the Connection Object
      4. 8.1.4. Using the Command Object
      5. 8.1.5. Using the DataReader Object
      6. 8.1.6. Using Data Adapter
      7. 8.1.7. Using Parameters
      8. 8.1.8. Understanding DataSet and DataTable
        1. 8.1.8.1. Deciding When to Use a DataSet
        2. 8.1.8.2. The Typed DataSet
      9. 8.1.9. Using Oracle as Your Database with ASP.NET 3.5
    2. 8.2. The DataList Server Control
      1. 8.2.1. Looking at the Available Templates
      2. 8.2.2. Working with ItemTemplate
      3. 8.2.3. Working with Other Layout Templates
      4. 8.2.4. Working with Multiple Columns
    3. 8.3. The ListView Server Control
      1. 8.3.1. Looking at the Available Templates
      2. 8.3.2. Using the Templates
      3. 8.3.3. Creating the Layout Template
      4. 8.3.4. Creating the ItemTemplate
      5. 8.3.5. Creating the EditItemTemplate
      6. 8.3.6. Creating the EmptyItemTemplate
      7. 8.3.7. Creating the InsertItemTemplate
      8. 8.3.8. The Results
    4. 8.4. Using Visual Studio for ADO.NET Tasks
      1. 8.4.1. Creating a Connection to the Data Source
      2. 8.4.2. Working with a Dataset Designer
      3. 8.4.3. Using the CustomerOrders DataSet
    5. 8.5. Asynchronous Command Execution
      1. 8.5.1.
        1. 8.5.1.1. Asynchronous Methods of the SqlCommand Class
        2. 8.5.1.2. IAsyncResult Interface
        3. 8.5.1.3. AsyncCallback
        4. 8.5.1.4. WaitHandle Class
        5. 8.5.1.5. Approaches of Asynchronous Processing in ADO.NET
          1. 8.5.1.5.1. The Poll Approach
          2. 8.5.1.5.2. The Wait Approach
          3. 8.5.1.5.3. Using Multiple Wait Handles
          4. 8.5.1.5.4. The Callback Approach
        6. 8.5.1.6. Canceling Asynchronous Processing
      2. 8.5.2. Asynchronous Connections
    6. 8.6. Summary
  14. 9. Querying with LINQ
    1. 9.1. LINQ to Objects
      1. 9.1.1. Traditional Query Methods
      2. 9.1.2. Replacing Traditional Queries with LINQ
        1. 9.1.2.1. Basic LINQ Queries and Projections
          1. 9.1.2.1.1. Delayed Execution
        2. 9.1.2.2. Query Filters
      3. 9.1.3. Data Grouping
      4. 9.1.4. Other LINQ Operators
      5. 9.1.5. LINQ Joins
      6. 9.1.6. Paging Using LINQ
    2. 9.2. LINQ to XML
      1. 9.2.1. Joining XML Data
    3. 9.3. LINQ to SQL
      1. 9.3.1. Insert, Update, and Delete Queries through LINQ
        1. 9.3.1.1. Insert Data Using LINQ
        2. 9.3.1.2. Using Stored Procedures to Insert Data
        3. 9.3.1.3. Update Data Using LINQ
          1. 9.3.1.3.1. Handling Data Concurrency
        4. 9.3.1.4. Deleting Data Using LINQ
      2. 9.3.2. Extending LINQ
    4. 9.4. Summary
  15. 10. Working with XML and LINQ to XML
    1. 10.1. The Basics of XML
      1. 10.1.1. The XML InfoSet
      2. 10.1.2. XSD–XML Schema Definition
      3. 10.1.3. Editing XML and XML Schema in Visual Studio 2008
    2. 10.2. XmlReader and XmlWriter
      1. 10.2.1. Using XDocument Rather Than XmlReader
      2. 10.2.2. Using Schema with XmlTextReader
      3. 10.2.3. Validating Against a Schema Using an XDocument
      4. 10.2.4. Including NameTable Optimization
      5. 10.2.5. Retrieving .NET CLR Types from XML
      6. 10.2.6. ReadSubtree and XmlSerialization
      7. 10.2.7. Creating CLR Objects from XML with LINQ to XML
      8. 10.2.8. Creating XML with XmlWriter
      9. 10.2.9. Creating XML with LINQ for XML
        1. 10.2.9.1. Bridging XmlSerializer and LINQ to XML
      10. 10.2.10. Improvements for XmlReader and XmlWriter in 2.0
    3. 10.3. XmlDocument and XPathDocument
      1. 10.3.1. Problems with the DOM
      2. 10.3.2. XPath, the XPathDocument, and XmlDocument
        1. 10.3.2.1. Using XPath with XDocuments in LINQ for XML
    4. 10.4. DataSets
      1. 10.4.1. Persisting DataSets to XML
      2. 10.4.2. XmlDataDocument
    5. 10.5. The XmlDataSource Control
    6. 10.6. XSLT
      1. 10.6.1. XslCompiledTransform
        1. 10.6.1.1. The new XSLTC.exe Command-Line Compiler
      2. 10.6.2. XSLT Debugging
    7. 10.7. Databases and XML
      1. 10.7.1. FOR XML AUTO
      2. 10.7.2. SQL Server 2005 and the XML Data Type
        1. 10.7.2.1. Generating Custom XML from SQL 2005
        2. 10.7.2.2. Adding a Column of Untyped XML
        3. 10.7.2.3. Adding an XML Schema
        4. 10.7.2.4. Associating a XML Typed Column with a Schema
        5. 10.7.2.5. Inserting XML Data into an XML Column
    8. 10.8. Summary
  16. 11. IIS7
    1. 11.1. Modular Architecture of IIS7
      1. 11.1.1. IIS-WebServer
        1. 11.1.1.1. IIS-CommonHttpFeatures
        2. 11.1.1.2. IIS-ApplicationDevelopment
        3. 11.1.1.3. IIS-HealthAndDiagnostics
        4. 11.1.1.4. IIS-Security
        5. 11.1.1.5. IIS-Performance
      2. 11.1.2. IIS-WebServerManagementTools
      3. 11.1.3. IIS-FTPPublishingService
    2. 11.2. Extensible Architecture of IIS7
    3. 11.3. IIS7 and ASP.NET Integrated Pipeline
    4. 11.4. Building a Customized Web Server
      1. 11.4.1. Update Dependencies
      2. 11.4.2. Installing IIS7 on Windows Vista
      3. 11.4.3. Installing IIS7 on Windows Server 2008
      4. 11.4.4. Command-Line Setup Options
      5. 11.4.5. Unattended Setup Option
      6. 11.4.6. Upgrade
    5. 11.5. Internet Information Services (IIS) Manager
      1. 11.5.1. Application Pools
      2. 11.5.2. Web Sites
      3. 11.5.3. Hierarchical Configuration
      4. 11.5.4. Delegation
    6. 11.6. Moving an Application from IIS6 to IIS7
    7. 11.7. Summary
  17. 12. Introduction to the Provider Model
    1. 12.1. Understanding the Provider
    2. 12.2. The Provider Model in ASP.NET 3.5
      1. 12.2.1. Setting Up Your Provider to Work with Microsoft SQL Server 7.0, 2000, 2005, or 2008
        1. 12.2.1.1. The ASP.NET SQL Server Setup Wizard Command-Line Tool
        2. 12.2.1.2. The ASP.NET SQL Server Setup Wizard GUI Tool
        3. 12.2.1.3. Connecting Your Default Provider to a New SQL Server Instance
      2. 12.2.2. Membership Providers
        1. 12.2.2.1. System.Web.Security.SqlMembershipProvider
        2. 12.2.2.2. System.Web.Security.ActiveDirectoryMembershipProvider
      3. 12.2.3. Role Providers
        1. 12.2.3.1. System.Web.Security.SqlRoleProvider
        2. 12.2.3.2. System.Web.Security.WindowsTokenRoleProvider
        3. 12.2.3.3. System.Web.Security.AuthorizationStoreRoleProvider
      4. 12.2.4. The Personalization Provider
      5. 12.2.5. The SiteMap Provider
      6. 12.2.6. SessionState Providers
        1. 12.2.6.1. System.Web.SessionState.InProcSessionStateStore
        2. 12.2.6.2. System.Web.SessionState.OutOfProcSessionStateStore
        3. 12.2.6.3. System.Web.SessionState.SqlSessionStateStore
      7. 12.2.7. Web Event Providers
        1. 12.2.7.1. System.Web.Management.EventLogWebEventProvider
        2. 12.2.7.2. System.Web.Management.SimpleMailWebEventProvider
        3. 12.2.7.3. System.Web.Management.TemplatedMailWebEventProvider
        4. 12.2.7.4. System.Web.Management.SqlWebEventProvider
        5. 12.2.7.5. System.Web.Management.TraceWebEventProvider
        6. 12.2.7.6. System.Web.Management.WmiWebEventProvider
      8. 12.2.8. Configuration Providers
        1. 12.2.8.1. System.Configuration.DpapiProtectedConfigurationProvider
        2. 12.2.8.2. System.Configuration.RsaProtectedConfigurationProvider
      9. 12.2.9. The WebParts Provider
    3. 12.3. Configuring Providers
    4. 12.4. Summary
  18. 13. Extending the Provider Model
    1. 13.1. Providers Are One Tier in a Larger Architecture
    2. 13.2. Modifying Through Attribute-Based Programming
      1. 13.2.1. Simpler Password Structures Through the SqlMembershipProvider
      2. 13.2.2. Stronger Password Structures Through the SqlMembershipProvider
    3. 13.3. Examining ProviderBase
    4. 13.4. Building Your Own Providers
      1. 13.4.1. Creating the CustomProviders Application
      2. 13.4.2. Constructing the Class Skeleton Required
      3. 13.4.3. Creating the XML User Data Store
      4. 13.4.4. Defining the Provider Instance in the web.config File
      5. 13.4.5. Not Implementing Methods and Properties of the MembershipProvider Class
      6. 13.4.6. Implementing Methods and Properties of the MembershipProvider Class
        1. 13.4.6.1. The ApplicationName Property
        2. 13.4.6.2. Extending the Initialize() Method
        3. 13.4.6.3. Validating Users
        4. 13.4.6.4. Building the ReadUserFile() Method
      7. 13.4.7. Using the XmlMembershipProvider for User Login
    5. 13.5. Extending Pre-Existing Providers
      1. 13.5.1. Limiting Role Capabilities with a New LimitedSqlRoleProvider Provider
        1. 13.5.1.1. The CreateRole() Method
        2. 13.5.1.2. The DeleteRole() Method
        3. 13.5.1.3. The AddUsersToRoles() Method
      2. 13.5.2. Using the New LimitedSqlRoleProvider Provider
    6. 13.6. Summary
  19. 14. Site Navigation
    1. 14.1. XML-Based Site Maps
    2. 14.2. SiteMapPath Server Control
      1. 14.2.1. The PathSeparator Property
      2. 14.2.2. The PathDirection Property
      3. 14.2.3. The ParentLevelsDisplayed Property
      4. 14.2.4. The ShowToolTips Property
      5. 14.2.5. The SiteMapPath Control's Child Elements
    3. 14.3. TreeView Server Control
      1. 14.3.1. Identifying the TreeView Control's Built-In Styles
      2. 14.3.2. Examining the Parts of the TreeView Control
      3. 14.3.3. Binding the TreeView Control to an XML File
      4. 14.3.4. Selecting Multiple Options in a TreeView
      5. 14.3.5. Specifying Custom Icons in the TreeView Control
      6. 14.3.6. Specifying Lines Used to Connect Nodes
      7. 14.3.7. Working with the TreeView Control Programmatically
        1. 14.3.7.1. Expanding and Collapsing Nodes Programmatically
        2. 14.3.7.2. Adding Nodes
    4. 14.4. Menu Server Control
      1. 14.4.1. Applying Different Styles to the Menu Control
        1. 14.4.1.1. Using a Predefined Style
        2. 14.4.1.2. Changing the Style for Static Items
        3. 14.4.1.3. Adding Styles to Dynamic Items
        4. 14.4.1.4. Changing the Layout of the Menu Items
        5. 14.4.1.5. Changing the Pop-Out Symbol
        6. 14.4.1.6. Separating Menu Items with Images
      2. 14.4.2. Menu Events
      3. 14.4.3. Binding the Menu Control to an XML File
    5. 14.5. SiteMap Data Provider
      1. 14.5.1. ShowStartingNode
      2. 14.5.2. StartFromCurrentNode
      3. 14.5.3. StartingNodeOffset
      4. 14.5.4. StartingNodeUrl
    6. 14.6. SiteMap API
    7. 14.7. URL Mapping
    8. 14.8. Sitemap Localization
      1. 14.8.1. Structuring the Web.sitemap File for Localization
      2. 14.8.2. Making Modifications to the Web.config File
      3. 14.8.3. Creating Assembly Resource (.resx) Files
      4. 14.8.4. Testing the Results
    9. 14.9. Security Trimming
      1. 14.9.1. Setting Up Role Management for Administrators
      2. 14.9.2. Setting Up the Administrators' Section
      3. 14.9.3. Enabling Security Trimming
    10. 14.10. Nesting SiteMap Files
    11. 14.11. Summary
  20. 15. Personalization
    1. 15.1. The Personalization Model
    2. 15.2. Creating Personalization Properties
      1. 15.2.1. Adding a Simple Personalization Property
      2. 15.2.2. Using Personalization Properties
      3. 15.2.3. Adding a Group of Personalization Properties
      4. 15.2.4. Using Grouped Personalization Properties
      5. 15.2.5. Defining Types for Personalization Properties
      6. 15.2.6. Using Custom Types
      7. 15.2.7. Providing Default Values
      8. 15.2.8. Making Personalization Properties Read-Only
    3. 15.3. Anonymous Personalization
      1. 15.3.1. Enabling Anonymous Identification of the End User
        1. 15.3.1.1. Changing the Name of the Cookie for Anonymous Identification
        2. 15.3.1.2. Changing the Length of Time the Cookie Is Stored
        3. 15.3.1.3. Changing How the Identifiers Are Stored
        4. 15.3.1.4. Looking at the Anonymous Identifiers Stored
      2. 15.3.2. Working with Anonymous Identification
      3. 15.3.3. Anonymous Options for Personalization Properties
      4. 15.3.4. Warnings about Anonymous User Profile Storage
    4. 15.4. Programmatic Access to Personalization
      1. 15.4.1. Migrating Anonymous Users
      2. 15.4.2. Personalizing Profiles
      3. 15.4.3. Determining Whether to Continue with Automatic Saves
    5. 15.5. Personalization Providers
      1. 15.5.1. Working with SQL Server Express Edition
      2. 15.5.2. Working with Microsoft's SQL Server 7.0/2000/2005/2008
        1. 15.5.2.1. Using SQL Scripts to Install Personalization Features
        2. 15.5.2.2. Configuring the Provider for SQL Server 2005
      3. 15.5.3. Using Multiple Providers
    6. 15.6. Managing Application Profiles
      1. 15.6.1. Properties of the ProfileManager Class
      2. 15.6.2. Methods of the ProfileManager Class
      3. 15.6.3. Building the ProfileManager.aspx Page
      4. 15.6.4. Examining the Code of ProfileManager.aspx Page
      5. 15.6.5. Running the ProfileManager.aspx Page
    7. 15.7. Summary
  21. 16. Membership and Role Management
    1. 16.1. Authentication
    2. 16.2. Authorization
    3. 16.3. ASP.NET 3.5 Authentication
      1. 16.3.1. Setting Up Your Web Site for Membership
        1. 16.3.1.1. Adding an <authentication> Element to the web.config File
        2. 16.3.1.2. Adding a <forms> Element to the web.config File
      2. 16.3.2. Adding Users
        1. 16.3.2.1. Using the CreateUserWizard Server Control
        2. 16.3.2.2. Seeing Where Users Are Stored
        3. 16.3.2.3. Working with the CreateUserWizard Control
        4. 16.3.2.4. Incorporating Personalization Properties in the Registration Process
        5. 16.3.2.5. Adding Users Programmatically
        6. 16.3.2.6. Changing How Users Register with Your Application
      3. 16.3.3. Asking for Credentials
        1. 16.3.3.1. Turning Off Access with the <authorization> Element
        2. 16.3.3.2. Using the Login Server Control
        3. 16.3.3.3. Logging In Users Programmatically
        4. 16.3.3.4. Locking Out Users Who Provide Bad Passwords
      4. 16.3.4. Working with Authenticated Users
        1. 16.3.4.1. The LoginStatus Server Control
        2. 16.3.4.2. The LoginName Server Control
      5. 16.3.5. Showing the Number of Users Online
      6. 16.3.6. Dealing with Passwords
        1. 16.3.6.1. The ChangePassword Server Control
        2. 16.3.6.2. The PasswordRecovery Server Control
        3. 16.3.6.3. Generating Random Passwords
    4. 16.4. ASP.NET 3.5 Authorization
      1. 16.4.1. Using the LoginView Server Control
      2. 16.4.2. Setting Up Your Web Site for Role Management
        1. 16.4.2.1. Making Changes to the <roleManager> Section
        2. 16.4.2.2. Making Changes to the web.config File
      3. 16.4.3. Adding and Retrieving Application Roles
      4. 16.4.4. Deleting Roles
      5. 16.4.5. Adding Users to Roles
      6. 16.4.6. Getting All the Users of a Particular Role
      7. 16.4.7. Getting All the Roles of a Particular User
      8. 16.4.8. Removing Users from Roles
      9. 16.4.9. Checking Users in Roles
      10. 16.4.10. Understanding How Roles Are Cached
    5. 16.5. Using the Web Site Administration Tool
    6. 16.6. Public Methods of the Membership API
    7. 16.7. Public Methods of the Roles API
    8. 16.8. Summary
  22. 17. Portal Frameworks and Web Parts
    1. 17.1. Introducing Web Parts
    2. 17.2. Building Dynamic and Modular Web Sites
      1. 17.2.1. Introducing the WebPartManager Control
      2. 17.2.2. Working with Zone Layouts
      3. 17.2.3. Understanding the WebPartZone Control
        1. 17.2.3.1. The LayoutOrientation Attribute
        2. 17.2.3.2. The ZoneTemplate Element
        3. 17.2.3.3. Default Web Part Control Elements
      4. 17.2.4. Allowing the User to Change the Mode of the Page
        1. 17.2.4.1. Adding Web Parts to a Page
        2. 17.2.4.2. Moving Web Parts
        3. 17.2.4.3. Modifying the Web Part Settings
        4. 17.2.4.4. Connecting Web Parts
      5. 17.2.5. Modifying Zones
        1. 17.2.5.1. Turning Off the Capability for Modifications in a Zone
        2. 17.2.5.2. Adding Controls through Other Means
        3. 17.2.5.3. Web Part Verbs
    3. 17.3. Working with Classes in the Portal Framework
    4. 17.4. Creating Custom Web Parts
    5. 17.5. Connecting Web Parts
      1. 17.5.1. Building the Provider Web Part
      2. 17.5.2. Building the Consumer Web Part
      3. 17.5.3. Connecting Web Parts on an ASP.NET Page
      4. 17.5.4. Understanding the Difficulties in Dealing with Master Pages When Connecting Web Parts
    6. 17.6. Summary
  23. 18. HTML and CSS Design with ASP.NET
    1. 18.1. Caveats
    2. 18.2. HTML and CSS Overview
      1. 18.2.1. Introducing CSS
      2. 18.2.2. Creating Style Sheets
        1. 18.2.2.1. External Style Sheets
        2. 18.2.2.2. Internal Style Sheets
        3. 18.2.2.3. Inline Styles
      3. 18.2.3. CSS Rules
        1. 18.2.3.1. Selectors
          1. 18.2.3.1.1. Universal Selectors
          2. 18.2.3.1.2. Type Selectors
          3. 18.2.3.1.3. Descendant Selectors
          4. 18.2.3.1.4. Child Selectors
          5. 18.2.3.1.5. Attribute Selectors
          6. 18.2.3.1.6. Adjacent Selectors
          7. 18.2.3.1.7. Class Selectors
          8. 18.2.3.1.8. ID Selectors
        2. 18.2.3.2. Pseudo Classes
          1. 18.2.3.2.1. First-Child Pseudo Class
          2. 18.2.3.2.2. Link Pseudo Classes
          3. 18.2.3.2.3. Dynamic Pseudo Classes
          4. 18.2.3.2.4. Language Pseudo Class
        3. 18.2.3.3. Pseudo Elements
        4. 18.2.3.4. Selector Grouping
        5. 18.2.3.5. Selector Combinations
        6. 18.2.3.6. Merged Styles
      4. 18.2.4. CSS Inheritance
      5. 18.2.5. Element Layout and Positioning
        1. 18.2.5.1. The CSS Box Model
        2. 18.2.5.2. Positioning CSS Elements
          1. 18.2.5.2.1. Normal Positioning
          2. 18.2.5.2.2. Relative Positioning
          3. 18.2.5.2.3. Absolute Positioning
          4. 18.2.5.2.4. Floating Elements
        3. 18.2.5.3. The !important Attribute
      6. 18.2.6. Working with HTML and CSS in Visual Studio
        1. 18.2.6.1. Working with CSS in Visual Studio
          1. 18.2.6.1.1. Manage Styles Tool Window
          2. 18.2.6.1.2. Apply Styles Tool Window
          3. 18.2.6.1.3. CSS Properties Tool Window
        2. 18.2.6.2. Managing Relative CSS Links in Masterpages
        3. 18.2.6.3. Styling ASP.NET Controls
      7. 18.2.7. ASP.NET 2.0 CSS-Friendly Control Adapters
    3. 18.3. Summary
  24. 19. ASP.NET AJAX
    1. 19.1. Understanding the Need for AJAX
      1. 19.1.1. Before AJAX
      2. 19.1.2. AJAX Changes the Story
    2. 19.2. ASP.NET AJAX and Visual Studio 2008
      1. 19.2.1. Client-Side Technologies
      2. 19.2.2. Server-Side Technologies
      3. 19.2.3. Developing with ASP.NET AJAX
    3. 19.3. ASP.NET AJAX Applications
      1. 19.3.1. Building a Simple ASP.NET Page without AJAX
      2. 19.3.2. Building a Simple ASP.NET Page with AJAX
    4. 19.4. ASP.NET AJAX's Server-Side Controls
      1. 19.4.1. The ScriptManager Control
      2. 19.4.2. The ScriptManagerProxy Control
      3. 19.4.3. The Timer Control
      4. 19.4.4. The UpdatePanel Control
        1. 19.4.4.1. The <ContentTemplate> Element
        2. 19.4.4.2. The <Triggers> Element
        3. 19.4.4.3. Building Triggers Using Visual Studio 2008
      5. 19.4.5. The UpdateProgress Control
        1. 19.4.5.1. Controlling When the Message Appears
        2. 19.4.5.2. Adding an Image to the <ProcessTemplate>
    5. 19.5. Using Multiple UpdatePanel Controls
    6. 19.6. Working with Page History
    7. 19.7. Script Combining
    8. 19.8. Summary
  25. 20. ASP.NET AJAX Control Toolkit
    1. 20.1. Downloading and Installing
      1. 20.1.1. New Visual Studio Templates
      2. 20.1.2. Adding the New Controls to the VS2008 Toolbox
    2. 20.2. The ASP.NET AJAX Controls
      1. 20.2.1. ASP.NET AJAX Control Toolkit Extenders
      2. 20.2.2. AlwaysVisibleControlExtender
      3. 20.2.3. AnimationExtender
      4. 20.2.4. AutoCompleteExtender
      5. 20.2.5. CalendarExtender
      6. 20.2.6. CollapsiblePanelExtender
      7. 20.2.7. ConfirmButtonExtender and ModalPopupExtender
      8. 20.2.8. DragPanelExtender
      9. 20.2.9. DropDownExtender
      10. 20.2.10. DropShadowExtender
      11. 20.2.11. DynamicPopulateExtender
      12. 20.2.12. FilteredTextBoxExtender
      13. 20.2.13. HoverMenuExtender
      14. 20.2.14. ListSearchExtender
      15. 20.2.15. MaskedEditExtender and MaskedEditValidator
      16. 20.2.16. MutuallyExclusiveCheckBoxExtender
      17. 20.2.17. NumericUpDownExtender
      18. 20.2.18. PagingBulletedListExtender
      19. 20.2.19. PopupControlExtender
      20. 20.2.20. ResizableControlExtender
      21. 20.2.21. RoundedCornersExtender
      22. 20.2.22. SliderExtender
      23. 20.2.23. SlideShowExtender
      24. 20.2.24. TextBoxWatermarkExtender
      25. 20.2.25. ToggleButtonExtender
      26. 20.2.26. UpdatePanelAnimationExtender
      27. 20.2.27. ValidatorCalloutExtender
    3. 20.3. ASP.NET AJAX Control Toolkit Server Controls
      1. 20.3.1. Accordion Control
      2. 20.3.2. CascadingDropDown
      3. 20.3.3. NoBot Control
      4. 20.3.4. PasswordStrength Control
      5. 20.3.5. Rating Control
      6. 20.3.6. TabContainer Control
    4. 20.4. Summary
  26. 21. Security
    1. 21.1. Authentication and Authorization
    2. 21.2. Applying Authentication Measures
      1. 21.2.1. The <authentication> Node
      2. 21.2.2. Windows-Based Authentication
        1. 21.2.2.1. Creating Users
        2. 21.2.2.2. Authenticating and Authorizing a User
        3. 21.2.2.3. Looking Closely at the <allow> and <deny> Nodes
        4. 21.2.2.4. Authenticating and Authorizing a Group
        5. 21.2.2.5. Authenticating and Authorizing an HTTP Transmission Method
        6. 21.2.2.6. Integrated Windows Authentication
        7. 21.2.2.7. Basic Authentication
        8. 21.2.2.8. Digest Authentication
      3. 21.2.3. Forms-Based Authentication
        1. 21.2.3.1. Authenticating Against Values Contained in the web.config File
        2. 21.2.3.2. Authenticating Against Values in a Database
        3. 21.2.3.3. Using the Login Control with Forms Authentication
        4. 21.2.3.4. Looking Closely at the FormsAuthentication Class
      4. 21.2.4. Passport Authentication
    3. 21.3. Authenticating Specific Files and Folders
    4. 21.4. Programmatic Authorization
      1. 21.4.1. Working with User.Identity
      2. 21.4.2. Working with User.IsInRole()
      3. 21.4.3. Pulling More Information with WindowsIdentity
    5. 21.5. Identity and Impersonation
    6. 21.6. Securing Through IIS
      1. 21.6.1. IP Address and Domain Name Restrictions
      2. 21.6.2. Working with File Extensions
      3. 21.6.3. Using the ASP.NET MMC Snap-In
      4. 21.6.4. Using the IIS 7.0 Manager
    7. 21.7. Summary
  27. 22. State Management
    1. 22.1. What Are Your Choices?
    2. 22.2. Understanding the Session Object in ASP.NET
      1. 22.2.1. Sessions and the Event Model
      2. 22.2.2. Configuring Session State Management
      3. 22.2.3. In-Process Session State
        1. 22.2.3.1. InProc Gotchas
        2. 22.2.3.2. Web Gardening
        3. 22.2.3.3. Storing Data in the Session Object
        4. 22.2.3.4. Making Sessions Transparent
        5. 22.2.3.5. Advanced Techniques for Optimizing Session Performance
      4. 22.2.4. Out-of-Process Session State
      5. 22.2.5. SQL-Backed Session State
      6. 22.2.6. Extending Session State with Other Providers
      7. 22.2.7. Cookieless Session State
      8. 22.2.8. Choosing the Correct Way to Maintain State
    3. 22.3. The Application Object
    4. 22.4. QueryStrings
    5. 22.5. Cookies
    6. 22.6. PostBacks and Cross-Page PostBacks
    7. 22.7. Hidden Fields, ViewState, and ControlState
    8. 22.8. Using HttpContext.Current.Items for Very Short-Term Storage
    9. 22.9. Summary
  28. 23. Caching
    1. 23.1. Caching
      1. 23.1.1. Output Caching
        1. 23.1.1.1. VaryByParam
        2. 23.1.1.2. VaryByControl
        3. 23.1.1.3. VaryByCustom
      2. 23.1.2. Partial Page (UserControl) Caching
      3. 23.1.3. Post-Cache Substitution
      4. 23.1.4. HttpCachePolicy and Client-Side Caching
    2. 23.2. Caching Programmatically
      1. 23.2.1. Data Caching Using the Cache Object
      2. 23.2.2. Controlling the ASP.NET Cache
      3. 23.2.3. Cache Dependencies
        1. 23.2.3.1. The AggregateCacheDependency Class
        2. 23.2.3.2. The Unsealed CacheDependency Class
        3. 23.2.3.3. Creating Custom Cache Dependencies
    3. 23.3. Using the SQL Server Cache Dependency
      1. 23.3.1. Enabling Databases for SQL Server Cache Invalidation
      2. 23.3.2. Enabling Tables for SQL Server Cache Invalidation
      3. 23.3.3. Looking at SQL Server 2000
      4. 23.3.4. Looking at the Tables That Are Enabled
      5. 23.3.5. Disabling a Table for SQL Server Cache Invalidation
      6. 23.3.6. Disabling a Database for SQL Server Cache Invalidation
      7. 23.3.7. SQL Server 2005 Cache Invalidation
    4. 23.4. Configuring Your ASP.NET Application
    5. 23.5. Testing SQL Server Cache Invalidation
      1. 23.5.1. Adding More Than One Table to a Page
      2. 23.5.2. Attaching SQL Server Cache Dependencies to the Request Object
      3. 23.5.3. Attaching SQL Server Cache Dependencies to the Cache Object
    6. 23.6. Summary
  29. 24. Debugging and Error Handling
    1. 24.1. Design-Time Support
      1. 24.1.1. Syntax Notifications
      2. 24.1.2. Immediate and Command Window
      3. 24.1.3. Task List
    2. 24.2. Tracing
      1. 24.2.1. System.Diagnostics.Trace and ASP.NET's Page.Trace
      2. 24.2.2. Page-Level Tracing
      3. 24.2.3. Application Tracing
      4. 24.2.4. Viewing Trace Data
      5. 24.2.5. Tracing from Components
      6. 24.2.6. Trace Forwarding
      7. 24.2.7. TraceListeners
        1. 24.2.7.1. The New ASP.NET WebPageTraceListener
        2. 24.2.7.2. EventLogTraceListener
        3. 24.2.7.3. Other Useful Listeners
      8. 24.2.8. Diagnostic Switches
        1. 24.2.8.1. BooleanSwitch
        2. 24.2.8.2. TraceSwitch
        3. 24.2.8.3. SourceSwitch
      9. 24.2.9. Web Events
    3. 24.3. Debugging
      1. 24.3.1. What's Required
        1. 24.3.1.1. Debug versus Release
        2. 24.3.1.2. Debugging and the JIT Dialog
      2. 24.3.2. IIS versus ASP.NET Development Server
      3. 24.3.3. Starting a Debugging Session
        1. 24.3.3.1. F5 Debugging
        2. 24.3.3.2. Attaching to a Process
        3. 24.3.3.3. Simpler Remote Debugging
        4. 24.3.3.4. Debugging Running Windows XP Service Pack 2
      4. 24.3.4. New Tools to Help You with Debugging
        1. 24.3.4.1. Debugger Datatips
        2. 24.3.4.2. Data Visualizers
        3. 24.3.4.3. Error Notifications
        4. 24.3.4.4. Edit and Continue (Lack of) Support, or Edit and Refresh
        5. 24.3.4.5. Just My Code Debugging
        6. 24.3.4.6. Tracepoints
      5. 24.3.5. Client-side Javascript Debugging
      6. 24.3.6. SQL Stored Proc Debugging
    4. 24.4. Exception and Error Handling
      1. 24.4.1. Handling Exceptions on a Page
      2. 24.4.2. Handling Application Exceptions
      3. 24.4.3. Http Status Codes
    5. 24.5. Summary
  30. 25. File I/O and Streams
    1. 25.1. Working with Drives, Directories, and Files
      1. 25.1.1. The DriveInfo Class
      2. 25.1.2. The Directory and DirectoryInfo Classes
        1. 25.1.2.1. Using Relative Paths and Setting and Getting the Current Directory
      3. 25.1.3. File and FileInfo
      4. 25.1.4. Working with Paths
      5. 25.1.5. File and Directory Properties, Attributes, and Access Control Lists
        1. 25.1.5.1. Properties and Attributes
        2. 25.1.5.2. Access Control Lists
    2. 25.2. Reading and Writing Files
      1. 25.2.1. Streams
      2. 25.2.2. Readers and Writers
        1. 25.2.2.1. Encodings
        2. 25.2.2.2. I/O Shortcuts
      3. 25.2.3. Compressing Streams
        1. 25.2.3.1. GZip Compression
        2. 25.2.3.2. Deflate Compression
        3. 25.2.3.3. Compressing HTTP Output
    3. 25.3. Working with Serial Ports
    4. 25.4. Network Communications
      1. 25.4.1. WebRequest and WebResponse
        1. 25.4.1.1. HttpWebRequest and HttpWebResponse
        2. 25.4.1.2. FtpWebRequest and FtpWebResponse
        3. 25.4.1.3. FileWebRequest and FileWebResponse
      2. 25.4.2. Sending Mail
    5. 25.5. Summary
  31. 26. User and Server Controls
    1. 26.1. User Controls
      1. 26.1.1. Creating User Controls
      2. 26.1.2. Interacting with User Controls
      3. 26.1.3. Loading User Controls Dynamically
    2. 26.2. Server Controls
      1. 26.2.1. WebControl Project Setup
      2. 26.2.2. Control Attributes
        1. 26.2.2.1. Class Attributes
        2. 26.2.2.2. Property/Event Attributes
      3. 26.2.3. Control Rendering
        1. 26.2.3.1. The Page Event Lifecycle
        2. 26.2.3.2. Rendering Services
      4. 26.2.4. Adding Tag Attributes
      5. 26.2.5. Styling HTML
      6. 26.2.6. Themes and Skins
      7. 26.2.7. Adding Client-Side Features
        1. 26.2.7.1. Emitting Client-Side Script
        2. 26.2.7.2. Accessing Embedded Resources
        3. 26.2.7.3. Asynchronous Callbacks
      8. 26.2.8. Detecting and Reacting to Browser Capabilities
        1. 26.2.8.1. .browser files
        2. 26.2.8.2. Accessing Browser Capability Information
      9. 26.2.9. Using ViewState
        1. 26.2.9.1. Types and ViewState
        2. 26.2.9.2. Control State
      10. 26.2.10. Raising PostBack Events
      11. 26.2.11. Handling PostBack Data
      12. 26.2.12. Composite Controls
        1. 26.2.12.1. Exposing Child Control Properties
      13. 26.2.13. Templated Controls
      14. 26.2.14. Creating Control Design-Time Experiences
        1. 26.2.14.1. Type Converters
        2. 26.2.14.2. Custom Type Converters
        3. 26.2.14.3. Control Designers
          1. 26.2.14.3.1. Design-Time Regions
          2. 26.2.14.3.2. Designer Actions
        4. 26.2.14.4. UI Type Editors
    3. 26.3. Summary
  32. 27. Modules and Handlers
    1. 27.1. Processing HTTP Requests
      1. 27.1.1. IIS 5/6 and ASP.NET
      2. 27.1.2. IIS 7 and ASP.NET
      3. 27.1.3. ASP.NET Request Processing
    2. 27.2. HttpModules
      1. 27.2.1.
        1. 27.2.1.1. Modifying HTTP Output
        2. 27.2.1.2. URL Rewriting
        3. 27.2.1.3. IIS WildCards
          1. 27.2.1.3.1. Adding Wildcards in IIS 5
          2. 27.2.1.3.2. Adding Wildcards in IIS 6
      2. 27.2.2. HttpHandlers
        1. 27.2.2.1. Generic Handlers
        2. 27.2.2.2. Mapping a File Extension in IIS
    3. 27.3. Summary
  33. 28. Using Business Objects
    1. 28.1. Using Business Objects in ASP.NET 3.5
      1. 28.1.1. Creating Precompiled .NET Business Objects
      2. 28.1.2. Using Precompiled Business Objects in Your ASP.NET Applications
    2. 28.2. COM Interop: Using COM Within .NET
      1. 28.2.1. The Runtime Callable Wrapper
      2. 28.2.2. Using COM Objects in ASP.NET Code
        1. 28.2.2.1. Accessing Tricky COM Members in C#
        2. 28.2.2.2. Releasing COM Objects Manually
      3. 28.2.3. Error Handling
      4. 28.2.4. Deploying COM Components with .NET Applications
        1. 28.2.4.1. Private Assemblies
        2. 28.2.4.2. Public Assemblies
    3. 28.3. Using .NET from Unmanaged Code
      1. 28.3.1. The COM-Callable Wrapper
      2. 28.3.2. Using .NET Components Within COM Objects
      3. 28.3.3. Early versus Late Binding
      4. 28.3.4. Error Handling
      5. 28.3.5. Deploying .NET Components with COM Applications
        1. 28.3.5.1. Private Assemblies
        2. 28.3.5.2. Public Assemblies
    4. 28.4. Summary
  34. 29. ADO.NET Entity Framework
    1. 29.1. Can We Speak the Same Language?
      1. 29.1.1. The Conceptual and Logical Layers
      2. 29.1.2. Mapping Between Layers
    2. 29.2. Creating Your First Entity Data Model
      1. 29.2.1. Working Through the EDM Wizard
      2. 29.2.2. Using the ADO.NET Entity Designer
      3. 29.2.3. Building an ASP.NET Page Using Your EDM
    3. 29.3. Understanding Relationships
      1. 29.3.1. One-to-One and One-to-Many Relationships
      2. 29.3.2. Many-to-One and Many-to-Many Relationships
    4. 29.4. Inheritance Within the EDM
    5. 29.5. Using Stored Procedures
    6. 29.6. The EntityDataSource Control
      1. 29.6.1. Creating the Base Page
      2. 29.6.2. Configuring the Data Source Control
    7. 29.7. Summary
  35. 30. ASP.NET Dynamic Data
    1. 30.1. Creating Your Base Application with Visual Studio 2008
      1. 30.1.1. Looking at the Core Files Created in the Default Application
      2. 30.1.2. The Dynamic Data Application
      3. 30.1.3. Incorporating the Database
      4. 30.1.4. Registering the Data Model Within the Global.asax File
      5. 30.1.5. Styles and Layout
      6. 30.1.6. Results of the Application
    2. 30.2. Working with Dynamic Data Routes
    3. 30.3. Controlling Display Aspects
    4. 30.4. Summary
  36. 31. Building and Consuming Services
    1. 31.1. Communication Between Disparate Systems
    2. 31.2. Building a Simple XML Web Service
      1. 31.2.1. The WebService Page Directive
      2. 31.2.2. Looking at the Base Web Service Class File
      3. 31.2.3. Exposing Custom Datasets as SOAP
        1. 31.2.3.1. The WebService Attribute
        2. 31.2.3.2. The WebMethod Attribute
      4. 31.2.4. The XML Web Service Interface
    3. 31.3. Consuming a Simple XML Web Service
      1. 31.3.1. Adding a Web Reference
      2. 31.3.2. Invoking the Web Service from the Client Application
    4. 31.4. Transport Protocols for Web Services
      1. 31.4.1. HTTP-GET
      2. 31.4.2. HTTP-POST
      3. 31.4.3. SOAP
    5. 31.5. Overloading WebMethods
    6. 31.6. Caching Web Service Responses
    7. 31.7. SOAP Headers
      1. 31.7.1. Building a Web Service with SOAP Headers
      2. 31.7.2. Consuming a Web Service Using SOAP Headers
      3. 31.7.3. Requesting Web Services Using SOAP 1.2
    8. 31.8. Consuming Web Services Asynchronously
    9. 31.9. Windows Communication Foundation
      1. 31.9.1. The Larger Move to SOA
      2. 31.9.2. WCF Overview
      3. 31.9.3. Building a WCF Service
        1. 31.9.3.1. What Makes a WCF Service
        2. 31.9.3.2. Creating Your First WCF Service
          1. 31.9.3.2.1. Creating the service framework
          2. 31.9.3.2.2. Working with the Interface
          3. 31.9.3.2.3. Utilizing the Interface
          4. 31.9.3.2.4. Hosting the WCF Service in a Console Application
        3. 31.9.3.3. Reviewing the WSDL Document
    10. 31.10. Building the WCF Consumer
      1. 31.10.1. Adding a Service Reference
        1. 31.10.1.1. Configuration File Changes
        2. 31.10.1.2. Writing the Consumption Code
      2. 31.10.2. Working with Data Contracts
        1. 31.10.2.1. Building a Service with a Data Contract
        2. 31.10.2.2. Building the Consumer
        3. 31.10.2.3. Looking at WSDL and the Schema for HelloCustomerService
      3. 31.10.3. Namespaces
    11. 31.11. Summary
  37. 32. ADO.NET Data Services
    1. 32.1. Creating Your First Service
      1. 32.1.1. Adding Your Entity Data Model
      2. 32.1.2. Creating the Service
    2. 32.2. Querying the Interface
      1. 32.2.1. Reading a Table of Data
      2. 32.2.2. Reading a Specific Item from the Table
      3. 32.2.3. Relationships
      4. 32.2.4. Expanding on Associations
      5. 32.2.5. Ordering in Result Sets
      6. 32.2.6. Moving Around Result Sets
      7. 32.2.7. Filtering Content
    3. 32.3. Consuming ADO.NET Data Services in ASP.NET
    4. 32.4. Summary
  38. 33. Localization
    1. 33.1. Cultures and Regions
      1. 33.1.1. Understanding Culture Types
      2. 33.1.2. The ASP.NET Threads
      3. 33.1.3. Server-Side Culture Declarations
      4. 33.1.4. Client-Side Culture Declarations
      5. 33.1.5. Translating Values and Behaviors
        1. 33.1.5.1. Understanding Differences in Dates
        2. 33.1.5.2. Understanding Differences in Numbers and Currencies
        3. 33.1.5.3. Understanding Differences in Sorting Strings
    2. 33.2. ASP.NET 3.5 Resource Files
      1. 33.2.1. Making Use of Local Resources
        1. 33.2.1.1. Adding Another Language Resource File
        2. 33.2.1.2. Finalizing the Building of the Default.aspx Page
        3. 33.2.1.3. Neutral Cultures Are Generally More Preferred
      2. 33.2.2. Making Use of Global Resources
    3. 33.3. Looking at the Resource Editor
    4. 33.4. Summary
  39. 34. Configuration
    1. 34.1. Configuration Overview
      1. 34.1.1. Server Configuration Files
      2. 34.1.2. Application Configuration File
      3. 34.1.3. How Configuration Settings Are Applied
      4. 34.1.4. Detecting Configuration File Changes
      5. 34.1.5. Configuration File Format
        1. 34.1.5.1. Config Sections
    2. 34.2. Common Configuration Settings
      1. 34.2.1. Connecting Strings
      2. 34.2.2. Configuring Session State
        1. 34.2.2.1. Web Farm Support
          1. 34.2.2.1.1. State Server
          2. 34.2.2.1.2. SQL Server
          3. 34.2.2.1.3. Custom State Store
      3. 34.2.3. Compilation Configuration
      4. 34.2.4. Browser Capabilities
      5. 34.2.5. Custom Errors
      6. 34.2.6. Authentication
        1. 34.2.6.1. Windows Authentication
        2. 34.2.6.2. Passport Authentication
        3. 34.2.6.3. Forms Authentication
      7. 34.2.7. Anonymous Identity
      8. 34.2.8. Authorization
        1. 34.2.8.1. URL Authorization
        2. 34.2.8.2. File Authorization
      9. 34.2.9. Locking-Down Configuration Settings
      10. 34.2.10. ASP.NET Page Configuration
      11. 34.2.11. Include Files
      12. 34.2.12. Configuring ASP.NET Runtime Settings
        1. 34.2.12.1. Enabling and Disabling ASP.NET Applications
        2. 34.2.12.2. Fully Qualified Redirect URLs
        3. 34.2.12.3. Request Time-Out
        4. 34.2.12.4. Maximum Request Length
        5. 34.2.12.5. Buffer Uploads
        6. 34.2.12.6. Thread Management
        7. 34.2.12.7. Application Queue Length
        8. 34.2.12.8. Output Caching
      13. 34.2.13. Configuring the ASP.NET Worker Process
        1. 34.2.13.1. Running Multiple Web Sites with Multiple Versions of Framework
      14. 34.2.14. Storing Application-Specific Settings
      15. 34.2.15. Programming Configuration Files
        1. 34.2.15.1. Enumerating Connection Strings
        2. 34.2.15.2. Manipulating a machine.config File
        3. 34.2.15.3. Manipulating web.config from Remote Servers
      16. 34.2.16. Protecting Configuration Settings
      17. 34.2.17. Editing Configuration Files
    3. 34.3. Creating Custom Sections
      1. 34.3.1. Using the NameValueFileSectionHandler Object
      2. 34.3.2. Using the DictionarySectionHandler Object
      3. 34.3.3. Using the SingleTagSectionHandler Object
      4. 34.3.4. Using Your Own Custom Configuration Handler
    4. 34.4. Summary
  40. 35. Instrumentation
    1. 35.1. Working with the Event Log
      1. 35.1.1. Reading from the Event Log
      2. 35.1.2. Writing to the Event Logs
    2. 35.2. Using Performance Counters
      1. 35.2.1. Viewing Performance Counters Through an Administration Tool
      2. 35.2.2. Building a Browser-Based Administrative Tool
    3. 35.3. Application Tracing
    4. 35.4. Understanding Health Monitoring
      1. 35.4.1. The Health Monitoring Provider Model
      2. 35.4.2. Health Monitoring Configuration
        1. 35.4.2.1. <eventMappings>
        2. 35.4.2.2. <providers>
        3. 35.4.2.3. <rules>
        4. 35.4.2.4. <profiles>
      3. 35.4.3. Writing Events via Configuration: Running the Example
      4. 35.4.4. Routing Events to SQL Server
      5. 35.4.5. Buffering Web Events
      6. 35.4.6. E-mailing Web Events
        1. 35.4.6.1. Using the SimpleMailProvider
        2. 35.4.6.2. Using the TemplatedMailWebEventProvider
    5. 35.5. Summary
  41. 36. Administration and Management
    1. 36.1. The ASP.NET Web Site Administration Tool
      1. 36.1.1. The Home Tab
      2. 36.1.2. The Security Tab
        1. 36.1.2.1. The Security Setup Wizard
        2. 36.1.2.2. Creating New Users
        3. 36.1.2.3. Managing Users
        4. 36.1.2.4. Managing Roles
        5. 36.1.2.5. Managing Access Rules
      3. 36.1.3. The Application Tab
        1. 36.1.3.1. Managing Application Settings
        2. 36.1.3.2. Managing SMTP Configuration
        3. 36.1.3.3. Managing Tracing and Debugging Information
        4. 36.1.3.4. Taking an Application Offline
      4. 36.1.4. The Provider Tab
    2. 36.2. Configuring ASP.NET in IIS on Vista
      1. 36.2.1. .NET Compilation
      2. 36.2.2. .NET Globalization
      3. 36.2.3. .NET Profile
      4. 36.2.4. .NET Roles
      5. 36.2.5. .NET Trust Levels
      6. 36.2.6. .NET Users
      7. 36.2.7. Application Settings
      8. 36.2.8. Connection Strings
      9. 36.2.9. Pages and Controls
      10. 36.2.10. Providers
      11. 36.2.11. Session State
      12. 36.2.12. SMTP E-mail
    3. 36.3. Summary
  42. 37. Packaging and Deploying ASP.NET Applications
    1. 37.1. Deployment Pieces
    2. 37.2. Steps to Take before Deploying
    3. 37.3. Methods of Deploying Web Applications
      1. 37.3.1. Using XCopy
      2. 37.3.2. Using the VS Copy Web Site Option
      3. 37.3.3. Deploying a Precompiled Web Application
      4. 37.3.4. Building an Installer Program
        1. 37.3.4.1. The Windows Installer
        2. 37.3.4.2. Actions of the Windows Installer
        3. 37.3.4.3. Creating a Basic Installation Program
        4. 37.3.4.4. Installing the Application
        5. 37.3.4.5. Uninstalling the Application
    4. 37.4. Looking More Closely at Installer Options
      1. 37.4.1. Working with the Deployment Project Properties
        1. 37.4.1.1. The Output File Name
        2. 37.4.1.2. Package Files
        3. 37.4.1.3. Installation URL
        4. 37.4.1.4. Compression
        5. 37.4.1.5. CAB Size
        6. 37.4.1.6. Additional Properties
      2. 37.4.2. The File System Editor
        1. 37.4.2.1. Adding Items to the Output
        2. 37.4.2.2. Creating a Desktop Shortcut to the Web Application
      3. 37.4.3. The Registry Editor
      4. 37.4.4. The File Types Editor
      5. 37.4.5. The User Interface Editor
        1. 37.4.5.1. Adding Dialogs to the Installation Process
        2. 37.4.5.2. Changing the Order in Which the Dialogs Appear in the Process
      6. 37.4.6. The Custom Actions Editor
      7. 37.4.7. The Launch Conditions Editor
    5. 37.5. Summary
  43. A. Migrating Older ASP.NET Projects
    1. A.1. Migrating Is Not Difficult
      1. A.1.1. Running Multiple Versions of the Framework Side by Side
      2. A.1.2. Upgrading Your ASP.NET Applications
    2. A.2. When Mixing Versions — Forms Authentication
    3. A.3. Upgrading — ASP.NET Reserved Folders
    4. A.4. ASP.NET 3.5 Pages Come as XHTML
    5. A.5. No Hard-Coded .js Files in ASP.NET 3.5
    6. A.6. Converting ASP.NET 1.x Applications in Visual Studio 2008
    7. A.7. Migrating from ASP.NET 2.0 to 3.5
  44. B. ASP.NET Ultimate Tools
    1. B.1. Debugging Made Easier
      1. B.1.1. Firebug
      2. B.1.2. YSlow
      3. B.1.3. IE WebDeveloper Toolbar and Firefox WebDeveloper
      4. B.1.4. Aptana Studio — JavaScript IDE
      5. B.1.5. Profilers: dotTrace or ANTS
    2. B.2. References
      1. B.2.1. PositionIsEverything.net, QuirksMode.org, and HTMLDog.com
      2. B.2.2. Visibone
      3. B.2.3. www.asp.net
    3. B.3. Tidying Up Your Code
      1. B.3.1. Refactor! for ASP.NET from Devexpress
      2. B.3.2. Code Style Enforcer
      3. B.3.3. Packer for .NET — JavaScript Minimizer
    4. B.4. Visual Studio Add-ins
      1. B.4.1. ASPX Edit Helper Add-In for Visual Studio
      2. B.4.2. Power Toys Pack Installer
    5. B.5. Extending ASP.NET
      1. B.5.1. ASP.NET AJAX Control Toolkit
      2. B.5.2. Atif Aziz's ELMAH — Error Logging Modules and Handlers
      3. B.5.3. Helicon's ISAPI_Rewrite
    6. B.6. General Purpose Developer Tools
      1. B.6.1. Telerik's Online Code Converter
      2. B.6.2. WinMerge and Differencing Tools
      3. B.6.3. Reflector
      4. B.6.4. CR_Documentor
      5. B.6.5. Process Explorer
    7. B.7. Summary
  45. C. Silverlight 2 and ASP.NET
    1. C.1. Getting Started
    2. C.2. Silverlight Controls
      1. C.2.1. Silverlight Control
        1. C.2.1.1. Windowless
        2. C.2.1.2. SplashScreenSource
        3. C.2.1.3. InitParameters
        4. C.2.1.4. HtmlAccess
        5. C.2.1.5. JavaScript API
      2. C.2.2. Media Player Control
    3. C.3. Silverlight and JavaScript
      1. C.3.1. JavaScript API
      2. C.3.2. HTML Bridge
        1. C.3.2.1. Exposing Managed Code in JavaScript
        2. C.3.2.2. Accessing the DOM using Managed Code
    4. C.4. Summary
  46. D. ASP.NET Is Greater Than ASP.NET MVC
    1. D.1. Abstraction: What Web Forms Does Well
      1. D.1.1. A Basic Web Forms Application
      2. D.1.2. The Importance of Events
    2. D.2. The Leak: Where Web Forms Doesn't Exactly Fit
      1. D.2.1. ViewState
      2. D.2.2. Controlling Your Angle Brackets
      3. D.2.3. Client IDs
      4. D.2.4. Testing
    3. D.3. Back to Basics: ASP.NET MVC Believes ...
      1. D.3.1. Orchestration vs. Composing
      2. D.3.2. Separation of Concerns: What It Means
      3. D.3.3. Approaches to Maintainability
    4. D.4. Caring About Testability
    5. D.5. Common Reactions to ASP.NET MVC
      1. D.5.1. This Looks Like Classic ASP from 1999!
      2. D.5.2. Who Moved My <asp:Cheese runat="server">?
      3. D.5.3. Yet Another Web Framework
    6. D.6. Why "(ASP.NET > ASP.NET MVC) == True"
      1. D.6.1. Convention Over Configuration
      2. D.6.2. Your First, er, Third, Request
      3. D.6.3. The Request Lifecycle
    7. D.7. Summary
  47. E. ASP.NET Online Resources
    1. E.1. Author Blogs
    2. E.2. ASP.NET Influential Blogs
    3. E.3. Web Sites