The most comprehensive book on Microsofts new ASP.NET 4, ASP.NET 4 Unleashed covers all facets of ASP.NET development. Led by Microsoft ASP.NET program manager Stephen Walther, an expert author team thoroughly covers the entire platform. The authors first introduce the ASP.NET Frameworks basic controls and show how to create common site-wide layouts and styles. Next, they cover all aspects of accessing, presenting, organizing, and editing data. Youll find thorough and practical sections on building custom components and controls, providing effective site navigation, securing sites and applications, and much more. This book presents hundreds of realistic code examples, reflecting the authors unsurpassed experience with ASP.NET both inside and outside Microsoft. * Build interactive Web Forms, validate form data, and upload files * Provide interactive calendars, wizards, site maps, and other valuable features * Design efficient, maintainable sites with Master Pages and Themes * Build data-driven applications with database controls, ADO.NET data access components, QueryExtender, LINQ to SQL, and WCF Data Services * Generate charts on the fly with the new Chart Control * Extend ASP.N
ET with custom controls and reusable components * Create site registration and authentication systems that store membership data in SQL Server or Active Directory * Use URL Routing to build dynamism, flexibility, readability, and SEO-friendliness into your URLs * Improve performance and scalability with caching and preloading * Maintain state with cookies, cookieless session state, and profiles * Localize, configure, package, and deploy ASP.NET applications * Use the ASP.NET MVC Framework to improve agility, testability, speed to market, and extensibility * Retrofit existing ASP.NET applications with Ajax and build pure client-side Ajax web applications * Construct a complete ASP.NET 4 website from start to finish
Introduction 1 Part I Building ASP.NET Pages 1 Overview of the ASP.NET Framework 5 ASP.NET and the .NET Framework 9 Understanding the Framework Class Library 9 Understanding the Common Language Runtime 17 Understanding ASP.NET Controls 19 Overview of ASP.NET Controls 19 Understanding HTML Controls 21 Understanding and Handling Control Events 22 Understanding View State 28 Understanding ASP.NET Pages 34 Understanding Dynamic Compilation 34 Understanding Control Trees 38 Using Code-Behind Pages 39 Handling Page Events 44 Using the Page.IsPostBack Property 46 Debugging and Tracing ASP.NET Pages 48 Tracing Page Execution 52 Installing ASP.NET 55 Summary 57 2 Using the Standard Controls 59 Displaying Information 59 Using the Label Control 60 Using the Literal Control 65 Accepting User Input 68 Using the TextBox Control 68 Using the CheckBox Control 76 Using the RadioButton Control 79 Submitting Form Data 84 Using the Button Control 84 Using the LinkButton Control 86 Using the ImageButton Control 89 Using Client Scripts with Button Controls 94 Performing Cross-Page Posts 96 Specifying a Default Button 100 Handling the Command Event 101 Displaying Images 104 Using the Image Control 104 Using the ImageMap Control 106 Using the Panel Control 111 Using the HyperLink Control 118 Summary 119 3 Using the Validation Controls 121 Overview of the Validation Controls 121 Validation Controls and JavaScript 126 Using Page.IsValid 126 Setting the Display Property 127 Highlighting Validation Errors 128 Using Validation Groups 133 Disabling Validation 138 Using the RequiredFieldValidator Control 139 Using the RangeValidator Control 143 Using the CompareValidator Control 146 Using the RegularExpressionValidator Control 151 Using the CustomValidator Control 154 Using the ValidationSummary Control 162 Creating Custom Validation Controls 167 Creating a LengthValidator Control 168 Creating an AjaxValidator Control 170 Summary 177 4 Using the Rich Controls 179 Accepting File Uploads 180 Saving Files to the File System 181 Saving Files to a Database 185 Uploading Large Files 189 Displaying a Calendar 195 Creating a Pop-Up Date Picker 199 Rendering a Calendar from a Database Table 202 Displaying Advertisements 207 Storing Advertisements in an XML File 208 Storing Advertisements in a Database Table 212 Tracking Impressions and Transfers 213 Displaying Different Page Views 220 Displaying a Tabbed Page View 220 Displaying a Multipart Form 223 Displaying a Wizard 226 Displaying Silverlight Content 231 Summary 234 Part II Designing ASP.NET Websites 5 Designing Websites with Master Pages 237 Creating Master Pages 238 Creating Default Content 242 Nesting Master Pages 245 Using Images and Hyperlinks in Master Pages 251 Registering Master Pages in Web Configuration 254 Modifying Master Page Content 255 Using the Title Attribute 255 Using the Page Header Property 256 Exposing Master Page Properties 258 Using FindControl with Master Pages 261 Loading Master Pages Dynamically 263 Loading Master Pages Dynamically for Multiple Content Pages 266 Summary 268 6 Designing Websites with Themes 269 Creating Themes 270 Adding Skins to Themes 270 Creating Named Skins 273 Themes Versus StyleSheetThemes 275 Disabling Themes 277 Registering Themes in the Web Configuration File 280 Adding Cascading Style Sheets to Themes 281 Adding Multiple Cascading Style Sheets to a Theme 285 Changing Page Layouts with Cascading Style Sheets 285 Creating Global Themes 290 Applying Themes Dynamically 291 Applying Skins Dynamically 293 Summary 298 7 Creating Custom Controls with User Controls 299 Creating User Controls 300 Registering User Controls in the Web Configuration File 303 Exposing Properties from a User Control 304 Exposing Events from a User Control 307 Creating an AddressForm Control 311 AJAX and User Controls 317 Dynamically Loading User Controls 320 Using the Reference Directive 322 Creating a Multipage Wizard 327 Summary 336 Part III Performing Data Access 8 Overview of Data Access 337 Using DataBound Controls 337 Working with List Controls 338 Working with Tabular DataBound Controls 341 Working with Hierarchical DataBound Controls 345 Working with Other Controls 348 Using DataSource Controls 351 Using ASP.NET Parameters with DataSource Controls 353 Using Programmatic DataBinding 356 Understanding Templates and DataBinding Expressions 358 Using Templates 359 Using DataBinding Expressions 362 Using Two-Way DataBinding Expressions 366 Overview of SQL Server 2008 Express 369 Features of SQL Server Express 369 SQL Server 2008 Express Management Tools 370 Server Databases Versus Local Databases 371 Sample Database-Driven Web Application 375 Summary 378 9 Using the SqlDataSource Control 379 Creating Database Connections 380 Connecting to Microsoft SQL Server 380 Connecting to Other Databases 384 Storing Connection Strings in the Web Configuration File 386 Encrypting Connection Strings 388 Executing Database Commands 389 Executing Inline SQL Statements 389 Executing Stored Procedures 392 Filtering Database Rows 395 Changing the Data Source Mode 397 Handling SQL Command Execution Errors 398 Canceling Command Execution 403 Using ASP.NET Parameters with the SqlDataSource Control 406 Using the ASP.NET Parameter Object 406 Using the ASP.NET ControlParameter Object 410 Using the ASP.NET CookieParameter Object 415 Using the ASP.NET FormParameter Object 417 Using the ASP.NET ProfileParameter Object 420 Using the QueryStringParameter Object 422 Using the SessionParameter Object 424 Programmatically Executing SqlDataSource Commands 426 Adding ADO.NET Parameters 426 Executing Insert, Update, and Delete Commands 428 Executing Select Commands 430 Caching Database Data with the SqlDataSource Control 435 Summary 438 10 Using List Controls 439 Overview of the List Controls 439 Declaring List Items 439 Binding to a Data Source 442 Determining the Selected List Item 446 Appending Data Items 450 Enabling Automatic PostBacks 452 Using the Items Collection 454 Working with the DropDownList Control 458 Working with the RadioButtonList Control 461 Working with the ListBox Control 463 Working with the CheckBoxList Control 467 Working with the BulletedList Control 470 Creating a Custom List Control 475 Summary 484 11 Using the GridView Control 485 GridView Control Fundamentals 486 Displaying Data 486 Selecting Data 489 Using Data Keys 492 Sorting Data 495 Paging Through Data 501 Editing Data 510 Displaying Empty Data 514 Formatting the GridView Control 519 Using ViewState with the GridView Control 521 Using Fields with the GridView Control 522 Using BoundFields 523 Using CheckBoxFields 526 Using CommandFields 527 Using Button Fields 530 Using HyperLink Fields 534 Using ImageFields 539 Using TemplateFields 543 Working with GridView Control Events 546 Highlighting GridView Rows 547 Displaying Column Summaries 550 Displaying Nested Master/Details Forms 552 Extending the GridView Control 555 Creating a LongTextField 556 Creating a DeleteButtonField 560 Creating a ValidatedField 563 Summary 566 12 Using the DetailsView and FormView Controls 567 Using the DetailsView Control 567 Displaying Data with the DetailsView Control 567 Using Fields with the DetailsView Control 571 Displaying Empty Data with the DetailsView Control 573 Paging through Data with the DetailsView Control 576 Updating Data with the DetailsView Control 584 Inserting Data with the DetailsView Control 593 Deleting Data with the DetailsView Control 597 Working with DetailsView Control Events 598 Formatting the DetailsView Control 601 Using the FormView Control 604 Displaying Data with the FormView Control 605 Paging Through Data with the FormView Control 607 Editing Data with the FormView Control 612 Inserting Data with the FormView Control 616 Deleting Data with the FormView Control 619 Summary 622 13 Using the Repeater and DataList Controls 623 Using the Repeater Control 623 Displaying Data with the Repeater Control 624 Using Templates with the Repeater Control 627 Handling Repeater Control Events 633 Using the DataList Control 640 Displaying Data with the DataList Control 640 Displaying Data in Multiple Columns 644 Using Templates with the DataList Control 645 Selecting Data with the DataList Control 648 Editing Data with the DataList Control 651 Formatting the DataList Control 657 Summary 660 14 Using the ListView and DataPager Controls 661 Using the ListView Control 661 Using the LayoutTemplate and ItemTemplate 662 Using the GroupTemplate 666 Selecting a Row 669 Sorting Database Data 672 Editing Database Data 675 Using the DataPager Control 681 Creating a Custom User Interface for Paging 684 Data Source Paging with the DataPager Control 686 Summary 688 15 Using the Chart Control 689 Chart Control Fundamentals 690 Displaying Data with the Chart Control 690 Sorting and Filtering Data 694 Using Statistical Formulas 698 Customizing a Charts Appearance 704 Customizing the Background and Plotting Area 704 Three-Dimensional Charts 708 Drill-Down Reports 709 Summary 710 16 Using the QueryExtender Control 711 Introduction to the QueryExtender Control 711 Querying Data with Declarative Syntax 712 Querying with the ControlFilterExpression 712 Querying with the CustomExpression 712 Querying with the DynamicFilterExpression 713 Querying with the MethodExpression 713 Sorting with the OrderByExpression 714 Querying with the PropertyExpression 715 Querying with the RangeExpression 715 Querying with the SearchExpression 716 Building a Sample Page with the QueryExtender Control 717 Summary 720 Part IV Building Components 17 Building Components 721 Building Basic Components 722 Components and Dynamic Compilation 724 Mixing Different Language Components in the App_Code Folder 725 Declaring Methods 726 Declaring Fields and Properties 728 Declaring Constructors 733 Overloading Methods and Constructors 734 Declaring Namespaces 736 Creating Partial Classes 738 Inheritance and Abstract Classes 739 Declaring Interfaces 742 Using Access Modifiers 743 Intellisense and Components 744 Using ASP.NET Intrinsics in a Component 746 Building Component Libraries 749 Compiling Component Libraries 750 Adding a Reference to a Class Library 753 Architectural Considerations 757 Building Multitier Applications 757 Creating the User Interface Layer 758 Creating the Business Logic Layer 761 Creating the Data Access Layer 765 Summary 769 18 Using the ObjectDataSource Control 771 Representing Objects with the ObjectDataSource Control 772 Binding to a Component 772 Binding to a DataReader 774 Binding to a DataSet 776 Binding to a LINQ to SQL Query 778 Binding to a Web Service 779 Using Parameters with the ObjectDataSource Control 783 Using Different Parameter Types 787 Passing Objects as Parameters 790 Paging, Sorting, and Filtering Data with the ObjectDataSource Control 795 User Interface Paging 795 Data Source Paging 798 User Interface Sorting 805 Data Source Sorting 808 Filtering Data 813 Handling ObjectDataSource Control Events 817 Adding and Modifying Parameters 818 Handling Method Errors 822 Handling the ObjectCreating Event 826 Concurrency and the ObjectDataSource Control 828 Extending the ObjectDataSource Control 832 Creating a Custom ObjectDataSource Control 832 Creating Custom Parameter Objects 835 Summary 841 19 Building Data Access Components with ADO.NET 843 Connected Data Access 844 Using the Connection Object 848 Using the Command Object 859 Using the DataReader Object 881 Disconnected Data Access 888 Using the DataAdapter Object 889 Using the DataTable Object 896 Using the DataView Object 906 Using the DataSet Object 908 Executing Asynchronous Database Commands 911 Using Asynchronous ADO.NET Methods 912 Using Asynchronous ASP.NET Pages 914 Building Database Objects with the .NET Framework 918 Enabling CLR Integration 918 Creating User-Defined Types with .NET Framework 919 Building a Data Access Layer with a User-Defined Type 924 Creating Stored Procedures with .NET Framework 928 Creating the Stored Procedure Assembly 928 Summary 934 20 Data Access with LINQ to SQL 935 New C# and VB.NET Language Features 936 Understanding Automatic Properties 936 Understanding Initializers 937 Understanding Type Inference 939 Understanding Anonymous Types 940 Understanding Generics 941 Understanding Lambda Expressions 944 Understanding Extension Methods 948 Understanding LINQ 949 Creating LINQ to SQL Entities 951 Building Entities by Hand 952 Building Entities with the LINQ to SQL Designer 956 Building Entity Associations 959 Using the LinqDataSource Control 960 Performing Standard Database Commands with LINQ to SQL 964 LINQ to Objects Versus LINQ to SQL 964 Selecting with LINQ to SQL 965 Inserting with LINQ to SQL 973 Updating with LINQ to SQL 976 Deleting with LINQ to SQL 981 Dynamic Queries 983 Debugging LINQ to SQL 987 Creating a Custom LINQ Entity Base Class 991 Using the Entity Base Class 991 Performing Standard Data-Access Operations with the EntityBase Class 992 Performing Validation with the EntityBase Class 994 Summary 1000 21 Data Access with WCF Data Services 1001 Overview of WCF Data Services 1001 Using Data Services with a Service Reference 1002 Using Data Services with a Data Context 1007 Summary 1009 Part V Site Navigation 22 Using the Navigation Controls 1011 Understanding Site Maps 1011 Using the SiteMapPath Control 1013 Formatting the SiteMapPath Control 1016 Using the Menu Control 1020 Declaratively Adding Menu Items 1021 Using the Menu Control with the MultiView Control 1024 Binding to a Site Map 1027 Binding to an XML File 1031 Binding to Database Data 1035 Formatting the Menu Control 1040 Using Templates with the Menu Control 1046 Using the TreeView Control 1049 Declaratively Adding Tree Nodes 1049 Displaying Check Boxes with the TreeView Control 1054 Binding to a Site Map 1057 Binding to an XML File 1058 Binding to Database Data 1061 Using Populate On Demand and AJAX 1064 Formatting the TreeView Control 1070 Building a SQL Hierarchical Data Source Control 1077 Summary 1081 23 Using Site Maps 1083 Using the SiteMapDataSource Control 1084 Setting SiteMapDataSource Properties 1086 Using the SiteMap Class 1090 Using the SiteMapNode Class 1093 Advanced Site Map Configuration 1095 Using Security Trimming 1096 Merging Multiple Site Maps 1101 Creating Custom Site Map Attributes 1103 Creating Custom Site Map Providers 1105 Creating the AutoSiteMapProvider 1106 Creating the SqlSiteMapProvider 1111 Generating a Google SiteMap File 1116 Summary 1120 24 Advanced Navigation 1123 Remapping URLs 1124 Creating a Custom UrlRemapper Module 1127 Using the VirtualPathProvider Class 1132 Limitations of the VirtualPathProvider Class 1133 Understanding the VirtualPathProvider Class 1133 Registering a VirtualPathProvider Class 1135 Summary 1136 25 Using the ASP.NET URL Routing Engine 1137 Introduction to URL Routing 1137 Basic URL Routing Scenarios 1139 Mapping Basic URLs 1139 Mapping URLs with Parameters 1140 Mapping URLs with Multiple Segments 1141 Linking to Other Pages with Routes 1142 Advanced URL Routing 1143 Using Routes with Default Parameters 1143 Using Constrained Routes 1144 Security Concerns with Routes 1146 Summary 1146 Part VI Security 26 Using the Login Controls 1147 Overview of the Login Controls 1148 Using the Login Control 1152 Automatically Redirecting a User to the Referring Page 1155 Automatically Hiding the Login Control from Authenticated Users 1155 Using a Template with the Login Control 1157 Performing Custom Authentication with the Login Control 1160 Using the CreateUserWizard Control 1162 Configuring Create User Form Fields 1163 Sending a Create User Email Message 1166 Automatically Redirecting a User to the Referring Page 1169 Automatically Generating a Password 1171 Using Templates with the CreateUserWizard Control 1177 Adding Steps to the CreateUserWizard Control 1181 Using the LoginStatus Control 1183 Using the LoginName Control 1185 Using the ChangePassword Control 1186 Sending a Change Password Email 1188 Using Templates with the ChangePassword Control 1190 Using the PasswordRecovery Control 1193 Sending the Original Password 1195 Requiring a Security Question and Answer 1196 Using Templates with the PasswordRecovery Control 1197 Using the LoginView Control 1199 Using Roles with the LoginView Control 1201 Summary 1204 27 Using ASP.NET Membership 1205 Configuring Authentication 1206 Configuring Forms Authentication 1207 Using Cookieless Forms Authentication 1209 Using Sliding Expiration with Forms Authentication 1210 Using Forms Authentication Across Applications 1210 Using Forms Authentication Across Domains 1214 Using the FormsAuthentication Class 1216 Using the User Class 1220 Configuring Authorization 1221 Authorizing by Role 1223 Authorizing Files by Location 1224 Using Authorization with Images and Other File Types 1225 Using ASP.NET Membership 1226 Using the Membership Application Programming Interface 1227 Encrypting and Hashing User Passwords 1232 Modifying User Password Requirements 1234 Locking Out Bad Users 1235 Configuring the SQLMembershipProvider 1237 Configuring the ActiveDirectoryMembershipProvider 1239 Creating a Custom Membership Provider 1244 Using the Role Manager 1246 Configuring the SqlRoleProvider 1247 Configuring the WindowsTokenRoleProvider 1252 Configuring the AuthorizationStoreRoleProvider 1254 Caching Roles in a Browser Cookie 1256 Using the Roles Application Programming Interface 1258 Summary 1260 Part VII Building ASP.NET Applications 28 Maintaining Application State 1263 Using Browser Cookies 1264 Cookie Security Restrictions 1265 Creating Cookies 1266 Reading Cookies 1269 Setting Cookie Properties 1272 Deleting Cookies 1273 Working with Multivalued Cookies 1275 Using Session State 1279 Storing Database Data in Session State 1281 Using the Session Object 1284 Handling Session Events 1285 Controlling When a Session Times Out 1287 Using Cookieless Session State 1288 Configuring a Session State Store 1290 Configuring SQL Server Session State 1294 Using Profiles 1297 Creating Profile Groups 1301 Supporting Anonymous Users 1303 Migrating Anonymous Profiles 1307 Inheriting a Profile from a Custom Class 1308 Creating Complex Profile Properties 1310 Saving Profiles Automatically 1317 Accessing Profiles from Components 1321 Using the Profile Manager 1323 Configuring the Profile Provider 1326 Creating a Custom Profile Provider 1327 Summary 1332 29 Caching Application Pages and Data 1335 Overview of Caching 1335 Using Page Output Caching 1337 Varying the Output Cache by Parameter 1338 Varying the Output Cache by Control 1342 Varying the Output Cache by Header 1345 Varying the Output Cache by Browser 1346 Varying the Output Cache by a Custom Function 1347 Specifying the Cache Location 1349 Creating a Page Output Cache File Dependency 1351 Expiring the Page Output Cache Programmatically 1353 Manipulating the Page Output Cache Programmatically 1358 Creating Page Output Cache Profiles 1360 Using Partial Page Caching 1361 Using Post-Cache Substitution 1362 Caching with a User Control 1366 Sharing a User Control Output Cache 1370 Manipulating a User Control Cache Programmatically 1370 Creating a User Control Cache File Dependency 1372 Caching Dynamically Loaded User Controls 1373 Using DataSource Caching 1375 Using an Absolute Cache Expiration Policy 1376 Using a Sliding Cache Expiration Policy 1378 Caching with the ObjectDataSource Control 1380 Caching with the XmlDataSource Control 1382 Creating a DataSource Control Key Dependency 1383 Using Data Caching 1387 Using the Cache Application Programming Interface 1387 Adding Items to the Cache 1390 Adding Items with an Absolute Expiration Policy 1390 Adding Items with a Sliding Expiration Policy 1393 Adding Items with Dependencies 1394 Specifying Cache Item Priorities 1396 Configuring the Cache 1397 Using SQL Cache Dependencies 1399 Using Polling SQL Cache Dependencies 1399 Configuring Polling SQL Cache Dependencies 1400 Using Polling SQL Cache Dependencies with Page Output Caching 1403 Using Polling SQL Cache Dependencies with DataSource Caching 1405 Using Polling SQL Cache Dependencies with Data Caching...1406 Using Push SQL Cache Dependencies 1408 Configuring Push SQL Cache Dependencies 1409 Using Push SQL Cache Dependencies with Page Output Caching 1411 Using Push SQL Cache Dependencies with DataSource Caching 1412 Using Push SQL Cache Dependencies with Data Caching 1415 Summary 1416 30 Localizing Applications for Multiple Languages 1419 Setting the Current Culture 1420 Setting a Culture Manually 1421 Automatically Detecting a Culture 1428 Setting the Culture in the Web Configuration File 1432 Culture and ASP.NET Controls 1433 Using the CultureInfo Class 1434 Using the CultureInfo Class to Format String Values 1435 Comparing and Sorting String Values 1437 Creating Local Resources 1438 Explicit Localization Expressions 1438 Implicit Localization Expressions 1441 Using Local Resources with Page Properties 1443 Retrieving Local Resources Programmatically 1444 Creating Global Resources 1446 Retrieving Global Resources Programmatically 1448 Using Strongly Typed Localization Expressions 1449 Using the Localize Control 1450 Summary 1452 31 Working with the HTTP Runtime 1453 Creating a Custom BuildProvider 1454 Creating a Simple BuildProvider 1454 Creating a Data Access Component BuildProvider 1458 Creating a Custom ExpressionBuilder 1464 Creating a Lookup ExpressionBuilder 1465 Creating HTTP Handlers 1470 Creating a Generic Handler 1470 Implementing the IHttpHandler Interface 1473 Creating an Asynchronous HTTP Handler 1478 Working with HTTP Applications and HTTP Modules 1482 Creating a Global.asax File 1483 Creating Custom HTTP Modules 1487 Summary 1489 32 Building Dynamic Data Applications 1491 Introducing ASP.NET Dynamic Data 1491 Building a Dynamic Data Application 1492 Working with Dynamic Data Templates 1496 Making Shared Template Changes 1497 Creating Type and Entity-Specific Templates 1497 Summary 1500 33 Building ASP.NET MVC Applications 1501 Introducing the ASP.NET MVC Framework 1501 Models 1502 Views 1502 Controllers 1502 Creating Your First ASP.NET MVC Application 1502 Building an MVC Page 1505 Accepting Form Input 1507 Summary 1509 34 Configuring Applications 1511 Overview of Website Configuration 1511 Using the Web Site Administration Tool 1513 Using the ASP.NET Microsoft Management Console Snap-In 1514 ASP.NET Configuration Sections 1515 Applying Configuration Settings to a Particular Path 1517 Locking Configuration Settings 1518 Adding Custom Application Settings 1520 Placing Configuration Settings in an External File 1522 Using the Configuration API 1523 Reading Configuration Sections from the Current Application 1524 Opening a Configuration File 1529 Opening a Configuration File on a Remote Server 1533 Using the Configuration Class 1536 Modifying Configuration Sections 1539 Provisioning a New Website 1543 Creating Custom Configuration Sections 1546 Creating a Configuration Element Collection 1551 Creating Encrypted Configuration Sections 1556 Encrypting Sections with the aspnet_regiis Tool 1557 Encrypting Sections Programmatically 1558 Deploying Encrypted Web Configuration Files 1561 Summary 1564 35 Deploying ASP.NET Web Applications 1565 Packaging Web Applications 1565 Using Web.config Transformations 1569 Deploying Databases 1571 One-Click Publishing Web Applications 1572 Summary 1573 Part VIII Custom Control Building 36 Building Custom Controls 1575 Overview of Custom Control Building 1575 Building Fully Rendered Controls 1576 Building Composite Controls 1587 Building Hybrid Controls 1590 View State and Control State 1596 Supporting View State 1596 Supporting Control State 1599 Processing Postback Data and Events 1602 Handling Postback Data 1602 Handling Postback Events 1606 Working with Control Property Collections 1618 Using the ParseChildren Attribute 1618 Using the AddParsedSubObject() Method 1626 Using a ControlBuilder 1626 Creating a Better Designer Experience 1631 Applying Design-Time Attributes to a Control 1631 Creating Control Designers 1636 Creating a Container ControlDesigner 1636 Adding Smart Tasks 1640 Summary 1645 37 Building Templated Databound Controls 1647 Creating Templated Controls 1647 Implementing the ITemplate Interface 1648 Creating a Default Template 1652 Supporting Simplified Databinding 1656 Supporting Two-Way Databinding 1660 Creating Templated Databound Controls 1666 Creating a DivView Control 1667 Summary 1672 Part IX ASP.NET AJAX 38 Using Server-Side ASP.NET AJAX 1673 The Ajax Vision 1674 Server-Side Ajax Versus Client-Side Ajax 1675 Debugging Ajax Applications 1675 Using the UpdatePanel Control 1677 Specifying UpdatePanel Triggers 1686 Nesting UpdatePanel Controls 1688 Updating UpdatePanels Programmatically 1692 UpdatePanels and JavaScript 1694 UpdatePanel Server-Side Page Execution Life Cycle 1697 UpdatePanel Client-Side Page Execution Life Cycle 1700 Canceling the Current Asynchronous Postback 1707 Aborting the Previous Asynchronous Postback 1710 Passing Additional Information During an Asynchronous Postback 1712 Handling UpdatePanel Errors Gracefully 1714 UpdatePanel Performance 1720 Using the Timer Control 1724 Using the UpdateProgress Control 1728 Summary 1731 39 Using the ASP.NET AJAX Control Toolkit 1733 Using the ASP.NET AJAX Control Toolkit 1734 Overview of the Toolkit Controls 1737 Using the AutoComplete Control 1739 Using the AutoCompleteExtender with a Page Method 1740 Using the AutoCompleteExtender with a Web Service Method 1743 Using Text and Value Pairs with the AutoCompleteExtender 1746 Using the DragPanel Control 1750 Using the FilteredTextBox Control 1754 Using the MaskedEdit Control 1756 Using the Animation Control 1759 Using the UpdatePanelAnimation Control 1764 Summary 1768 40 Client-Side Ajax with jQuery 1769 What Is jQuery? 1769 Using the jQuery Library 1770 Creating a jQuery File 1771 The $ Method and $(document).ready() 1773 jQuery Selectors 1774 Calling Web Services from the Client 1776 Calling an External Web Service 1776 Calling a Static Page Method 1780 Summary 1781 Index 1783