MacDonald.book Page i Friday, December 30, 2005 12:59 PM Beginning ASP.NET 2.0 in C# 2005 From Novice to Professional ■ ■ ■ Matthew MacDonald MacDonald.book Page ii 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 (cid:1)(cid:2)(cid:3)(cid:4)(cid:2)(cid:5)(cid:6)(cid:7)(cid:8)(cid:9)(cid:5)(cid:10)(cid:2)(cid:11)(cid:7)(cid:12)(cid:4)(cid:2)(cid:6)(cid:5)(cid:13)(cid:14)(cid:15)(cid:16)(cid:1)(cid:14), or visit (cid:17)(cid:18)(cid:18)(cid:10)(cid:19)(cid:20)(cid:20)(cid:21)(cid:21)(cid:21)(cid:15)(cid:5)(cid:10)(cid:2)(cid:11)(cid:7)(cid:12)(cid:4)(cid:2)(cid:1)(cid:7)(cid:22)(cid:11)(cid:7)(cid:4)(cid:15)(cid:16)(cid:1)(cid:14). 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 (cid:11)(cid:7)(cid:23)(cid:1)(cid:9)(cid:24)(cid:10)(cid:2)(cid:4)(cid:5)(cid:5)(cid:15)(cid:16)(cid:1)(cid:14), or visit (cid:17)(cid:18)(cid:18)(cid:10)(cid:19)(cid:20)(cid:20)(cid:21)(cid:21)(cid:21)(cid:15)(cid:24)(cid:10)(cid:2)(cid:4)(cid:5)(cid:5)(cid:15)(cid:16)(cid:1)(cid:14). 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 (cid:17)(cid:18)(cid:18)(cid:10)(cid:19)(cid:20)(cid:20)(cid:21)(cid:21)(cid:21)(cid:15)(cid:24)(cid:10)(cid:2)(cid:4)(cid:5)(cid:5)(cid:15)(cid:16)(cid:1)(cid:14) 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 iii Friday, December 30, 2005 12:59 PM For my loving wife, Faria MacDonald.book Page iv Friday, December 30, 2005 12:59 PM 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 iv MacDonald.book Page v Friday, December 30, 2005 12:59 PM 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 v MacDonald.book Page vi Friday, December 30, 2005 12:59 PM MacDonald.book Page vii Friday, December 30, 2005 12:59 PM 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 vii MacDonald.book Page viii 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 ix 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