Tải bản đầy đủ (.pdf) (994 trang)

Beginning ASP.NET 3.5 in C# 2008. ppt

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (25.29 MB, 994 trang )

this print for content only—size & color not accurate spine = 1.857" 992 page count
Books for professionals By professionals
®
Beginning ASP.NET 3.5 in C# 2008:
From Novice to Professional,
SECOND EDITION
Dear Reader,
Welcome to the most up to date and comprehensive beginning ASP.NET book
you’ll find on any shelf. As you probably already know, ASP.NET is a framework
for developing modern web applications. In the right hands, ASP.NET produces
web applications that are secure, blisteringly fast, and highly scalable. Best of
all, ASP.NET includes a huge set of ready-to-use features like website navigation,
data binding, themes, and user management. ASP.NET allows you to create any-
thing from a dynamic personal website to a full-scale e-commerce storefront.
In this book, I assume that you have only basic knowledge of C#, although
those coming from a more experienced background will find that the basics are
reviewed quickly and efficiently. As you explore ASP.NET, you’ll learn the key
database, security, and performance principles you need to know in order to
design a solid web application. My book will also teach you to use techniques
such as object-oriented programming and code-behind development from the
beginning, rather than fake it with simplified techniques that won’t work well
in real life.
Once you’ve reached the end of the book, you’ll have mastered the core
techniques of website programming, and you’ll have the knowledge necessary
to begin work as a professional ASP.NET developer.
Welcome aboard!
Matthew MacDonald (Microsoft MVP, MCSD)
Author of
Pro ASP.NET 3.5 in C# 2008
(Apress)
Beginning ASP.NET 3.5


in VB 2008 (Apress)
Pro WPF: Windows
Presentation Foundation
in .NET 3.0 (Apress)
Beginning ASP.NET 2.0
in C# 2005 (Apress)
ASP.NET: The Complete
Reference
US $49.99
Shelve in
.NET
User level:
Beginner–Intermediate
MacDonald
SECOND EDITION
ASP.NET 3.5
The eXperT’s Voice
®
in .neT
Beginning
ASP.NET 3.5
in
C# 2008
From Novice to Professional
SECOND EDITION
cyan
MaGenTa
yelloW
Black
panTone 123 c

Matthew MacDonald
Companion eBook Available
THE APRESS ROADMAP
Beginning ASP.NET 3.5
in C# 2008
Beginning Silverlight 1.1
Pro Silverlight 1.1
Beginning ASP.NET 3.5
Data Access with LINQ,
C# 2008, and ADO.NET
Pro ASP.NET 3.5
Server Controls with
AJAX Components
Pro C# 2008 and
the .NET 3.5 Platform
Pro LINQ:
Language Integrated Query
in C# 2008
Pro WPF:
Windows Presentation
Foundation in .NET 3.0
www.apress.com
SOURCE CODE ONLINE
Companion eBook

See last page for details
on $10 eBook version
ISBN-13: 978-1-59059-891-7
ISBN-10: 1-59059-891-1
9 781590 598917

5 4 9 9 9
Start your journey into ASP.NET with a renowned author
Beginning
in
C#
2008
netbooks.wordpress.com
Codered @ Updatesofts.com
Matthew MacDonald
Beginning ASP.NET 3.5
in C# 2008
From Novice to Professional,
Second Edition
8911FM.qxd 10/18/07 4:12 PM Page i
Beginning ASP.NET 3.5 in C# 2008: From Novice to Professional, Second Edition
Copyright © 2007 by Matthew MacDonald
All rights reserved. No part of this work may be reproduced or transmitted in any form or by any means,
electronic or mechanical, including photocopying, recording, or by any information storage or retrieval
system, without the prior written permission of the copyright owner and the publisher.
ISBN-13 (pbk): 978-1-59059-891-7
ISBN-10 (pbk): 1-59059-891-1
Printed and bound in the United States of America 9 8 7 6 5 4 3 2 1
Trademarked names may appear in this book. Rather than use a trademark symbol with every occurrence
of a trademarked name, we use the names only in an editorial fashion and to the benefit of the trademark
owner, with no intention of infringement of the trademark.
Lead Editor: Jonathan Hassell
Technical Reviewer: Andy Olsen
Editorial Board: Steve Anglin, Ewan Buckingham, Tony Campbell, Gary Cornell, Jonathan Gennick,
Jason Gilmore, Kevin Goff, Jonathan Hassell, Matthew Moodie, Joseph Ottinger, Jeffrey Pepper,

Ben Renow-Clarke, Dominic Shakeshaft, Matt Wade, Tom Welsh
Project Manager | Production Editor: Laura Esterman
Copy Editor: Liz Welch
Associate Production Director: Kari Brooks-Copony
Compositor: Dina Quan
Proofreaders: April Eddy, Nancy Sixsmith
Indexer: John Collin
Artist: April Milne
Cover Designer: Kurt Krames
Manufacturing Director: Tom Debolski
Distributed to the book trade worldwide by Springer-Verlag New York, Inc., 233 Spring Street, 6th Floor,
New York, NY 10013. Phone 1-800-SPRINGER, fax 201-348-4505, e-mail
, or
visit .
For information on translations, please contact Apress directly at 2855 Telegraph Avenue, Suite 600,
Berkeley, CA 94705. Phone 510-549-5930, fax 510-549-5939, e-mail
, or visit
.
The information in this book is distributed on an “as is” basis, without warranty. Although every precau-
tion has been taken in the preparation of this work, neither the author(s) nor Apress shall have any
liability to any person or entity with respect to any loss or damage caused or alleged to be caused directly
or indirectly by the information contained in this work.
The source code for this book is available to readers at
www.apress.com.
8911FM.qxd 10/18/07 4:12 PM Page ii
For my wonderful family,
Faria and Maya
8911FM.qxd 10/18/07 4:12 PM Page iii
Contents at a Glance
About the Author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxv

About the Technical Reviewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxvii
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxix
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxi
PART 1
■ ■ ■
Introducing .NET
■CHAPTER 1 The .NET Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
■CHAPTER 2 The C# Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
■CHAPTER 3 Types, Objects, and Namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
PART 2
■ ■ ■
Developing ASP.NET Applications
■CHAPTER 4 Visual Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
■CHAPTER 5 Web Form Fundamentals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
■CHAPTER 6 Web Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
■CHAPTER 7 State Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
■CHAPTER 8 Error Handling, Logging, and Tracing. . . . . . . . . . . . . . . . . . . . . . . . . . 249
■CHAPTER 9 Deploying ASP.NET Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
PART 3
■ ■ ■
Building Better Web Forms
■CHAPTER 10 V
alidation
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
333
■CHAPTER 11 Ric
h Controls
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
355
■CHAPTER 12 User Controls and Graphics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381

■CHAPTER 13 Styles, Themes, and Master Pages . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
■CHAPTER 14 W
ebsite Navigation
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
445
iv
8911FM.qxd 10/18/07 4:12 PM Page iv
PART 4
■ ■ ■
Working with Data
■CHAPTER 15 ADO.NET Fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483
■CHAPTER 16 Data Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537
■CHAPTER 17 The Data Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 577
■CHAPTER 18 Files and Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617
■CHAPTER 19 XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647
PART 5
■ ■ ■
Website Security
■CHAPTER 20 Security Fundamentals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 691
■CHAPTER 21 Membership. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725
■CHAPTER 22 Profiles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 763
PART 6
■ ■ ■
Advanced ASP.NET
■CHAPTER 23 Component-Based Programming. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 789
■CHAPTER 24 Caching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 821
■CHAPTER 25 ASP.NET AJAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 855
■INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 891
v
8911FM.qxd 10/18/07 4:12 PM Page v

8911FM.qxd 10/18/07 4:12 PM Page vi
Contents
About the Author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxv
About the Technical Reviewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxvii
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxix
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxi
PART 1
■ ■ ■
Introducing .NET
■CHAPTER 1 The .NET Framework. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
The Evolution of Web Development . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
HTML and HTML Forms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Server-Side Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Client-Side Programming. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
The .NET Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
C#,
VB,
and the .NET Languages
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
The Common Language Runtime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
The .NET Class Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Visual Studio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
The Last
Word
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
■CHAPTER 2 The C# Language. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
The .NET Langua
ges
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19

C# Language Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Case Sensitivity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
Commenting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
Statement Termination . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Variables and Data Types. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Assignment and Initializers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Strings and Escaped Characters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Arrays. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
Enumerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
vii
8911FM.qxd 10/18/07 4:12 PM Page vii
Variable Operations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Advanced Math . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Type Conversions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Object-Based Manipulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
The String Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
The DateTime and TimeSpan Types. . . . . . . . . . . . . . . . . . . . . . . . . . . 36
The Array Type. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Conditional Logic. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
The if Statement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
The switch Statement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Loops. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
The for Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
The foreach Loop. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
The while loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Method Overloading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Delegates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
The Last Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
■CHAPTER 3 Types, Objects, and Namespaces. . . . . . . . . . . . . . . . . . . . . . . . . . 53
The Basics About Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Static Members . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
A Simple Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Building a Basic Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Crea
ting an Object
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Adding Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Adding a Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Adding a Constructor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Adding an Event. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
62
Testing the Product Class. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
V
alue Types and Reference Types
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
66
Assignment Operations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Equality Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Passing Parameters by Reference and by Value . . . . . . . . . . . . . . . . 68
Reviewing .NET Types. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Understanding Namespaces and
Assemblies
. . . . . . . . . . . . . . . . . . . . . . . .
71

Using Namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Importing Namespaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Assemblies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
■CONTENTSviii
8911FM.qxd 10/18/07 4:12 PM Page viii
Advanced Class Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Static Members . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Casting Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Partial Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Generics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
The Last Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
PART 2
■ ■ ■
Developing ASP.NET Applications
■CHAPTER 4 Visual Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
The Promise of Visual Studio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Creating Websites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Crea
ting a New Web
Application
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Websites and Web Projects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
The Hidden Solution Files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
The Solution Explorer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Adding Web Forms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Migra
ting a Website from a Previous Version of Visual Studio
. . . . 96
Designing a Web Page . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

Adding Web Controls. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
The Properties Windo
w
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
The Ana
tomy of a Web Form
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
The Web Form Markup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
The P
age Directive
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
The Doctype . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
The Essentials of XHTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Writing Code. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
The Code-Behind Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
112
Adding Event Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
IntelliSense and Outlining. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
115
Visual Studio Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
The Visual Studio Web Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Single-Step Debugging. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
Variable Watches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
The Last
W
ord
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
127
■CONTENTS ix
8911FM.qxd 10/18/07 4:12 PM Page ix

■CHAPTER 5 Web Form Fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
The Anatomy of an ASP.NET Application. . . . . . . . . . . . . . . . . . . . . . . . . . . 129
ASP.NET File Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
ASP.NET Application Directories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Introducing Server Controls. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
HTML Server Controls. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
Converting an HTML Page to an ASP.NET Page. . . . . . . . . . . . . . . . 134
View State. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
The HTML Control Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Adding the Currency Converter Code. . . . . . . . . . . . . . . . . . . . . . . . . 140
Event Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
Behind the Scenes with the Currency Converter . . . . . . . . . . . . . . . 144
Error Handling. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
Improving the Currency Converter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Adding Multiple Currencies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Storing Information in the List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
Adding Linked Images. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
Setting Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
A Deeper Look at HTML Control Classes. . . . . . . . . . . . . . . . . . . . . . . . . . . 153
HTML Control Events. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Advanced Events with the HtmlInputIma
ge Control
. . . . . . . . . . . . . 154
The HtmlControl Base Class. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
The HtmlContainerControl Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
The HtmlInputControl Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
The Page Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
Sending the User to a New P
age
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 159

HTML Encoding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
Application Events. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
The Global.asax File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
Additional Application Events. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
ASP.NET Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
The web.config File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
Nested Configura
tion
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
165
Storing Custom Settings in the web.config File . . . . . . . . . . . . . . . . 166
The
W
ebsite
Administration Tool (WAT)
. . . . . . . . . . . . . . . . . . . . . . .
168
The Last
Word
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
170
■CONTENTSx
8911FM.qxd 10/18/07 4:12 PM Page x
■CHAPTER 6 Web Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
Stepping Up to Web Controls. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
Basic Web Control Classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
The Web Control Tags. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
Web Control Classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
The WebControl Base Class. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
Units. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176

Enumerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
Colors. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
Fonts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
Focus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
The Default Button. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
List Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
Multiple-Select List Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
The BulletedList Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
Table Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
Web Control Events and AutoPostBack . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
How Postback Events Work . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
The Page Life Cycle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
A Simple Web Page. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
Improving the Greeting Card Genera
tor
. . . . . . . . . . . . . . . . . . . . . . . 204
Genera
ting the Cards
Automatically
. . . . . . . . . . . . . . . . . . . . . . . . . . 206
The Last Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
■CHAPTER 7 State Management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
The Problem of Sta
te
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
View Sta
te
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
The
ViewSta

te Collection
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
212
A View State Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Making View State Secure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
Retaining Member Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Storing Custom Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
T
ransferring Informa
tion Between P
a
ges
. . . . . . . . . . . . . . . . . . . . . . . . . .
218
Cross-Page Posting. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
The Quer
y String
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
224
Cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
228
A Cookie Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
■CONTENTS xi
8911FM.qxd 10/18/07 4:12 PM Page xi
Session State . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
Session Tracking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
Using Session State. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
A Session State Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
Session State Configuration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
Cookieless. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237

Timeout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
Application State . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
An Overview of State Management Choices. . . . . . . . . . . . . . . . . . . . . . . . 247
The Last Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
■CHAPTER 8 Error Handling, Logging, and Tracing . . . . . . . . . . . . . . . . . . . . 249
Common Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
Exception Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
The Exception Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
The Exception Chain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
Handling Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
Catching Specific Exceptions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
Nested Exception Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
Exception Handling in Action . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
Mastering Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
Throwing
Your Own Exceptions
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
Logging Exceptions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
Viewing the Windows Event Logs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
Writing to the Event Log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
Custom Logs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
A Custom Logging Class. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
Retrieving Log Information. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
Error P
ages
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
275
Error Modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
Custom Error Pa

ges
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
278
Page Tracing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
Enabling Tracing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
Tracing Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
Writing Trace Information. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
A
pplica
tion-Level
Tracing
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
291
The Last Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
■CONTENTSxii
8911FM.qxd 10/18/07 4:12 PM Page xii
■CHAPTER 9 Deploying ASP.NET Applications. . . . . . . . . . . . . . . . . . . . . . . . . . 295
ASP.NET Applications and the Web Server. . . . . . . . . . . . . . . . . . . . . . . . . 295
How Web Servers Work . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
The Virtual Directory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
Web Application URLs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
Web Farms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
Internet Information Services (IIS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
The Many Faces of IIS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
Installing IIS 5 (in Windows XP). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
Installing IIS 6 (in Windows Server 2003) . . . . . . . . . . . . . . . . . . . . . 302
Installing IIS 7 (in
Windows Vista)
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
Installing IIS 7 (in Windows Server 2008) . . . . . . . . . . . . . . . . . . . . . 305

Registering the ASP.NET File Mappings. . . . . . . . . . . . . . . . . . . . . . . 305
Verifying That ASP.NET Is Correctly Installed . . . . . . . . . . . . . . . . . . 306
Managing Websites with IIS Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308
Creating a Virtual Directory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
Configuring a Virtual Directory. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
Deploying a Simple Site . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
Web Applications and Components . . . . . . . . . . . . . . . . . . . . . . . . . . 317
Other Configuration Steps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
Code Compila
tion
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
The
ASP
.NET Account
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
Deploying with Visual Studio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
Creating a Virtual Directory for a New Project . . . . . . . . . . . . . . . . . 324
Copying a Website. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
Publishing a
Website
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
The Last
Word
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
PART 3
■ ■ ■
Building Better Web Forms
■CHAPTER 10 Validation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
333
Understanding

V
alida
tion
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
333
The Validator Controls. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
Ser
ver
-Side
Validation
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
335
Client-Side
Validation
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
335
■CONTENTS xiii
8911FM.qxd 10/18/07 4:12 PM Page xiii
The Validation Controls. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
A Simple Validation Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
Other Display Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
Manual Validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
Validating with Regular Expressions. . . . . . . . . . . . . . . . . . . . . . . . . . 343
A Validated Customer Form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
Validation Groups. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352
The Last Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354
■CHAPTER 11 Rich Controls. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
The Calendar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
Forma
tting the Calendar

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357
Restricting Dates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358
The AdRotator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
The
Advertisement File
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
The AdRotator Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364
Pages with Multiple Views. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366
The MultiView Control. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
The Wizard Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
The Last
Word
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379
■CHAPTER 12 User Controls and Graphics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
User Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
Creating a Simple User Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382
Independent User Controls. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384
Integra
ted User Controls
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
User Control Events. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
P
assing Informa
tion with Events
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
391
Dynamic Graphics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394
Basic Dra
wing
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

394
Drawing a Custom Image. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
Placing Custom Images Inside Web Pages . . . . . . . . . . . . . . . . . . . . 398
Image Format and Quality . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400
The Last Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403
■CONTENTSxiv
8911FM.qxd 10/18/07 4:12 PM Page xiv
c1f7fa939e14ed6480dade2089a967cf
■CHAPTER 13 Styles, Themes, and Master Pages . . . . . . . . . . . . . . . . . . . . . . . 405
Styles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
Style Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
Creating a Basic Inline Style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
Creating a Style Sheet. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414
Applying Style Sheet Rules. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417
Themes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419
How Themes Work . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419
Applying a Simple Theme. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421
Handling Theme Conflicts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422
Crea
ting Multiple Skins for the Same Control
. . . . . . . . . . . . . . . . . . 424
More Advanced Skins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425
Master Page Basics. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427
A Simple Master Page and Content Page . . . . . . . . . . . . . . . . . . . . . 428
How Master Pages and Content Pages Are Connected. . . . . . . . . . 431
A Master Page with Multiple Content Regions . . . . . . . . . . . . . . . . . 433
Default Content . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436
Master Pages and Relative Paths . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437
Advanced Master Pages. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438
Table-Based Layouts. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438

Code in a Master P
age
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442
Interacting with a Master P
age Programmatically
. . . . . . . . . . . . . . 442
The Last Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444
■CHAPTER 14 Website Navigation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445
Site Ma
ps
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445
Defining a Site Ma
p
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446
Seeing a Simple Site Ma
p in
Action
. . . . . . . . . . . . . . . . . . . . . . . . . .
450
Binding an Ordinary Page to a Site Map . . . . . . . . . . . . . . . . . . . . . . 451
Binding a Master Page to a Site Map. . . . . . . . . . . . . . . . . . . . . . . . . 452
Binding Portions of a Site Map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454
The SiteMap Class. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459
Ma
pping URLs
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
461
The SiteMapPath Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462
Customizing the SiteMa
pP

a
th
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
463
Using SiteMa
pPath Styles and Templates
. . . . . . . . . . . . . . . . . . . . .
464
Adding Custom Site Map Information. . . . . . . . . . . . . . . . . . . . . . . . . 466
■CONTENTS xv
8911FM.qxd 10/18/07 4:12 PM Page xv
The TreeView Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467
TreeView Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467
TreeView Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470
The Menu Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474
Menu Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476
Menu Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477
The Last Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480
PART 4
■ ■ ■
Working with Data
■CHAPTER 15 ADO.NET Fundamentals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483
Understanding Data Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483
The Role of the Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483
Da
tabase Access in the Web World
. . . . . . . . . . . . . . . . . . . . . . . . . . 485
Configuring Your Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486
SQL Server Express. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486
Browsing and Modifying Databases in Visual Studio. . . . . . . . . . . . 487

The sqlcmd Command-Line Tool . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489
SQL Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490
Running Queries in Visual Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491
The Select Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493
The SQL Update Sta
tement
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495
The SQL Insert Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497
The SQL Delete Statement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498
ADO.NET Basics. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498
Data Namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500
The Data Provider Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501
Direct Data Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503
Crea
ting a Connection
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
504
The Select Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511
The DataReader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
512
Putting It All Together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513
Updating Data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517
Disconnected Data Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527
Selecting Disconnected Data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529
Selecting Multiple
T
ables
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
531
Defining Relationships . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533

The Last Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536
■CONTENTSxvi
8911FM.qxd 10/18/07 4:12 PM Page xvi
■CHAPTER 16 Data Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537
Introducing Data Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537
Types of ASP.NET Data Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538
How Data Binding Works . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538
Single-Value Data Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539
A Simple Data Binding Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539
Simple Data Binding with Properties . . . . . . . . . . . . . . . . . . . . . . . . . 542
Problems with Single-Value Data Binding. . . . . . . . . . . . . . . . . . . . . 543
Using Code Instead of Simple Data Binding . . . . . . . . . . . . . . . . . . . 544
Repeated-Value Data Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544
Da
ta Binding with Simple List Controls
. . . . . . . . . . . . . . . . . . . . . . . 545
A Simple List Binding Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546
Strongly Typed Collections. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547
Multiple Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548
Data Binding with a Dictionary Collection . . . . . . . . . . . . . . . . . . . . . 549
Using the DataValueField Property . . . . . . . . . . . . . . . . . . . . . . . . . . . 551
Data Binding with ADO.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552
Creating a Record Editor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554
Data Source Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 559
The Page Life Cycle with Data Binding . . . . . . . . . . . . . . . . . . . . . . . 561
The SqlDa
taSource
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561
Selecting Records . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563
Parameterized Commands. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565

Handling Errors. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570
Updating Records. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571
The Last
Word
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576
■CHAPTER 17 The Data Controls. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 577
The GridView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 577
Automatically Generating Columns. . . . . . . . . . . . . . . . . . . . . . . . . . . 578
Defining Columns. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579
Formatting the GridView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583
F
orma
tting F
ields
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
584
Using Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585
F
orma
tting-Specific
Values
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
588
Selecting a GridView Ro
w
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
589
Adding a Select Button . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 590
Using Selection to Create Master-Details Pages . . . . . . . . . . . . . . . 591
■CONTENTS xvii

8911FM.qxd 10/18/07 4:12 PM Page xvii
Editing with the GridView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593
Sorting and Paging the GridView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596
Sorting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596
Paging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599
Using GridView Templates. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601
Using Multiple Templates. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603
Editing Templates in Visual Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . 604
Handling Events in a Template . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605
Editing with a Template . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 606
The DetailsView and FormView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 610
The DetailsView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 610
The F
ormView
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613
The Last Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615
■CHAPTER 18 Files and Streams. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617
Files and Web Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617
File System Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 618
The Path Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 619
The Directory and File Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 620
The Director
yInfo and FileInfo Classes
. . . . . . . . . . . . . . . . . . . . . . . . 625
The DriveInfo Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 627
A Sample File Browser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 628
Reading and Writing with Streams. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 632
Text F
iles
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 632

Binary Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635
Shortcuts for Reading and
Writing F
iles
. . . . . . . . . . . . . . . . . . . . . . . 636
A Simple Guest Book. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 637
Allowing File Uploads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 642
The FileUpload Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643
The Last
Word
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
646
■CHAPTER 19 XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647
XML’s Hidden Role in .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647
Configuration Files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647
XHTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647
ADO.NET Data Access. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 648
An
ywhere Miscellaneous Da
ta Is Stored
. . . . . . . . . . . . . . . . . . . . . .
648
■CONTENTSxviii
8911FM.qxd 10/18/07 4:12 PM Page xviii
XML Explained . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 648
Improving the List with XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 650
XML Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 651
Attributes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652
Comments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 653
The XML Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654

The XML TextWriter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654
The XML Text Reader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657
Working with XML Documents in Memory . . . . . . . . . . . . . . . . . . . . 662
Reading an XML Document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 667
Searching an XML Document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 670
XML
Valida
tion
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671
XML Namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671
XML Schema Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673
Valida
ting an XML Document
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675
XML Display and Transforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 678
The Xml Web Control. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 681
XML Data Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682
Nonhierarchical Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683
Hierarchical Binding with the TreeView. . . . . . . . . . . . . . . . . . . . . . . 685
Binding to XML Content from Other Sources . . . . . . . . . . . . . . . . . . 687
The Last Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 688
PART 5
■ ■ ■
Website Security
■CHAPTER 20 Security Fundamentals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 691
Determining Security Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 691
The ASP.NET Security Model. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 692
The
Visual Studio Web Server
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

696
Authentication and Authorization . . . . . . . . . . . . . . . . . . . . . . . . . . . . 696
F
orms Authentication
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
697
Web.config Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 699
Authorization Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 699
The WAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 703
The Login Page. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 706
Windo
ws
Authentica
tion
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
710
Web.config Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 711
IIS Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713
A Windows Authentication Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716
■CONTENTS xix
8911FM.qxd 10/18/07 4:12 PM Page xix
Impersonation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 717
Understanding Impersonation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 718
Programmatic Impersonation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 718
Confidentiality with SSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 719
Creating a Certificate Request. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 719
Secure Sockets Layer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 721
The Last Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723
■CHAPTER 21 Membership . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725
The Membership Data Store . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725

Membership with SQL Server 2005 Express . . . . . . . . . . . . . . . . . . 727
Using the Full Version of SQL Ser
ver
. . . . . . . . . . . . . . . . . . . . . . . . . 729
Configuring the Membership Provider . . . . . . . . . . . . . . . . . . . . . . . . 731
Creating Users with the WAT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 735
The Membership and MembershipUser Classes . . . . . . . . . . . . . . . 737
Authentication with Membership . . . . . . . . . . . . . . . . . . . . . . . . . . . . 741
Disabled Accounts. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 742
The Security Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 742
The Login Control. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 743
The Crea
teUserWizard Control
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 748
The PasswordRecovery Control. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 752
Role-Based Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 755
Creating and
Assigning Roles
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 755
Restricting Access Based on Roles. . . . . . . . . . . . . . . . . . . . . . . . . . . 758
The LoginView Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 759
The Last
Word
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 761
■CHAPTER 22 Profiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 763
Understanding Profiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 763
Profile P
erformance
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
764

How Profiles Store Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 765
Using the SqlProfileProvider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 766
Enabling Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 767
Using the Full Version of SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . 767
The Profile Databases. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 769
Defining Profile Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 770
Using Profile Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
771
■CONTENTSxx
8911FM.qxd 10/18/07 4:12 PM Page xx
Profile Serialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 773
Profile Groups. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 775
Profiles and Custom Data Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 775
The Profile API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 779
Anonymous Profiles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 782
The Last Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 785
PART 6
■ ■ ■
Advanced ASP.NET
■CHAPTER 23 Component-Based Programming . . . . . . . . . . . . . . . . . . . . . . . . . 789
Why Use Components?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 789
Component Jargon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 790
Three-Tier Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 790
Enca
psulation
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 792
Business Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 792
Data Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 792
Components and Classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 793
Creating a Component . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 793

Classes and Namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 794
Class Members . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 796
Adding a Reference to the Component . . . . . . . . . . . . . . . . . . . . . . . 797
Using the Component . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 799
Properties and State . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 801
A Stateful Account Class. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 802
A Sta
teless
AccountUtility Class
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 803
Data-Access Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 804
A Simple Data-Access Component. . . . . . . . . . . . . . . . . . . . . . . . . . . 804
Using the Data-Access Component . . . . . . . . . . . . . . . . . . . . . . . . . . 809
Enhancing the Component with Error Handling . . . . . . . . . . . . . . . .
812
Enhancing the Component with Aggregate Information . . . . . . . . . 813
The ObjectDataSource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
814
Making Classes the ObjectDataSource Can Understand. . . . . . . . . 815
Selecting Records . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 815
Using Method Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 816
Updating Records. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 817
The Last
W
ord
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
820
■CONTENTS xxi
8911FM.qxd 10/18/07 4:12 PM Page xxi
■CHAPTER 24 Caching. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 821

Understanding Caching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 821
When to Use Caching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 822
Caching in ASP.NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 823
Output Caching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 824
Caching on the Client Side. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 825
Caching and the Query String . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 826
Caching with Specific Query String Parameters. . . . . . . . . . . . . . . . 827
A Multiple Caching Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 827
Custom Caching Control. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 829
Fragment Caching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 830
Cache Profiles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 831
Data Caching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 832
Adding Items to the Cache. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 832
A Simple Cache Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 833
Caching to Provide Multiple Views . . . . . . . . . . . . . . . . . . . . . . . . . . . 835
Caching with the Data Source Controls . . . . . . . . . . . . . . . . . . . . . . . 839
Caching with Dependencies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 843
File Dependencies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 843
Cache Item Dependencies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 844
SQL Ser
ver 2000 Cache Dependencies
. . . . . . . . . . . . . . . . . . . . . . . 844
SQL Ser
ver 2005 and 2008 Cache Dependencies
. . . . . . . . . . . . . . 849
The Last Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853
■CHAPTER 25 ASP.NET AJAX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 855
Understanding
Ajax
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 856

Ajax:
The Good
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 856
Ajax:
The Bad
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
856
The ASP.NET AJAX Toolkit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 857
The ScriptManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 858
Partial Refreshes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 859
A Simple UpdatePanel Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 861
Handling Errors. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
864
Conditional Updates. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 865
T
riggers
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
867
Progress Notifica
tion
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
871
Showing a Simulated Progress Bar . . . . . . . . . . . . . . . . . . . . . . . . . . 872
Cancellation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 874
■CONTENTSxxii
8911FM.qxd 10/18/07 4:12 PM Page xxii
Timed Refreshes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 876
The ASP.NET AJAX Control Toolkit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 878
Installing the ASP.NET AJAX Control Toolkit . . . . . . . . . . . . . . . . . . . 878
The Accordion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 880

The AutoCompleteExtender . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 884
Getting More Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 887
The Last Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 888
■INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 891
■CONTENTS xxiii
8911FM.qxd 10/18/07 4:12 PM Page xxiii

×