v
Contents at a Glance
Part I
Fundamentals
1 Web Application Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2 ASP.NET Application Fundamentals . . . . . . . . . . . . . . . . . . . . . . . . 25
3 The Page Rendering Model. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4 Custom Rendered Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
5 Composite Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
6 Control Potpourri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Part II
Advanced Features
7 A Consistent Look and Feel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
8 Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
9 Logging In . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
10 Data Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
11 Web Site Navigation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
12 Personalization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
13 Web Parts. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
Part III
Caching and State Management
14 Session State . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
15 Application Data Caching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
16 Caching Output. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
Part IV
Diagnostics and Plumbing
17 Diagnostics and Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
18 The HttpApplication Class and HTTP Modules . . . . . . . . . . . . . . 385
19 HTTP Handlers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
vi
Contents at a Glance
Part V
Dynamic Data, XBAP, MVC, AJAX, and Silverlight
20 Dynamic Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
21 ASP.NET and WPF Content . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433
22 The ASP.NET MVC Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . 449
23 AJAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473
24 Silverlight and ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513
Part VI
Services and Deployment
25 Windows Communication Foundation . . . . . . . . . . . . . . . . . . . . 555
26 Deployment. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575
vii
Table of Contents
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .xix
Part I
Fundamentals
1 Web Application Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
HTTP Requests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
HTTP Requests from a Browser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Making HTTP Requests Without a Browser. . . . . . . . . . . . . . . . . . . . . . . . . . 6
Hypertext Markup Language. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Dynamic Content . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
HTML Forms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Common Gateway Interface: Very Retro . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
The Microsoft Environment as a Web Server . . . . . . . . . . . . . . . . . . . . . . . 12
Internet Information Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Internet Services Application Programming Interface DLLs. . . . . . . . . . . 13
Running Internet Information Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Classic ASP: Putting ASP.NET into Perspective . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Web Development Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Chapter 1 Quick Reference. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2 ASP.NET Application Fundamentals . . . . . . . . . . . . . . . . . . . . . . . . 25
The Canonical Hello World Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Mixing HTML with Executable Code. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Server-Side Executable Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
The ASP.NET Compilation Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Coding Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
ASP.NET 1.x Style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Modern ASP.NET Style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Microsoft is interested in hearing your feedback so we can continually improve our books and learning
resources for you. To participate in a brief online survey, please visit:
www.microsoft.com/learning/booksurvey/
What do you think of this book? We want to hear from you!
viii
Table of Contents
The ASP.NET HTTP Pipeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
The IIS 5.x and IIS 6.x Pipeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
The IIS 7.x Integrated Pipeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Tapping the Pipeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Visual Studio and ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Local IIS Web Sites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
File System–Based Web Sites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
FTP Web Sites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Remote Web Sites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Hello World and Visual Studio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Chapter 2 Quick Reference. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
3 The Page Rendering Model. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Rendering Controls as Tags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Packaging the UI as Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
The Page Using ASP.NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
The Page’s Rendering Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
The Page’s Control Tree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Adding Controls Using Visual Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Layout Considerations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Chapter 3 Quick Reference. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
4 Custom Rendered Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
The Control Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Visual Studio and Custom Controls. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
A Palindrome Checker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Controls and Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
HtmlTextWriter and Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Controls and ViewState . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Chapter 4 Quick Reference. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
5 Composite Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Composite Controls versus Rendered Controls. . . . . . . . . . . . . . . . . . . . . . . . . . 101
Custom Composite Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
User Controls. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
When to Use Each Type of Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Chapter 5 Quick Reference. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Table of Contents
ix
6 Control Potpourri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Validation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
How Page Validation Works. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
Other Validators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
Validator Properties. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Image-Based Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
TreeView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
MultiView. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
Chapter 6 Quick Reference. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
Part II
Advanced Features
7 A Consistent Look and Feel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Managing User Interface Consistency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
ASP.NET Master Pages. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
Themes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Skins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
Chapter 7 Quick Reference. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
8 Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
Windows Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
.NET Configuration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
Machine.Config . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
Configuration Section Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
Web.Config . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
Managing Configuration in ASP.NET 1.x . . . . . . . . . . . . . . . . . . . . . . . . . . 168
Managing Configuration in Later Versions of ASP.NET . . . . . . . . . . . . . . 169
Configuring ASP.NET from IIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
Chapter 8 Quick Reference. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
9 Logging In . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
Web-Based Security. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
Securing IIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
Basic Forms Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
ASP.NET Authentication Services. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
The FormsAuthentication Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
An Optional Login Page . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
Managing Users . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
x
Table of Contents
ASP.NET Login Controls. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
Authorizing Users. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
Chapter 9 Quick Reference. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
10 Data Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
Representing Collections Without Data Binding . . . . . . . . . . . . . . . . . . . . . . . . 207
Representing Collections with Data Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
ListControl-Based Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
TreeView Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
Menu Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
FormView Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
GridView Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
DetailsView Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
DataList Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
Repeater Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
Simple Data Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
Accessing Databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
The .NET Database Story. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
Managing Results. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
ASP.NET Data Sources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
Other Data-Bound Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
LINQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
Chapter 10 Quick Reference. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
11 Web Site Navigation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
ASP.NET Navigation Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
Navigation Controls. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
XML Site Maps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
The SiteMapProvider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
The SiteMap Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
The SiteMapNode. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
Using Navigation Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
The Menu and TreeView Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
The SiteMapPath Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
Site Map Configuration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
Building Navigable Web Sites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Table of Contents
xi
Trapping the SiteMapResolve Event . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
Defining Custom Attributes for Each Node. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
Security Trimming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
URL Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
URL Rewriting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
Chapter 11 Quick Reference. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
12 Personalization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
Personalizing Web Visits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
Personalization in ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
User Profiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
Personalization Providers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
Using Personalization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
Defining Profiles in Web.Config . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
Using Profile Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
Saving Profile Changes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
Profiles and Users. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
Chapter 12 Quick Reference. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
13 Web Parts. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
A Brief History of Web Parts. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
What Good Are Web Parts? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
Developing Web Parts Controls. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
Web Parts Page Development. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
Web Parts Application Development . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
The Web Parts Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
WebPartManager and WebZones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
Built-In Zones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
Built-In Web Parts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
Developing a Web Part . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
Chapter 13 Quick Reference. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
Part III
Caching and State Management
14 Session State . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
Why Session State?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
ASP.NET and Session State . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
Introduction to Session State . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
Session State and More Complex Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
xii
Table of Contents
Configuring Session State . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
Turning Off Session State . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
Storing Session State InProc. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
Storing Session State in a State Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
Storing Session State in a Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308
Tracking Session State . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
Tracking Session State with Cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
Tracking Session State with the URL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
Using AutoDetect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
Applying Device Profiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
Session State Timeouts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
Other Session Configuration Settings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
The Wizard Control: An Alternative to Session State . . . . . . . . . . . . . . . . . . . . . 312
Chapter 14 Quick Reference. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
15 Application Data Caching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
Getting Started with Caching. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
Using the Data Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
Impact of Caching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
Managing the Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
DataSets in Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
Cache Expirations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
Cache Dependencies. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
The SQL Server Dependency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
Clearing the Cache. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
Chapter 15 Quick Reference. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
16 Caching Output. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
Caching Page Content. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
Managing Cached Content . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
Modifying the OutputCache Directive . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
The HttpCachePolicy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351
Caching Locations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352
Output Cache Dependencies. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
Caching Profiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
Caching User Controls. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354
When Output Caching Makes Sense . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357
Other Cache Providers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358
Chapter 16 Quick Reference. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
Table of Contents
xiii
Part IV
Diagnostics and Plumbing
17 Diagnostics and Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
Page Tracing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
Tracing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364
Trace Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
Application Tracing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370
Enabling Tracing Programmatically . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
The TraceFinished Event . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
Piping Other Trace Messages. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
Debugging with Visual Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
Error Pages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378
Unhandled Exceptions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
Chapter 17 Quick Reference. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383
18 The HttpApplication Class and HTTP Modules . . . . . . . . . . . . . . 385
The Application: A Rendezvous Point. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
Overriding HttpApplication. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
HttpModules. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394
Global.asax vs. HttpModules. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .404
Chapter 18 Quick Reference. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
19 HTTP Handlers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
ASP.NET Request Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
The Built-in Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407
Handlers and IHttpHandler. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410
Handlers and Session State. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416
Generic Handlers (ASHX Files) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417
Chapter 19 Quick Reference. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419
Part V
Dynamic Data, XBAP, MVC, AJAX, and Silverlight
20 Dynamic Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
Dynamic Data Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424
Dynamic Data Details . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428
Chapter 20 Quick Reference. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432
xiv
Table of Contents
21 ASP.NET and WPF Content . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433
Improving Perceived Performance by Reducing Round-Trips . . . . . . . . . . . . . 433
What Is WPF? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434
How Does WPF Relate to the Web? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436
Loose XAML Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437
XBAP Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438
WPF Content and Web Applications. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442
What About Silverlight? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448
Chapter 21 Quick Reference. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448
22 The ASP.NET MVC Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . 449
The Model-View-Controller (MVC) Architecture . . . . . . . . . . . . . . . . . . . . . . . . 449
ASP.NET and MVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452
ASP.NET MVC vs. Web Forms. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453
MVC and Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454
How MVC Plays with ASP.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455
Following the Request Path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455
Chapter 22 Quick Reference. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472
23 AJAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473
Rich Internet Applications. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473
What Is AJAX?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474
ASP.NET and AJAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475
Reasons to Use AJAX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476
Real-World AJAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477
AJAX in Perspective. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478
ASP.NET Server-Side Support for AJAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478
ScriptManager Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479
ScriptManagerProxy Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479
UpdatePanel Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479
UpdateProgress Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480
Timer Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480
AJAX Client Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480
ASP.NET AJAX Control Toolkit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480
AJAX Control Toolkit Potpourri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481
Getting Familiar with AJAX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .484
The Timer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490
Updating Progress . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497
Không có nhận xét nào:
Đăng nhận xét