Thư viện tri thức trực tuyến
Kho tài liệu với 50,000+ tài liệu học thuật
© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

Beginning ASP.NET 2.0 in C# 2005
Nội dung xem thử
Mô tả chi tiết
Beginning ASP.NET 2.0
in C# 2005
From Novice to Professional
■■■
Matthew MacDonald
MacDonald.book Page i Friday, December 30, 2005 12:59 PM
Beginning ASP.NET 2.0 in C# 2005: From Novice to Professional
Copyright © 2006 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-572-5
ISBN-10 (pbk): 1-59059-572-6
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.
Contributor of Chapter 27: Julian Templeman
Lead Editor: Jonathan Hassell
Technical Reviewer: Ronald Landers
Editorial Board: Steve Anglin, Dan Appleman, Ewan Buckingham, Gary Cornell, Jason Gilmore, Jonathan
Hassell, Chris Mills, Dominic Shakeshaft, Jim Sumser
Project Manager and Production Director: Grace Wong
Copy Edit Manager: Nicole LeClerc
Copy Editor: Kim Wimpsett
Assistant Production Director: Kari Brooks-Copony
Production Editor: Kelly Winquist
Compositor: Pat Christenson
Proofreader: Nancy Riddiough
Indexer: Michael Brinkman
Artist: Kinetic Publishing Services, LLC
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 2560 Ninth Street, Suite 219, Berkeley, CA
94710. 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 precaution
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
in the Source Code section.
You will need to answer questions pertaining to this book in order to successfully download the code.
MacDonald.book Page ii Friday, December 30, 2005 12:59 PM
For my loving wife, Faria
MacDonald.book Page iii Friday, December 30, 2005 12:59 PM
iv
Contents at a Glance
About the Author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxvi
About the Technical Reviewer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxvii
Acknowledgments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .xxviii
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxix
PART 1 ■ ■ ■ Introducing .NET
■CHAPTER 1 Introducing the .NET Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
■CHAPTER 2 Learning the C# Language. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
■CHAPTER 3 Types, Objects, and Namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
■CHAPTER 4 Introducing Visual Studio 2005. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
PART 2 ■ ■ ■ Developing ASP.NET Applications
■CHAPTER 5 Web Form Fundamentals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
■CHAPTER 6 Web Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
■CHAPTER 7 Tracing, Logging, and Error Handling. . . . . . . . . . . . . . . . . . . . . . . . . 219
■CHAPTER 8 Validation and Rich Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
■CHAPTER 9 State Management. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
■CHAPTER 10 Master Pages and Themes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
■CHAPTER 11 Website Navigation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
■CHAPTER 12 Deploying ASP.NET Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427
PART 3 ■ ■ ■ Working with Data
■CHAPTER 13 ADO.NET Fundamentals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471
■CHAPTER 14 Data Binding. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539
■CHAPTER 15 The Data Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 581
■CHAPTER 16 Files and Streams. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625
■CHAPTER 17 XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 655
MacDonald.book Page iv Friday, December 30, 2005 12:59 PM
v
PART 4 ■ ■ ■ Website Security
■CHAPTER 18 Security Fundamentals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 707
■CHAPTER 19 Membership . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 739
■CHAPTER 20 Profiles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 781
PART 5 ■ ■ ■ Web Services
■CHAPTER 21 Web Services Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 813
■CHAPTER 22 Creating Web Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 831
■CHAPTER 23 Enhancing Web Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 869
PART 6 ■ ■ ■ Advanced ASP.NET
■CHAPTER 24 Component-Based Programming. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 903
■CHAPTER 25 Custom Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 937
■CHAPTER 26 Caching and Performance Tuning . . . . . . . . . . . . . . . . . . . . . . . . . . . . 985
■CHAPTER 27 Web Parts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1029
■INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1063
MacDonald.book Page v Friday, December 30, 2005 12:59 PM
MacDonald.book Page vi Friday, December 30, 2005 12:59 PM
vii
Contents
About the Author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxvi
About the Technical Reviewer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxvii
Acknowledgments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .xxviii
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxix
PART 1 ■ ■ ■ Introducing .NET
■CHAPTER 1 Introducing the .NET Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
The Evolution of Web Development. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
HTML and HTML Forms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Server-Side Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Client-Side Programming. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
The Problems with ASP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
The .NET Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
C#, VB .NET, and the .NET Languages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
The Intermediate Language. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Other .NET Languages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
The Common Language Runtime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
The .NET Class Library. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Visual Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
.NET 2.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
C# 2.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
ASP.NET 2.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Visual Studio 2005 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
The Last Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
MacDonald.book Page vii Friday, December 30, 2005 12:59 PM
viii ■CONTENTS
■CHAPTER 2 Learning the C# Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
The .NET Languages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
C# Language Basics. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Case Sensitivity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Commenting. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Line Termination . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Block Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Variables and Data Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Assignment and Initializers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Strings and Escaped Characters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Enumerations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Variable Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Advanced Math . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Type Conversions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Object-Based Manipulation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
The String Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
The DateTime and TimeSpan Classes. . . . . . . . . . . . . . . . . . . . . . . . . 42
The Array Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Conditional Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
The if Block . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
The switch Block. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Loop Structures. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
The for Block . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
The foreach Block . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
The while Block . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Parameters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Method Overloading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Delegates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
The Last Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
■CHAPTER 3 Types, Objects, and Namespaces. . . . . . . . . . . . . . . . . . . . . . . . . . 59
The Basics About Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Static Members . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
A Simple Class. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
MacDonald.book Page viii Friday, December 30, 2005 12:59 PM
■CONTENTS ix
Building a Basic Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Creating a Live Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Adding Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Adding a Basic Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Adding a Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Adding a Basic Event . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Testing the Product Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Value Types and Reference Types. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Assignment Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Equality Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Passing Parameters by Reference and by Value . . . . . . . . . . . . . . . . 74
Reviewing .NET Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Understanding Namespaces and Assemblies . . . . . . . . . . . . . . . . . . . . . . . 78
Using Namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Importing Namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Assemblies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Advanced Class Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Static Members . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Casting Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
Partial Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Generics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
The Last Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
■CHAPTER 4 Introducing Visual Studio 2005 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
The Promise of Visual Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Creating a Website . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
The Solution Explorer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
Designing a Web Page. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Adding Web Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
The Properties Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Adding Ordinary HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
HTML Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
Writing Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Adding Event Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
IntelliSense and Outlining . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Assembly References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
MacDonald.book Page ix Friday, December 30, 2005 12:59 PM
x ■CONTENTS
Visual Studio Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Single-Step Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
Variable Watches. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
The Last Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
PART 2 ■ ■ ■ Developing ASP.NET Applications
■CHAPTER 5 Web Form Fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
The Anatomy of an ASP.NET Application . . . . . . . . . . . . . . . . . . . . . . . . . . 125
ASP.NET File Types. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
ASP.NET Application Directories. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Application Updates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
A Simple One-Page Applet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
The ASP Solution—and Its Problems . . . . . . . . . . . . . . . . . . . . . . . . 133
The ASP.NET Solution: Server Controls . . . . . . . . . . . . . . . . . . . . . . . 133
HTML Server Controls. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
View State. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
The HTML Control Classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
Event Handling. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
Behind the Scenes with the CurrencyConverter . . . . . . . . . . . . . . . 143
Improving the Currency Converter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
Adding Multiple Currencies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
Storing Information in the List. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
Adding Linked Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
Setting Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
A Deeper Look at HTML Control Classes . . . . . . . . . . . . . . . . . . . . . . . . . . 152
HTML Control Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Advanced Events with the HtmlInputImage Control . . . . . . . . . . . . 154
The HtmlControl Base Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
The HtmlContainerControl Class. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
The HtmlInputControl Class. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
The Page Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
The Controls Collection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
The HttpRequest Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
The HttpResponse Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
The ServerUtility Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
MacDonald.book Page x Friday, December 30, 2005 12:59 PM
■CONTENTS xi
ASP.NET Configuration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
The web.config File. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
Nested Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
Storing Custom Settings in the web.config File . . . . . . . . . . . . . . . . 167
Modifying web.config Settings Programmatically . . . . . . . . . . . . . . 171
The Website Administration Tool (WAT) . . . . . . . . . . . . . . . . . . . . . . 172
The Last Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
■CHAPTER 6 Web Controls. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
Stepping Up to Web Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
Basic Web Control Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
The Web Control Tags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
Web Control Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
The WebControl Base Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
Units . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
Enumerated Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
Colors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
Fonts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
Focus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
The Default Button . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
List Controls. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
Multiple-Select List Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
The BulletedList Control. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
Table Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
AutoPostBack and Web Control Events. . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
How Postback Events Work. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
The Page Life Cycle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
A Simple Web Page Applet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
Improving the Greeting Card Applet. . . . . . . . . . . . . . . . . . . . . . . . . . 212
Generating the Cards Automatically. . . . . . . . . . . . . . . . . . . . . . . . . . 214
The Last Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
■CHAPTER 7 Tracing, Logging, and Error Handling . . . . . . . . . . . . . . . . . . . . 219
Common Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
Exception Handling. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
The Exception Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
The Exception Chain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
MacDonald.book Page xi Friday, December 30, 2005 12:59 PM
xii ■CONTENTS
Handling Exceptions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Catching Specific Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
Nested Exception Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
Exception Handling in Action. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
Mastering Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
Throwing Your Own Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
Logging Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
Using the EventLog Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
Custom Logs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
Retrieving Log Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Error Pages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
Error Modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
A Custom Error Page . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
Specific Custom Error Pages. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
Page Tracing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
Enabling Tracing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
Tracing Information. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
Writing Trace Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
Reading Trace Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
Application-Level Tracing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
The Last Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
■CHAPTER 8 Validation and Rich Controls. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
Validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
The Validation Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
The Validation Process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
Client-Side Validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
The Validator Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
A Simple Validation Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
Other Display Options. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
Manual Validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
Understanding Regular Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
Literals and Metacharacters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
Finding a Regular Expression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
A Validated Customer Form. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
Validation Groups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
Rich Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
The Calendar Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
The AdRotator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
MacDonald.book Page xii Friday, December 30, 2005 12:59 PM
■CONTENTS xiii
Pages with Multiple Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
The MultiView Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
The Wizard Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
The Last Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
■CHAPTER 9 State Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
The Problem of State . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
View State . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
A View State Example. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
Making View Sate Secure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
Retaining Member Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
Storing Custom Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
Transferring Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
Cross-Page Posting. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
The Query String . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
Custom Cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
A Cookie Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
Session State. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
Session Tracking. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
Using Session State . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
A Session State Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
Session State Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
Cookieless . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
Timeout. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
Application State. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352
An Overview of State Management Choices . . . . . . . . . . . . . . . . . . . . . . . 354
The Global.asax Application File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356
Application Events. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357
The Last Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358
■CHAPTER 10 Master Pages and Themes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
Master Page Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
A Simple Master Page and Content Page . . . . . . . . . . . . . . . . . . . . . 360
How Master Pages and Content Pages Are Connected . . . . . . . . . 364
A Master Page with Multiple Content Regions . . . . . . . . . . . . . . . . . 366
Default Content . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
Master Pages and Relative Paths . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370
MacDonald.book Page xiii Friday, December 30, 2005 12:59 PM
xiv ■CONTENTS
Advanced Master Pages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371
Table-Based Layouts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
Code in a Master Page . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
Interacting with a Master Page Programmatically. . . . . . . . . . . . . . 375
Themes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377
How Themes Work . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378
Applying a Simple Theme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
Handling Theme Conflicts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
Creating Multiple Skins for the Same Control . . . . . . . . . . . . . . . . . 383
Skins with Templates and Images . . . . . . . . . . . . . . . . . . . . . . . . . . . 384
The Last Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
■CHAPTER 11 Website Navigation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
Site Maps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
Defining a Site Map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
Seeing a Simple Site Map in Action . . . . . . . . . . . . . . . . . . . . . . . . . . 395
Binding an Ordinary Page to a Site Map . . . . . . . . . . . . . . . . . . . . . . 396
Binding a Master Page to a Site Map . . . . . . . . . . . . . . . . . . . . . . . . 397
Binding Portions of a SiteMap. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399
Navigating Programmatically . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
Mapping URLs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407
The SiteMapPath Control. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409
Customizing the SiteMapPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410
Using SiteMapPath Styles and Templates . . . . . . . . . . . . . . . . . . . . 410
Adding Custom Site Map Information . . . . . . . . . . . . . . . . . . . . . . . . 412
The TreeView Control. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413
TreeView Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414
TreeView Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
The Menu Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420
Menu Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421
Menu Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
The Last Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425
■CHAPTER 12 Deploying ASP.NET Applications . . . . . . . . . . . . . . . . . . . . . . . . . 427
ASP.NET Applications and the Web Server . . . . . . . . . . . . . . . . . . . . . . . . 427
How Web Servers Work . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427
Web Application URLs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429
Web Farms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431
MacDonald.book Page xiv Friday, December 30, 2005 12:59 PM