Get more out of
wrox.com
Interact
Take an active role online by participating in our
P2P forums @ p2p.wrox.com
Wrox Online Library
Hundreds of our books are available online
through Books24x7.com
Wrox Blox
Download short informational pieces and code
to keep you up to date and out of trouble!
Join the Community
Sign up for our free monthly newsletter at
newsletter.wrox.com
Browse
Ready for more Wrox? We have books and
e-books available on .NET, SQL Server, Java,
XML, Visual Basic, C#/ C++, and much more!
Contact Us.
We always like to get feedback from our readers. Have a book idea?
inTroducTion . . . xxxix
chaPTer 1
Application and Page Frameworks � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �1
chaPTer 2
ASP�NET Server Controls and Client-Side Scripts � � � � � � � � � � � � � � � � � � � � � � � � � � � � 49
chaPTer 3
ASP�NET Web Server Controls � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 85
chaPTer 4
Validation Server Controls � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 157
chaPTer 5
Working with Master Pages � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 187
chaPTer 6
Themes and Skins � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 217
chaPTer 7
Data Binding � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 237
chaPTer 8
Data Management with ADO�NET � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �309
chaPTer 9
Querying with LINQ � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 371
chaPTer 10
Working with XML and LINQ to XML � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �405
chaPTer 11
Introduction to the Provider Model � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 457
chaPTer 12
Extending the Provider Model � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 491
chaPTer 13
Site Navigation � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 519
chaPTer 14
Personalization � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �569
chaPTer 15
Membership and Role Management � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 597
chaPTer 16
Portal Frameworks and Web Parts � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �643
chaPTer 17
HTML and CSS Design with ASP�NET � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �683
chaPTer 18
ASP�NET AJAX � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 709
chaPTer 19
ASP�NET AJAX Control Toolkit � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 749
chaPTer 20
Security � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �805
chaPTer 21
State Management � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �835
chaPTer 22
Caching � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �865
chaPTer 23
Debugging and Error Handling � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �895
chaPTer 24
File I/O and Streams � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 927
chaPTer 25
User and Server Controls � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 979
chaPTer 29
ADO�NET Entity Framework � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 1105
chaPTer 30
ASP�NET Dynamic Data � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 1129
chaPTer 31
Working with Services � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 1153
chaPTer 32
Building Global Applications � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � �1217
chaPTer 33
Configuration � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 1239
chaPTer 34
Instrumentation � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 1285
chaPTer 35
Administration and Management � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 1315
chaPTer 36
Packaging and Deploying ASP�NET Applications � � � � � � � � � � � � � � � � � � � � � � � � � � 1337
aPPendix a
Migrating Older ASP�NET Projects � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 1369
aPPendix B
ASP�NET Ultimate Tools � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 1381
aPPendix c
Silverlight 3 and ASP�NET � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 1399
aPPendix d
Dynamic Types and Languages � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 1419
aPPendix e
ASP�NET Online Resources � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 1427
asP.neT 4
in C# and VB
Bill Evjen
Scott Hanselman
10475 Crosspoint Boulevard Indianapolis, IN 46256 www.wiley.com
Copyright © 2010 by Wiley Publishing, Inc., Indianapolis, Indiana
Published simultaneously in Canada
ISBN: 978-0-470-50220-4
Manufactured in the United States of America
10 9 8 7 6 5 4 3 2 1
No part of this publication may be reproduced, stored in a retrieval system or transmitted in any form or by any means, electronic, mechanical, photocopying, recording, scanning or otherwise, except as permitted under Sections 107 or 108 of the 1976 United States Copyright Act, without either the prior written permission of the Publisher, or authorization through payment of the appropriate per-copy fee to the Copyright Clearance Center, 222 Rosewood Drive, Danvers, MA 01923, (978) 750-8400, fax (978) 646-8600. Requests to the Publisher for permission should be addressed to the Permissions Department, John Wiley & Sons, Inc., 111 River Street, Hoboken, NJ 07030, (201) 748-6011,
fax (201) 748-6008, or online at http://www.wiley.com/go/permissions.
Limit of Liability/Disclaimer of Warranty: The publisher and the author make no representations or warranties with respect to the accuracy or completeness of the contents of this work and specifically disclaim all warranties, including without limitation warranties of fitness for a particular purpose. No warranty may be created or extended by sales or promotional materials. The advice and strategies contained herein may not be suitable for every situation. This work is sold with the understanding that the publisher is not engaged in rendering legal, accounting, or other professional services. If professional assistance is required, the services of a competent professional person should be sought. Neither the publisher nor the author shall be liable for damages arising herefrom. The fact that an organization or Web site is referred to in this work as a citation and/or a potential source of further information does not mean that the author or the publisher endorses the information the organization or Web site may provide or recommendations it may make. Further, readers should be aware that Internet Web sites listed in this work may have changed or disappeared between when this work was written and when it is read.
For general information on our other products and services please contact our Customer Care Department within the United States at (877) 762-2974, outside the United States at (317) 572-3993 or fax (317) 572-4002.
Wiley also publishes its books in a variety of electronic formats. Some content that appears in print may not be available in electronic books.
Library of Congress Control Number: 2009943645
—Bill Evjen
To Momo and the boys. Toot!
Bill evjen is an active proponent of .NET technologies and community-based learning initiatives for .NET. He has been actively involved with .NET since the first bits were released in 2000. In the same year, Bill founded the St. Louis .NET User Group (www.stlnet.org), one of the world’s first such groups. Bill is also the founder and former executive director of the International .NET Association (www.ineta.org), which represents more than 500,000 members worldwide.
Based in St. Louis, Missouri, Bill is an acclaimed author and speaker on ASP.NET and Services. He has authored or coauthored more than 20 books including Professional C# 2010, Professional VB 2008, ASP.NET Professional Secrets, XML Web Services for ASP.NET, and Web Services Enhancements: Understanding the WSE for Enterprise Applications (all published by Wiley). In addition to writing, Bill is a speaker at numerous conferences, including DevConnections, VSLive!, and TechEd. Along with these items, Bill works closely with Microsoft as a Microsoft Regional Director and an MVP.
Bill is the Global Head of Platform Architecture for Thomson Reuters, Lipper, the international news and financial services company (www.thomsonreuters.com). He graduated from Western Washington University in Bellingham, Washington, with a Russian language degree. When he isn’t tinkering on the computer, he can usually be found at his summer house in Toivakka, Finland. You can reach Bill on Twitter at @billevjen.
scoTT hanselman works for Microsoft as a Principal Program Manager Lead in the
Server and Tools Online Group, aiming to spread the good word about developing software, most often on the Microsoft stack. Before this, Scott was the Chief Architect at Corillian, an eFinance enabler, for 6+ years, and before Corillian, he was a Principal Consultant at Microsoft Gold Partner for 7 years. He was also involved in a few things like the MVP and RD programs and will speak about computers (and other passions) whenever someone will listen to him. He blogs at www.hanselman.com, podcasts at www.hanselminutes.com, and runs a team that contributes to www.asp.net, www.windowsclient.net, and www.silverlight.net. Follow Scott on Twitter @shanselman.
devin rader works at Infragistics where he focuses on delivering great experiences to
carlos figueroa has been developing and designing Web solutions for the last 8 years, participating in international projects for the pharmaceutical industry, banking, commercial air transportation, and the government. During these years, Carlos has been deeply involved as an early adopter of Microsoft Web development technologies, such as ASP.NET and Silverlight.
He has been awarded Microsoft Most Valuable Professional for the last 5 years and holds the MCAD certification. Carlos is a Senior Software Developer at Oshyn, Inc. (www.oshyn.com), a company specialized on delivering innovative business solutions for the web, mobile devices and emerging technology platforms. At Oshyn, Carlos is dedicated to help some of the most recognizable brands in the world to achieve technology success. You can reach Carlos at cfigueroa1982@hotmail.com or follow him on twitter @carlosfigueroa.
andrew moore is a graduate of Purdue University–Calumet in Hammond, Indiana, and has been
developing software since 1998 for radar systems, air traffic management, discrete-event simulation, and business communications applications using C, C++, C#, and Java on the Windows, UNIX, and Linux platforms. Andrew is also a contributor to the Wrox Blox article series.
acquisiTions ediTor
Paul Reese
senior ProjecT ediTor
Kevin Kent
Technical ediTors
Carlos Figueroa Andrew Moore
ProducTion ediTor
Daniel Scribner
coPy ediTor
Paula Lowell
ediTorial direcTor
Robyn B� Siesky
ediTorial manager
Mary Beth Wakefield
associaTe direcTor of markeTing
David Mayhew
ProducTion manager
Tim Tate
vice PresidenT and execuTive grouP PuBlisher
Richard Swadley
vice PresidenT and execuTive PuBlisher
Barry Pruett
associaTe PuBlisher
Jim Minatel
ProjecT coordinaTor, cover
Lynsey Stanford
Proofreaders
Word One
indexer
J & J Indexing
cover designer
Michael E� Trent
cover image
Thanks To kevin kenT, Paul reese, and jim minaTel for the opportunity to work on such a great book. In addition to my co-authors, I would like to thank my family for putting up with all the writing. Thank you Tuija, Sofia, Henri, and Kalle!
INTRODUCTION
xxxix
chaPTer 1: aPPlicaTion and Page frameworks
1
application location options
1
Built-in Web Server
2
IIS
3
FTP
3
Web Site Requiring FrontPage Extensions
4
The asP.neT Page structure options
4
Inline Coding
6
Code-Behind Model
7
asP.neT 4 Page directives
9
@Page
10
@Master
13
@Control
14
@Import
15
@Implements
17
@Register
17
@Assembly
18
@PreviousPageType
18
@MasterType
18
@OutputCache
18
@Reference
19
asP.neT Page events
19
dealing with Postbacks
20
Cross-Page Posting
21
asP.neT application folders
26
App_Code Folder
27
App_Data Folder
30
App_Themes Folder
31
App_GlobalResources Folder
31
App_LocalResources Folder
31
App_WebReferences Folder
31
App_Browsers Folder
31
Compilation
32
Using the Built-in Build Providers
36
Using Your Own Build Providers
36
Global.asax
41
Working with Classes Through Visual studio 2010
44
summary
47
chaPTer 2: asP.neT server conTrols and clienT-side scriPTs 49
asP.neT server Controls
49
Types of Server Controls
50
Building with Server Controls
51
Working with Server Control Events
53
applying styles to server Controls
54
Examining the Controls’ Common Properties
54
Changing Styles Using Cascading Style Sheets
56
CSS Changes in ASP�NET 4
58
HTMl server Controls
59
Looking at the HtmlControl Base Class
60
Looking at the HtmlContainerControl Class
61
Looking at All the HTML Classes
61
Using the HtmlGenericControl Class
62
identifying asP.neT server Controls
63
Manipulating Pages and server Controls with Javascript
65
Using Page�ClientScript�RegisterClientScriptBlock
66
Using Page�ClientScript�RegisterStartupScript
68
Using Page�ClientScript�RegisterClientScriptInclude
69
Client-side Callback
69
Comparing a Typical Postback to a Callback
70
Using the Callback Feature — A Simple Approach
72
Using the Callback Feature with a Single Parameter
75
Using the Callback Feature — A More Complex Example
78
summary
83
chaPTer 3: asP.neT weB server conTrols
85
an overview of Web server Controls
85
The label server Control
86
The literal server Control
88
The TextBox server Control
88
Using the Focus() Method
89
Using AutoPostBack
89
The Button server Control
91
The CausesValidation Property
91
The CommandName Property
92
Buttons That Work with Client-Side JavaScript
93
The linkButton server Control
94
The imageButton server Control
95
The Hyperlink server Control
96
The dropdownlist server Control
96
Visually removing items from a Collection
98
The listBox server Control
100
Allowing Users to Select Multiple Items
100
An Example of Using the ListBox Control
100
Adding Items to a Collection
102
The CheckBox server Control
102
How to Determine Whether Check Boxes Are Checked
103
Assigning a Value to a Check Box
104
Aligning Text Around the Check Box
104
The CheckBoxlist server Control
104
The radioButton server Control
106
The radioButtonlist server Control
108
image server Control
109
Table server Control
110
The Calendar server Control
112
Making a Date Selection from the Calendar Control
112
Choosing a Date Format to Output from the Calendar
113
Making Day, Week, or Month Selections
114
Working with Date Ranges
115
Modifying the Style and Behavior of Your Calendar
116
adrotator server Control
119
The Xml server Control
121
Panel server Control
122
The PlaceHolder server Control
124
Bulletedlist server Control
124
Hiddenfield server Control
129
fileUpload server Control
130
Uploading Files Using the FileUpload Control
130
Giving ASP�NET Proper Permissions to Upload Files
132
Understanding File Size Limitations
133
Uploading Multiple Files from the Same Page
134
Placing the Uploaded File into a Stream Object
137
MultiView and View server Controls
138
Wizard server Control
141
Customizing the Side Navigation
142
Examining the AllowReturn Attribute
143
Working with the StepType Attribute
143
Adding a Header to the Wizard Control
143
Working with the Wizard’s Navigation System
144
Utilizing Wizard Control Events
145
Using the Wizard Control to Show Form Elements
146
imageMap server Control
150
Chart server Control
152
summary
155
chaPTer 4: validaTion server conTrols
157
Understanding Validation
157
Client-side versus server-side Validation
158
asP.neT Validation server Controls
159
Validation Causes
160
The RequiredFieldValidator Server Control
160
The CompareValidator Server Control
164
The RangeValidator Server Control
167
The RegularExpressionValidator Server Control
171
The CustomValidator Server Control
172
The ValidationSummary Server Control
176
Turning off Client-side Validation
179
Using images and sounds for error notifications
180
Working with Validation Groups
181
summary
185
chaPTer 5: working wiTh masTer Pages
187
Why do You need Master Pages?
187
The Basics of Master Pages
189
Coding a Master Page
190
Coding a Content Page
192
Mixing Page Types and Languages
196
Specifying Which Master Page to Use
197
Working with the Page Title
198
Working with Controls and Properties from the Master Page
199
specifying default Content in the Master Page
205
nesting Master Pages
207
Container-specific Master Pages
211
event ordering
212
Caching with Master Pages
213
asP.neT aJaX and Master Pages
214
summary
216
chaPTer 6: Themes and skins
217
Using asP.neT Themes
217
Applying a Theme to a Single ASP�NET Page
217
Applying a Theme to an Entire Application
219
Removing Themes from Server Controls
219
Removing Themes from Web Pages
220
Understanding Themes When Using Master Pages
221
Understanding the StyleSheetTheme Attribute
221
Creating Your own Themes
222
Creating the Proper Folder Structure
222
Creating a Skin
222
Including CSS Files in Your Themes
224
Having Your Themes Include Images
227
defining Multiple skin options
229
Programmatically Working with Themes
231
Assigning the Page’s Theme Programmatically
231
Assigning a Control’s SkinID Programmatically
231
Themes, skins, and Custom Controls
232
summary
235
chaPTer 7: daTa Binding
237
data source Controls
237
SqlDataSource Control
239
AccessDataSource Control
247
LinqDataSource Control
247
EntityDataSource Control
253
XmlDataSource Control
255
ObjectDataSource Control
256
SiteMapDataSource Control
259
data source Control Caching
259
storing Connection information
260
Using Bound list Controls with data source Controls
262
Editing GridView Row Data
275
Deleting GridView Data
281
Other GridView Formatting Features
283
DetailsView
283
Inserting, Updating, and Deleting Data Using DetailsView
287
ListView
289
FormView
296
other databound Controls
300
TreeView
300
AdRotator
301
Menu
301
inline data-Binding syntax
302
Data-Binding Syntax
302
XML Data Binding
303
expressions and expression Builders
303
summary
308
chaPTer 8: daTa managemenT wiTh ado.neT
309
Basic ado.neT features
310
Common ADO�NET Tasks
310
Basic ADO�NET Namespaces and Classes
314
Using the Connection Object
315
Using the Command Object
317
Using the DataReader Object
318
Using DataAdapter
320
Using Parameters
322
Understanding DataSet and DataTable
325
Using Oracle as Your Database with ASP�NET
329
The datalist server Control
330
Looking at the Available Templates
331
Working with ItemTemplate
331
Working with Other Layout Templates
334
Working with Multiple Columns
336
The listView server Control
336
Connecting the ListView to a Database
337
Creating the Layout Template
338
Creating the ItemTemplate
340
Creating the EditItemTemplate
341
Creating the EmptyItemTemplate
341
Creating the InsertItemTemplate
341
Using Visual studio for ado.neT Tasks
344
Creating a Connection to the Data Source
344
Working with a Dataset Designer
345
Using the CustomerOrders DataSet
348
asynchronous Command execution
352
Asynchronous Methods of the SqlCommand Class
352
IAsyncResult Interface
353
AsyncCallback
354
WaitHandle Class
354
Approaches of Asynchronous Processing in ADO�NET
355
Canceling Asynchronous Processing
370
Asynchronous Connections
370
summary
370
chaPTer 9: querying wiTh linq
371
linQ to objects
371
Understanding Traditional Query Methods
371
Replacing Traditional Queries with LINQ
378
Data Grouping
384
Using Other LINQ Operators
385
Making LINQ Joins
385
Paging Using LINQ
386
linQ to XMl
387
Joining XML Data
390
linQ to sQl
391
Making Insert, Update, and Delete Queries through LINQ
399
Extending LINQ
403
summary
403
chaPTer 10: working wiTh xml and linq To xml
405
The Basics of XMl
406
The XML InfoSet
408
XSD–XML Schema Definition
409
Editing XML and XML Schema in Visual Studio 2010
410
Xmlreader and XmlWriter
413
Using XDocument Rather Than XmlReader
415
Using Schema with XmlTextReader
416
Validating Against a Schema Using an XDocument
417
Including NameTable Optimization
419
ReadSubtree and XmlSerialization
422
Creating CLR Objects from XML with LINQ to XML
423
Creating XML with XmlWriter
424
Creating XML with LINQ for XML
426
Improvements for XmlReader and XmlWriter
429
Xmldocument and XPathdocument
429
Problems with the DOM
429
XPath, the XPathDocument, and XmlDocument
430
datasets
434
Persisting DataSets to XML
434
XmlDataDocument
435
The Xmldatasource Control
437
XslT
441
XslCompiledTransform
442
XSLT Debugging
445
databases and XMl
446
FOR XML AUTO
446
SQL Server and the XML Data Type
451
summary
456
chaPTer 11: inTroducTion To The Provider model
457
Understanding the Provider
458
The Provider Model in asP.neT 4
459
Setting Up Your Provider to Work with Microsoft SQL Server
7�0, 2000, 2005, or 2008
461
Membership Providers
466
Role Providers
469
The Personalization Provider
473
The SiteMap Provider
474
SessionState Providers
476
Web Event Providers
478
Configuration Providers
485
The Web Parts Provider
487
Configuring Providers
489
summary
489
chaPTer 12: exTending The Provider model
491
Providers are one Tier in a larger architecture
491
Modifying Through attribute-Based Programming
492
examining ProviderBase
496
Building Your own Providers
497
Creating the CustomProviders Application
498
Constructing the Class Skeleton Required
499
Creating the XML User Data Store
502
Defining the Provider Instance in the web�config File
502
Not Implementing Methods and Properties of the
MembershipProvider Class
503
Implementing Methods and Properties of
the MembershipProvider Class
504
Using the XmlMembershipProvider for User Login
510
extending Pre-existing Providers
511
Limiting Role Capabilities with a New LimitedSqlRoleProvider Provider
511
Using the New LimitedSqlRoleProvider Provider
515
summary
518
chaPTer 13: siTe navigaTion
519
XMl-Based sitemaps
520
siteMapPath server Control
521
The PathSeparator Property
523
The PathDirection Property
525
The ParentLevelsDisplayed Property
525
The ShowToolTips Property
526
The SiteMapPath Control’s Child Elements
526
TreeView server Control
527
Identifying the TreeView Control’s Built-In Styles
530
Examining the Parts of the TreeView Control
531
Binding the TreeView Control to an XML File
532
Selecting Multiple Options in a TreeView
534
Specifying Custom Icons in the TreeView Control
537
Specifying Lines Used to Connect Nodes
538
Working with the TreeView Control Programmatically
540
Menu server Control
545
Applying Different Styles to the Menu Control
546
Using Menu Events
550
Binding the Menu Control to an XML File
551
siteMap data Provider
552
ShowStartingNode
552
StartFromCurrentNode
553
StartingNodeOffset
554
StartingNodeUrl
555
Url Mapping
557
sitemap localization
558
Structuring the Web�sitemap File for Localization
558
Making Modifications to the Web�config File
559
Creating Assembly Resource (�resx) Files
560
Testing the Results
561
security Trimming
561
Setting Up Role Management for Administrators
562
Setting Up the Administrators’ Section
563
Enabling Security Trimming
564
nesting siteMap files
566
summary
567
chaPTer 14: PersonalizaTion
569
The Personalization Model
570
Creating Personalization Properties
570
Adding a Simple Personalization Property
570
Using Personalization Properties
571
Adding a Group of Personalization Properties
574
Using Grouped Personalization Properties
575
Defining Types for Personalization Properties
576
Using Custom Types
576
Providing Default Values
579
Making Personalization Properties Read-Only
579
anonymous Personalization
579
Enabling Anonymous Identification of the End User
579
Working with Anonymous Identification
582
Anonymous Options for Personalization Properties
583
Warnings about Anonymous User Profile Storage
583
Programmatic access to Personalization
584
Migrating Anonymous Users
584
Personalizing Profiles
585
Determining Whether to Continue with Automatic Saves
586
Personalization Providers
587
Working with SQL Server Express Edition
587
Working with Microsoft’s SQL Server 7�0/2000/2005/2008
588
Using Multiple Providers
590
Managing application Profiles
590
Properties of the ProfileManager Class
591
Methods of the ProfileManager Class
591
Examining the ProfileManager�aspx Page’s Code
594
Running the ProfileManager�aspx Page
595
summary
596
chaPTer 15: memBershiP and role managemenT
597
asP.neT 4 authentication
598
Setting Up Your Web Site for Membership
598
Adding Users
600
Asking for Credentials
613
Working with Authenticated Users
620
Showing the Number of Users Online
622
Dealing with Passwords
623
asP.neT 4 authorization
627
Using the LoginView Server Control
627
Setting Up Your Web Site for Role Management
630
Adding and Retrieving Application Roles
632
Deleting Roles
634
Adding Users to Roles
635
Getting All the Users of a Particular Role
635
Getting All the Roles of a Particular User
637
Removing Users from Roles
638
Checking Users in Roles
638
Understanding How Roles Are Cached
639
Using the Web site administration Tool
640
Public Methods of the Membership aPi
640
Public Methods of the roles aPi
641
summary
642
chaPTer 16: PorTal frameworks and weB ParTs
643
introducing Web Parts
643
Building dynamic and Modular Web sites
645
Introducing the WebPartManager Control
645
Working with Zone Layouts
646
Understanding the WebPartZone Control
649
Allowing the User to Change the Mode of the Page
651
Modifying Zones
660
Working with Classes in the Portal framework
666
Creating Custom Web Parts
669
Connecting Web Parts
674
Building the Consumer Web Part
677
Connecting Web Parts on an ASP�NET Page
679
Understanding the Difficulties in Dealing with Master Pages
When Connecting Web Parts
681
summary
682
chaPTer 17: hTml and css design wiTh asP.neT
683
Caveats
684
HTMl and Css overview
684
Creating Style Sheets
685
CSS Rules
687
CSS Inheritance
694
Element Layout and Positioning
695
Working with HTMl and Css in Visual studio
702
Working with CSS in Visual Studio
703
Managing Relative CSS Links in Master Pages
706
Styling ASP�NET Controls
706
summary
708
chaPTer 18: asP.neT ajax
709
Understanding the need for aJaX
709
Before AJAX
710
AJAX Changes the Story
710
asP.neT aJaX and Visual studio 2010
712
Client-Side Technologies
713
Server-Side Technologies
714
Developing with ASP�NET AJAX
714
Building asP.neT aJaX applications
714
Building a Simple ASP�NET Page without AJAX
716
Building a Simple ASP�NET Page with AJAX
718
asP.neT aJaX’s server-side Controls
722
The ScriptManager Control
723
The ScriptManagerProxy Control
725
The Timer Control
726
The UpdatePanel Control
727
The UpdateProgress Control
731
Using Multiple UpdatePanel Controls
733
Working with Page History
737
script Combining
741
chaPTer 19: asP.neT ajax conTrol ToolkiT
747
downloading and installing the aJaX Control Toolkit
749
The asP.neT aJaX Controls
750
ASP�NET AJAX Control Toolkit Extenders
751
AlwaysVisibleControlExtender
751
AnimationExtender
753
AutoCompleteExtender
755
CalendarExtender
757
CollapsiblePanelExtender
758
ColorPickerExtender
760
ConfirmButtonExtender and ModalPopupExtender
761
DragPanelExtender
763
DropDownExtender
764
DropShadowExtender
766
DynamicPopulateExtender
768
FilteredTextBoxExtender
772
HoverMenuExtender
772
ListSearchExtender
774
MaskedEditExtender and MaskedEditValidator
774
MutuallyExclusiveCheckBoxExtender
776
NumericUpDownExtender
778
PagingBulletedListExtender
778
PopupControlExtender
780
ResizableControlExtender
781
RoundedCornersExtender
783
SliderExtender and MultiHandleSliderExtender
784
SlideShowExtender
785
TextBoxWatermarkExtender
788
ToggleButtonExtender
789
UpdatePanelAnimationExtender
790
ValidatorCalloutExtender
791
asP.neT aJaX Control Toolkit server Controls
793
Accordion Control
793
CascadingDropDown
795
NoBot Control
798
PasswordStrength Control
799
Rating Control
800
TabContainer Control
801
chaPTer 20: securiTy
805
applying authentication Measures
806
The <authentication> Node
806
Windows-Based Authentication
807
Forms-Based Authentication
813
Passport Authentication
821
authenticating specific files and folders
822
Programmatic authorization
822
Working with User�Identity
823
Working with User�IsInRole()
824
Pulling More Information with WindowsIdentity
824
identity and impersonation
827
securing Through iis
828
IP Address and Domain Name Restrictions
829
Working with File Extensions
829
Using the ASP�NET MMC Snap-In
832
Using the IIS 7�0 Manager
832
summary
833
chaPTer 21: sTaTe managemenT
835
Your session state Choices
835
Understanding the session object in asP.neT
838
Sessions and the Event Model
838
Configuring Session State Management
839
In-Process Session State
840
Out-of-Process Session State
846
SQL-Backed Session State
851
Extending Session State with Other Providers
854
Cookieless Session State
855
Choosing the Correct Way to Maintain State
856
The application object
856
Querystrings
857
Cookies
857
PostBacks and Cross-Page PostBacks
857
Hidden fields, Viewstate, and Controlstate
859
Using HttpContext.Current.items for Very short-Term storage
863
chaPTer 22: caching
865
Caching
865
Output Caching
865
Partial Page (UserControl) Caching
869
Post-Cache Substitution
870
HttpCachePolicy and Client-Side Caching
871
Caching Programmatically
873
Data Caching Using the Cache Object
873
Controlling the ASP�NET Cache
874
Cache Dependencies
875
�NET 4’s New Object Caching Option
879
Using the sQl server Cache dependency
882
Enabling Databases for SQL Server Cache Invalidation
883
Enabling Tables for SQL Server Cache Invalidation
883
Looking at SQL Server 2000
883
Looking at the Tables That Are Enabled
884
Disabling a Table for SQL Server Cache Invalidation
885
Disabling a Database for SQL Server Cache Invalidation
885
SQL Server 2005 and 2008 Cache Invalidation
885
Configuring Your asP.neT application
886
Testing sQl server Cache invalidation
887
Adding More Than One Table to a Page
890
Attaching SQL Server Cache Dependencies to the Request Object
890
Attaching SQL Server Cache Dependencies to the Cache Object
890
summary
894
chaPTer 23: deBugging and error handling
895
design-Time support
895
Syntax Notifications
896
Immediate and Command Window
897
Task List
898
Tracing
898
System�Diagnostics�Trace and ASP�NET’s Page�Trace
899
Page-Level Tracing
899
Application Tracing
899
Viewing Trace Data
900
Tracing from Components
902
Trace Forwarding
904
TraceListeners
904
Diagnostic Switches
908
debugging
910
What’s Required
910
IIS versus ASP�NET Development Server
911
Starting a Debugging Session
912
Tools to Help You with Debugging
914
Historical Debugging with IntelliTrace
917
Debugging Multiple Threads
919
Client-side JavaScript Debugging
920
SQL Stored Proc Debugging
921
exception and error Handling
922
Handling Exceptions on a Page
922
Handling Application Exceptions
923
Http Status Codes
924
summary
925
chaPTer 24: file i/o and sTreams
927
Working with drives, directories, and files
928
The DriveInfo Class
928
The Directory and DirectoryInfo Classes
931
File and FileInfo
937
Working with Paths
943
File and Directory Properties, Attributes, and Access Control Lists
947
reading and Writing files
953
Streams
953
Readers and Writers
960
Compressing Streams
964
Memory-Mapped files
966
Working with serial Ports
968
iPC Using Pipes
970
network Communications
970
WebRequest and WebResponse
971
Sending Mail
977
summary
977
chaPTer 25: user and server conTrols
979
User Controls
980
Creating User Controls
980
Interacting with User Controls
982
Loading User Controls Dynamically
983
server Controls
988
Server Control Projects
988
Control Rendering
993
Styling HTML
998
Themes and Skins
1001
Adding Client-Side Features
1002
Browser Capabilities
1010
Using ViewState
1012
Raising Postback Events
1015
Handling Postback Data
1018
Composite Controls
1021
Templated Controls
1023
Design-Time Experiences
1027
summary
1043
chaPTer 26: modules and handlers
1045
Processing HTTP requests
1045
IIS 6 and ASP�NET
1046
IIS 7 and ASP�NET
1046
ASP�NET Request Processing
1047
HttpModules
1048
HttpHandlers
1052
Generic Handlers
1052
Mapping a File Extension in IIS
1056
summary
1058
chaPTer 27: asP.neT mvc
1059
defining Model-View-Controller
1059
MVC on the Web Today
1060
Model-View-Controller and asP.neT
1061
Serving Methods, Not Files
1061
Is This Web Forms 4�0?
1061
Why Not Web Forms?
1062
ASP�NET MVC Is Totally Different!
1062
Why “(ASP�NET > ASP�NET MVC) == True”
1062
Convention over Configuration
1064
The Third Request Is the Charm
1066
Understanding routes and Urls
1068
Routing Compared to URL Rewriting
1069
Defining Routes
1070
Controllers
1073
The Controller Class and Actions
1074
Working with Parameters
1074
Working with Multiple Parameters
1075
Views
1076
Specifying a View
1076
Strongly Typed Views
1077
Using HTML Helper Methods
1078
HtmlHelper Class and Extension Methods
1078
summary
1079
chaPTer 28: using Business oBjecTs
1081
Using Business objects in asP.neT 4
1081
Creating Precompiled �NET Business Objects
1082
Using Precompiled Business Objects in Your ASP�NET Applications
1084
CoM interop: Using CoM Within .neT
1085
The Runtime Callable Wrapper
1086
Using COM Objects in ASP�NET Code
1086
Error Handling
1091
Deploying COM Components with �NET Applications
1093
Using .neT from Unmanaged Code
1095
The COM-Callable Wrapper
1095
Using �NET Components Within COM Objects
1097
Early versus Late Binding
1100
Error Handling
1100
Deploying �NET Components with COM Applications
1102
summary
1103
chaPTer 29: ado.neT enTiTy framework
1105
Can We speak the same language?
1106
The Conceptual and Logical Layers
1107
Mapping Between Layers
1107
Creating Your first entity data Model
1107
Working Through the EDM Wizard
1108
Using the ADO�NET Entity Designer
1109
Building an ASP�NET Page Using Your EDM
1110
Understanding relationships
1113
One-to-One and One-to-Many Relationships
1113
Many-to-One and Many-to-Many Relationships
1116
Performing inheritance Within the edM
1119
Using the entitydatasource Control
1125
Creating the Base Page
1125
Configuring the Data Source Control
1126
summary
1128
chaPTer 30: asP.neT dynamic daTa
1129
Creating Your Base application with Visual studio 2010
1129
Looking at the Core Files Created in the Default Application
1130
The Dynamic Data Application
1131
Incorporating the Database
1137
Registering the Data Model Within the Global�asax File
1139
Styles and Layout
1141
Results of the Application
1141
Working with dynamic data routes
1144
Controlling display aspects
1147
adding dynamic data to existing Pages
1149
summary
1151
chaPTer 31: working wiTh services
1153
Communication Between disparate systems
1153
Building a simple XMl Web service
1155
The WebService Page Directive
1156
Looking at the Base Web Service Class File
1156
Exposing Custom Datasets as SOAP
1157
The XML Web Service Interface
1160
Consuming a simple XMl Web service
1162
Adding a Web Reference
1163
Invoking the Web Service from the Client Application
1164
overloading WebMethods
1166
Caching Web service responses
1169
Using soaP Headers
1170
Building a Web Service with SOAP Headers
1170
Consuming a Web Service Using SOAP Headers
1172
Requesting Web Services Using SOAP 1�2
1174
Consuming Web services asynchronously
1175
Windows Communication foundation
1178
The Larger Move to SOA
1178
WCF Overview
1179
Building a WCF Service
1179
Adding a Service Reference
1187
Working with Data Contracts
1189
Defining Namespaces
1193
Using WCf data services
1194
Creating Your first service
1194
Adding Your Entity Data Model
1195
Creating the Service
1196
Querying the interface
1201
Reading a Table of Data
1202
Reading a Specific Item from the Table
1203
Working with Relationships
1205
Expanding on Associations
1207
Ordering in Result Sets
1210
Moving Around Result Sets
1211
Filtering Content
1211
Consuming WCf data services in asP.neT
1213
summary
1215
chaPTer 32: Building gloBal aPPlicaTions
1217
Cultures and regions
1217
Understanding Culture Types
1218
The ASP�NET Threads
1219
Server-Side Culture Declarations
1221
Client-Side Culture Declarations
1222
Translating Values and Behaviors
1223
asP.neT 4 resource files
1230
Making Use of Local Resources
1230
Making Use of Global Resources
1235
looking at the resource editor
1237
summary
1238
chaPTer 33: configuraTion
1239
Configuration overview
1239
Server Configuration Files
1240
Application Configuration File
1243
Applying Configuration Settings
1243
Detecting Configuration File Changes
1244
Configuration File Format
1244
Common Configuration settings
1245
Configuring Session State
1246
Compilation Configuration
1250
Browser Capabilities
1251
Custom Errors
1253
Authentication
1254
Anonymous Identity
1257
Authorization
1258
Locking-Down Configuration Settings
1260
ASP�NET Page Configuration
1260
Include Files
1262
Configuring ASP�NET Runtime Settings
1263
Configuring the ASP�NET Worker Process
1265
Storing Application-Specific Settings
1268
Programming Configuration Files
1268
Protecting Configuration Settings
1274
Editing Configuration Files
1278
Creating Custom sections
1279
Using the NameValueFileSectionHandler Object
1280
Using the DictionarySectionHandler Object
1281
Using the SingleTagSectionHandler Object
1281
Using Your Own Custom Configuration Handler
1282
summary
1284
chaPTer 34: insTrumenTaTion
1285
Working with the event log
1285
Reading from the Event Log
1286
Writing to the Event Log
1288
Using Performance Counters
1290
Viewing Performance Counters Through an Administration Tool
1290
Building a Browser-Based Administrative Tool
1292
application Tracing
1296
Understanding Health Monitoring
1297
The Health Monitoring Provider Model
1298
Health Monitoring Configuration
1299
Writing Events via Configuration: Running the Example
1305
Routing Events to SQL Server
1305
Buffering Web Events
1308
E-mailing Web Events
1310
chaPTer 35: adminisTraTion and managemenT
1315
The asP.neT Web site administration Tool
1315
The Home Tab
1316
The Security Tab
1317
The Application Tab
1325
The Provider Tab
1328
Configuring asP.neT in iis on Windows 7
1329
�NET Compilation
1330
�NET Globalization
1331
�NET Profile
1331
�NET Roles
1331
�NET Trust Levels
1332
�NET Users
1332
Application Settings
1333
Connection Strings
1333
Pages and Controls
1334
Providers
1334
Session State
1335
SMTP E-mail
1336
summary
1336
chaPTer 36: Packaging and dePloying asP.neT
aPPlicaTions
1337
deployment Pieces
1338
steps to Take before deploying
1338
Methods of deploying Web applications
1339
Using XCopy
1339
Using the VS Copy Web Site Option
1341
Deploying a Precompiled Web Application
1344
Building an ASP�NET Web Package
1346
Building an Installer Program
1349
looking More Closely at installer options
1357
Working with the Deployment Project Properties
1357
The File System Editor
1360
The Registry Editor
1363
The File Types Editor
1363
The User Interface Editor
1364
The Custom Actions Editor
1366
The Launch Conditions Editor
1366
aPPendix a: migraTing older asP.neT ProjecTs
1369
aPPendix B: asP.neT ulTimaTe Tools
1381
aPPendix c: silverlighT 3 and asP.neT
1399
aPPendix d: dynamic TyPes and languages
1419
aPPendix e: asP.neT online resources
1427
simPly PuT, asP.neT 4 is an amazing Technology to use to build your Web solutions! When ASP.NET 1.0 was introduced in 2000, many considered it a revolutionary leap forward in the area of Web application development. ASP.NET 2.0 was just as exciting and revolutionary, and ASP.NET 4 is continuing a forward march in providing the best framework today in building applications for the Web. ASP.NET 4 continues to build on the foundation laid by the release of ASP.NET 1.0/2.0/3.5 by focusing on the area of developer productivity.
This book covers the whole of ASP.NET. It not only introduces new topics, but it also shows you examples of these new technologies in action. So sit back, pull up that keyboard, and enjoy!
a liTTle BiT of hisTory
Before organizations were even thinking about developing applications for the Internet, much of the application development focused on thick desktop applications. These thick-client applications were used for everything from home computing and gaming to office productivity and more. No end was in sight for the popularity of this application model.
During that time, Microsoft developers developed thick-client applications using mainly Visual Basic (VB). Visual Basic was not only a programming language — it was tied to an IDE that allowed for easy thick-client application development. In the Visual Basic model, developers could drop controls onto a form, set properties for these controls, and provide code behind them to manipulate the events of the control. For example, when an end user clicked a button on one of the Visual Basic forms, the code behind the form handled the event. Then, in the mid-1990s, the Internet arrived on the scene. Microsoft was unable to move the Visual Basic model to the development of Internet-based applications. The Internet definitely had a lot of power, and right away, the problems facing the thick-client application model were revealed. Internet-based applications created a single instance of the application that everyone could access. Having one instance of an
application meant that when the application was upgraded or patched, the changes made to this single instance were immediately available to each and every user visiting the application through a browser. To participate in the Web application world, Microsoft developed Active Server Pages (ASP). ASP was a quick and easy way to develop Web pages. ASP pages consisted of a single page that contained a mix of markup and languages. The power of ASP was that you could include VBScript or JScript code instructions in the page executed on the Web server before the page was sent to the end user’s Web browser. This was an easy way to create dynamic Web pages customized based on instructions dictated by the developer.