Trademark Acknowledgments
Hungry Minds, the Hungry Minds logo, Visual, the Visual logo, Read Less - Learn More and related trade dress are registered trademarks or trademarks of Hungry Minds, Inc., in the United States and/or other countries and may not be used without written permission. The maranGraphics logo is a registered trademark or trademark of maranGraphics, Inc. Visual Studio is a registered trademark or trademark of Microsoft Corporation. All other trademarks are the property of their respective owners. Hungry Minds, Inc. and maranGraphics, Inc. are not associated with any product or vendor mentioned in this book.

FOR PURPOSES OF ILLUSTRATING THE CONCEPTS AND TECHNIQUES DESCRIBED IN THIS BOOK, THE AUTHORS HAVE CREATED VARIOUS NAMES, COMPANY NAMES, MAILING, E-MAIL AND INTERNET ADDRESSES, PHONE AND FAX NUMBERS, AND SIMILAR INFORMATION, ALL OF WHICH ARE FICTITIOUS. ANY RESEMBLANCE OF THESE FICTITIOUS NAMES, ADDRESSES, PHONE AND FAX NUMBERS, AND SIMILAR INFORMATION TO ANY ACTUAL PERSON, COMPANY AND/OR ORGANIZATION IS UNINTENTIONAL AND PURELY COINCIDENTAL.

Permissions
maranGraphics Certain text and illustrations by maranGraphics, Inc., used with maranGraphics’ permission.

is a trademark of Hungry Minds, Inc.

LIMIT OF LIABILITY/DISCLAIMER OF WARRANTY: THE PUBLISHER AND AUTHOR HAVE USED THEIR BEST EFFORTS IN PREPARING THIS BOOK. THE PUBLISHER AND AUTHOR MAKE NO REPRESENTATIONS OR WARRANTIES WITH RESPECT TO THE ACCURACY OR COMPLETENESS OF THE CONTENTS OF THIS BOOK AND SPECIFICALLY DISCLAIM ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. THERE ARE NO WARRANTIES WHICH EXTEND BEYOND THE DESCRIPTIONS CONTAINED IN THIS PARAGRAPH. NO WARRANTY MAY BE CREATED OR EXTENDED BY SALES REPRESENTATIVES OR WRITTEN SALES MATERIALS. THE ACCURACY AND COMPLETENESS OF THE INFORMATION PROVIDED HEREIN AND THE OPINIONS STATED HEREIN ARE NOT GUARANTEED OR WARRANTED TO PRODUCE ANY PARTICULAR RESULTS, AND THE ADVICE AND STRATEGIES CONTAINED HEREIN MAY NOT BE SUITABLE FOR EVERY INDIVIDUAL. NEITHER THE PUBLISHER NOR AUTHOR SHALL BE LIABLE FOR ANY LOSS OF PROFIT OR ANY OTHER COMMERCIAL DAMAGES, INCLUDING BUT NOT LIMITED TO SPECIAL, INCIDENTAL, CONSEQUENTIAL, OR OTHER DAMAGES.

At maranGraphics, we believe in producing great computer books — one book at a time. maranGraphics has been producing high-technology products for over 25 years, which enables us to offer the computer book community a unique communication process. Our computer books use an integrated communication process, which is very different from the approach used in other computer books. Each spread is, in essence, a flow chart — the text and screen shots are totally incorporated into the layout of the spread. Introductory text and helpful tips complete the learning experience. maranGraphics’ approach encourages the left and right sides of the brain to work together — resulting in faster orientation and greater memory retention. Above all, we are very proud of the handcrafted nature of our books. Our carefully-chosen writers are experts in their fields, and spend countless hours researching

and organizing the content for each topic. Our artists rebuild every screen shot to provide the best clarity possible, making our screen shots the most precise and easiest to read in the industry. We strive for perfection, and believe that the time spent handcrafting each element results in the best computer books money can buy. Thank you for purchasing this book. We hope you enjoy it! Sincerely, Robert Maran President maranGraphics Rob@maran.com www.maran.com www.hungryminds.com/visual

ABOUT THE AUTHORS
Danny Ryan: Danny Ryan graduated from Georgia Tech with a degree in Industrial and Systems Engineering. Danny has more than three years of training experience and more than five years of consulting experience, most involving Fortune 500 companies. Danny has two years of “big-five” consulting experience with PricewaterhouseCoopers. Danny’s area of focus is consulting for Microsoft Internet technologies including Microsoft ASP.NET, C#, SQL Server 2000, BizTalk Server 2000, and Commerce Server 2000. Danny has used several processes for software development including variants of the Rational Unified Process and the Microsoft Solutions Framework. On projects, Danny normally plays the role of Project Manager. His certifications include MCSE, MCSD, MCT, and MCP + Internet. Danny is a recent instructor of XML, MSF Design, Microsoft Site Server 3.0, Interdev 6.0, and other Web Development classes. You can contact Danny at dryan@threewill.com or learn more about him at http://www.threewill.com/people/dryan. Tommy Ryan: Tommy graduated from Clemson University with a degree in Chemical Engineering. Tommy has more than twelve years of technical project experience and more than four years of pure software consulting experience. Tommy’s area of focus is consulting for Microsoft Internet technologies, including Microsoft ASP .NET, C#, SQL Server 2000, BizTalk Server 2000, and Commerce Server 2000. Like Danny, Tommy has used several processes for software development, including variants of the Rational Unified Process, and the Microsoft Solutions Framework. On projects, Tommy normally plays the role of Technical Lead. His certifications include MCSE, MCSD, MCT, and MCP + Internet. Tommy is a recent instructor of MSF Design, Microsoft Site Server 3.0, Interdev 6.0, and several of the Visual Basic 6.0 classes. Tommy is also the co-author of another Visual blueprint book on building Internet application with C#. You can contact Tommy at tryan@threewill.com or learn more about him at http://www.threewill.com/people/tryan.

AUTHORS’ ACKNOWLEDGMENTS
Both Danny and Tommy would like to thank Extreme Logic and all of the exceptional people that we worked with there. Special thanks to Wain Kellum, Keith Landers, Saima Adney, Alicia Ford, Bruce Harple, and Nancy Wehunt — along with all of the team members that we worked with on projects including: Anthony Yott, Brian Erwin, Dave Cohen, Alan Fraser, Jerry Rasmussen, Tim Coalson, Jim Davis, Stacy Parrish, Chris Cumpton, John Underwood, Desiree Tuvell, Rich Sabo, Teo Lachev, John Camp, Scott Matthews, Jennifer Aase, Amy Bauland, Russell Groover, Todd Ransom, David Steyer, Tony Heffner, Sean Gerety, Jason Etheridge, Julie Kellum, Ashley Aiken, and Tammy Conaway. We would like to thank the clients that we have worked with during the past couple of years for challenging us to be better consultants, including Nick Callivas, Brian Blinco, Jay Dalke, Bob Hughes, and Harwell Thrasher. We would also like to thank Megan Mathews and Joe Chancey of Drew Eckl & Farnham LLP, and Eddie Scott and Brad Pearce of Jackson, Reece, and Scott for the great service they provide. We would like to thank all of the hardworking people at Hungry Minds for helping us produce this book — especially Jennifer Dorsey, Jade Williams, and our Editors. Jennifer made sure that we were taken care of well. Jade did an awesome job of editing our work — we appreciate how hard she worked on this book, and we are very thankful that she was our Production Editor. Tommy would like to thank his colleagues at W.L. Gore and Associates who helped him start his professional career, including John Reaney, Mark Fundakowsi, Diccon Bancroft, John Pysczynski, Pamela Perdue, Erik Nightwine, Debra Raup, Ray Edmanson, Bob McCleary, Lawrence Anderson, Wolfgang Holma, and Line 10 Production Team; the WinCC Team at Siemens that helped him in his transition to being a Microsoft geek, including Emilio Matt, Rob Bohm, Bob Meads, Rich Miceli, Charlie Moore, Jörg Allmendinger, and Rene Wolf; and his extended family and friends for the support in the things outside of work including Joe and Rosemarie Markiewicz, Robert and Donna Philips, Joe and Jan Markiewicz, Chuck and Mary Hanson, Rob and Gretchen Pfeiffer, and Reverend Joe Ciccone CSP. Danny would like to thank: his friends for their support while writing the book, especially Dan Bassett and family, Nitin Dixit, Ellen Wu, Amy Bauland, Lisa and Stephen Cox and family, Jennifer and Wyatt Gordon, Danielle and Otan Ayan, Jack and Lisa Swift and family, Chikako and Takashi Asai and family, Robin Moon, Catherine Williams, Asad Jafari, Dan and Kelly Clark and family, Darnel Barnes and family, the Harding family, the Heap family, Kitty Pinto, Wendy Marinaccio, and Erica Pearlberg; everyone involved in the Jamaica trip for their good work including Father Kevin Hargaden, Shannon Smith, Michelle Basket, Ana Nerio, and everyone who sponsored the trip; the members of the MHS 10 Year Reunion Committee for picking up my slack including Sydney Whitmer, Tina Shamblin, and Jennifer Gordon; and finally, past colleagues who have made a difference in my life including Ivan Lee, Neil Russo, Jeff Shaw, Bobby Lee, Matthew Thayer, and Steve Johnston.

Madeline. love. Mom. thank you for showing us in a real way how to live according to the most important principle.We dedicate this book to our family. thank you for teaching us by example what it means to live a life based on principles. we wish you a wonderful lifetime together full of laughter. Linda. Dad.
. thank you for having faith in us and for being the support we needed to write this book — we could not have done this without you. Austin. Bobby and Ashley. Deanna. unconditional love. Alex. thanks for keeping us company while writing the book and keeping Kiki out of the office while we were working. we wish you all the best with your writing — you’re the true writer in the family and we look forward to reading your book. and great memories.

...............................NET:
Your visual blueprint for creating Web applications on the ............................................170 Create a Client Web Page for a Web Service .....................Redirect .........................................................................................................................188 Use a Code-behind for Your ASP...........................196 Write Output Using Response.....172 Create a Client Console Application for a Web Service .........................................................180 Create a Two-Tier Web Form .......................................................................206 Use the ASP..............................................................NET .......................192
9) USING ASP..................................................................................................................................................................................................................................................216 Using Server-Side Objects in the Global.............................................................................................................................................................230 Work with Page State ..222 Using Session State ..................NET framework
Return SQL Data from a Web Service ..............................................212 Using Processing Directives in the Global................................................................226 Work with Cookies ...........................................................220 Using Application State ......................................................................asax File ................................Params ............................................asax File .........ASP.........................................................................NET COMPONENTS
Read Form Data with Request...........................................204 Use the ASP......208
10) ASP............................asax File .NET Data Cache .........198 Redirect Using Response.................asax file ......................................................................................................................................................................................................................234
xi
.............................................................................NET APPLICATIONS AND STATE MANAGEMENT
Introduction to Applications and State Management ...........................................................................202 Send an E-Mail Using ASP............200 Check for Web Browser Types .............................................................210 Create a Global....................................................176 Create a Stateful Component .................NET Page Cache ...............................166 Work with the Session Object in a Web Service ...218 Using Application Event Handlers in the Global...............NET Page .............................184 Create a Three-Tier Web Form ..............Write ........................174
8) CREATE CUSTOM COMPONENTS
Create a Simple Component ..Form .................168 Work with the Application Object in a Web Service ..................................194 Display Data with Request........................................

NET. Experience with programming languages is also an asset.NET framework contains 15 chapters and three appendices.NET.NET.NET.NET framework. The computer will also need to have a text editor to create code. although you can use it if you want. No prior experience with ASP.
An Extra section provides additional information about the task you just accomplished. The C# programming language is used for most of the tasks in this book.
Who This Book Is For
If you are looking for a resource that will help you quickly get started creating ASP. The tasks in this book are developed using Windows 2000 with IIS 5.
xiv
. This book also demonstrates advanced features of ASP. but familiarity with the operating system installed on your computer is an asset. explains how you can install the .NET from ASP 3. such as creating custom components. Extra sections often contain interesting tips and useful tricks to make working with ASP.NET framework to distinguish different types of information. security. this book can be used as an informative desktop reference. Courier Font Indicates the use of C#.NET: Your visual blueprint for creating Web applications on the . such as Notepad.NET easier and more efficient. you can use this book to learn the essentials you need to work with ASP. keywords.NET.NET code. ASP. Once you become familiar with ASP.NET is required. or Jscript variable names. from beginning to end.0 installed.
What You Need To Use This Book
To perform the tasks in this book.0 is not required to do the tasks in this book. Bold Indicates information that you must type. VB. Visual Studio 7. The first chapter. such as Internet Explorer.
The Organization Of This Book
ASP. Italics Indicates a new term being introduced. you should read each chapter in order.NET framework uses straightforward examples to teach you many of the tasks required to write Web applications on the . debugging. but even if you have no programming experience.NET framework and configure many of the options available when setting up your Web site.
The Conventions In This Book
A number of typographic and layout styles are used throughout ASP.NET Web pages.NET: Your visual blueprint for creating Web applications on the . Many of the tasks in this book require a Web browser. configuration. Apply It sections offer inside information and pointers that can be used to enhance the functionality of your code.NET: Your visual blueprint for creating Web applications on the . This book will walk you through the basics that you need to get started and familiarize yourself with the essentials of working with ASP.NET framework.NET framework.HOW TO USE THIS BOOK
ASP. To get the most out of this book.NET: Your visual blueprint for creating Web applications on the . and other elements of ASP.0. and migration to ASP. Each chapter introduces new ideas and builds on the knowledge learned in previous chapters. you need a computer with an operating system on which you can install the . Getting Started with ASP.
An Apply It section usually contains a segment of code that takes the lesson you just learned one step further.

Chapter 3. It also covers working with cookies and page state. The chapter explains how to return a number of data types including arrays.NET including exploring and browsing your Web site. Chapter 9.NET. Work with Web Services. Chapter 11. describes the process for setting and retrieving configuration information for your ASP. text boxes.NET.NET. build a two-tier and a three-tier Web Form. This will prepare you for the material in later chapters if you are not familiar with the C# programming language.NET Components. Localization and ASP. collections. conditional statements.
Chapter 10. Chapter 14.NET applications. Chapter 13.NET. including how to work with variables. as well as the code from most of the Apply It sections. presents the fundamentals of working with ASP. Finally. Chapter 7. XML.NET Web pages. and exception handling. The final chapter explains some of the details about migrating to ASP.NET Web controls. explains how you can create. walks you through how to globalize your ASP. and Jscript languages. arrays.NET Applications and State Management. explains how to create components.NET. enumerations. including migrating code from VBScript to VB.NET: visual blueprint for Your
Chapter 2. opening and saving files.NET programs. Work with Web Controls. check-boxes.NET. the chapter explains how to validate user input in ASP. Web Development Basics. explains how to work with application and session state with ASP. and sort data.NET application. update.
What Is On The CD-ROM
The CD-ROM in the back of this book contains the sample code from each of the two-page lessons. Using ASP. This chapter also shows you how to use the sample program templates on the CD-ROM. test. including a Web page client and a Console client.
xv
. Page and Data caching of your ASP. will show you how to add many of the common controls to Web pages like text boxes using ASP. drop-down lists. locales. You see how to create clients for the Web service. and SQL Data. Configure Your ASP. ASP. introduces you to the C# programming language. and creating your first ASP.NET and other important issues to address when migrating. The chapter then demonstrates how to add special controls like calendars and advertisement banners. Chapter 8. Security and ASP. C# Basics.building dynamic Web pages Your visual blueprint for creating Web applications on the . shows you several different ways to secure your ASP. gets you started with creating Web pages in ASP. explains how to use some of the controls you will use to display data like the Repeater and the DataGrid control. The chapter also covers working with stored procedures and XML. and languages.NET Applications. objects. Work with HTML Controls. You will see how to insert. Access Data with ASP. and tables. delete.NET applications. The CD-ROM also contains several shareware and evaluation versions of programs that can help you work with ASP.NET application for different cultures. strings.NET Web page. The Appendices include useful tables of reference material and a summary of important elements of ASP.NET that have buttons. Chapter 12 introduces you to debugging your ASP. Chapter 6. and consume Web services. Chapter 4.NET framework
JAVASCRIPT: ASP.NET. An e-version of this book is also available on the companion disc. Chapter 5. VB. Create Custom Components. and store code in Code-behind components for your ASP. explains how to work with components not covered in other chapters including the Browser Capabilities component and components necessary to send e-mail. This saves you from having to type the code and helps you quickly get started creating ASP.NET Web pages is covered as well.NET syntax and the C#. looping structures.

This will enable you to run two operating systems on one machine. You can either use a Server Control that is built into ASP. ME. you can even use a simple text editor like Notepad. using any component model.0 applications run on the same server.NET enables you to take advantage of other features such as GUI support of drag and drop Server Controls and debugging support. using standards like HTTP and XML messaging to move data across firewalls.NET to work with WYSIWYG HTML editors and other programming tools. the .NET. Versions The ASP.NET Framework SDK. You will have to devote around 5GB of disk space to install the operating system (OS). Web Forms enable you to program against the controls that you put on your Web pages.NET and your ASP 3. except Windows 95. Using Web Services.
Web Servers The previous version of Active Server Pages was ASP 3. C#.NET
A
SP. Windows NT 4 with Service Pack 6a. These Server Controls are used for controlling HTML tags on a Web page.0 can both run on Internet Information Server (IIS) 5.NET applications. reusing and packaging the code in a well-designed manner.0 for these operating systems.NET platform. businesses can expose their data and/or component libraries. Web Forms ASP. Windows 2000.0.
Tools Microsoft designed ASP. Web services are not tied to a particular component technology or object-calling convention.NET and ASP 3. ASP. By using Web Forms. To separate the files associated for each OS. and Windows 95 all support the Microsoft . you should create a separate partition for the new OS. If you use Windows 95. you can build user interface code as effectively as your Business Services code.NET or create your own custom Server Controls. Web Services enable the exchange of data in client-server or server-server scenarios. Or. ASP.NET Web Services gives you the ability to access server functionality remotely.NET-compatible languages as well. Windows 98 SE. which in turn can be obtained and manipulated by client and server applications. Windows ME.ASP. Windows 98. and you want to run ASP. Language Support ASP.NET and keeping your original operating system intact.NET Web Forms gives you the ability to create Web pages on the . or NT. If you want more support from your development environment for coding.NET is a programming framework developed by Microsoft for building powerful Web applications. Web Services ASP.NET applications will run on IIS 5.NET has built-in support for three languages: Visual Basic (VB). Using a tool such as Microsoft Visual Studio. and JScript. you can install Windows NT or XP in addition to your other operating system by creating a dual-boot machine. and any other supporting applications.NET
INTRODUCTION TO ASP. and running on any operating system can access Web services. You can have your ASP.
2
. such as SQL Server 2000.NET Framework SDK. Windows XP.NET Framework is supported on Windows 2000 and Windows XP. Web Services is supported on all platforms supported by the Microsoft . you can use Microsoft Visual Studio. 98.0 with Windows 2000 and Windows XP. The Notepad text editor is used in this book’s code samples. giving you the ability to run ASP.NET Framework SDK. programs written in any language. You can install support for other . As a result.

asa to global. Performance A big difference between ASP 3.NET framework.asp to . but developers can easily extend this framework to suit the needs of their Web application. any serverside code is most likely going to have to be interpreted by the Web server. code often needs to be interpreted. Migration from ASP to ASP .asax text file or in a compiled class.NET is how your code is run on the server. unless it is cached.aspx to migrate their files to the ASP. With ASP.NET makes it easier than ever to access databases for this purpose and provides for managing the data in the database.asa file. add to. Developers can write this code in either the global. ASP application code.NET Framework. see page 282.NET configuration settings are stored in XML-based files. you need to put the code into a COM component. With ASP 3.NET applications.asax when upgrading from ASP. ASP.NET Simple ASP pages can easily be migrated to ASP. For additional information on handling migration issues. such as debugging.NET
1
State and Application ASP. or replace these schemes depending upon the needs of your application. With ASP 3.NET provide default authorization and authentication schemes for Web applications.GETTING STARTED WITH ASP.NET offers complete syntax and processing compatibility with ASP applications. sometimes by simply adding just a few lines of code to their ASP files. you now have access to the common language runtime (or CLR).0. If you want to avoid interpreted code in ASP 3.NET provides a simple framework that enables Web developers to write logic that runs at the application level.
3
. is supported in ASP. which are text files easily accessible for reading and writing. ASP.NET. language interoperability. This logic can include application-level events. They can also easily add ASP. Each of your applications can have a distinct configuration file. Power With ASP.
Configuration ASP.NET functionality to their applications with ease.NET applications is a common technique for displaying dynamic information to Web site visitors. written in the global. Data Access Accessing databases from ASP. Running on the CLR gives access to many of the features available in the . security. Developers simply need to change file extensions from .0 and ASP. You can easily remove.0. Security The .NET. You can simply rename global. data access.NET Framework and ASP. and more. You can extend the configuration scheme to suit your requirements.NET. your code is compiled into executable classes.0.

NET Framework upon rebooting.0 is installed by default when installing Windows 2000 in a new installation. Because Internet Information Server 5. administer. which is an interface for administering your Web sites.0 exists after the upgrade process. you may not need to install the software.
I The Add/Remove Programs
window appears.
› Click
ˇ Click Details.0: IIS Snap-In.
¤ In the Control Panel.0
M
icrosoft Internet Information Server (IIS) is the Web server software that you can use to create.0 services are set to automatically start when your computer reboots. make sure that Internet Information Server 5. If you have upgraded to Windows 2000 from a previous version of Windows. In this wizard. After installing IIS 5. you should install at least the Common Files.
double-click Add/Remove Programs.ASP.
.
4
next to Internet Information Services to select it ( changes to ).NET
INSTALL INTERNET INFORMATION SERVER 5. which installs the programs you need to run IIS 5. and host Web sites for the ASP. and World Wide Web Server.NET framework. IIS comes as a Windows Component and can be installed from the Windows Component Wizard.
I The Windows Components
Wizard dialog box appears listing the installation size of the component you can add or remove.0.0
The Windows Component Wizard becomes available when you select Add/Remove Programs from the Control Panel. so the software will be ready for you to install the .
‹ Click Add/Remove
Windows Components. restart the Web server.
INSTALL INTERNET INFORMATION SERVER 5.
description of the Internet Information Services subcomponents.
I This area displays a
Note: If the Microsoft Windows 2000 dialog box appears. IIS 5. close the dialog box.0 MB
⁄ Insert the Windows 2000
CD-ROM into your CD-ROM drive. which enables users to access your Web sites.
Internet Information Services (IIS)
22. You can install the software from all versions of the Windows 2000 CD-ROM disc.

You can administer IIS through the Internet Services Manager. you can add it to your own custom console along with any other Snap-Ins that you use often. The Internet Services Manager (HTML) is a Web-based version of the administration functionality that enables you to administer the server using a browser.
Note: You should now restart your computer.
5
. File Transfer Protocol (FTP) Server installs support for uploading and downloading files using FTP sites. which is available from Start ➪ Programs ➪ Administrative Tools ➪ Internet Services Manager.0 MB
I The Internet Information
Services (IIS) dialog box opens. If you are using Visual Studio or FrontPage for working with any of your sites.
Internet Information Services (IIS)
22.
‡ Click OK to confirm your
selections and close the dialog box. you may want to install FrontPage 2000 Server Extensions.
complete.
I When the installation is
· Click Finish to close the
Wizard. a message appears confirming the successful installation of IIS.
° Click Next to install the
parts of the Internet Information Services and subcomponents you selected. it will install help files and samples to assist you with administering IIS.GETTING STARTED WITH ASP. Install the NNTP service if you need support for network news. Because this tool is designed as a Microsoft Management Console Snap-In. If you choose Documentation.NET
1
You have several other IIS subcomponents that you can install. Install the SMTP service if you need support for e-mail functionality.
Á Click
next to each subcomponent you want to install ( changes to ).

the software appears in the middle of the dialog box. specifying which parts of the .NET SDK make sure that you have enough hard drive space for the installation. You can take two paths to get the . you need 311MB to complete the installation.NET FRAMEWORK
⁄ Insert the CD-ROM with
the .NET Framework along with Microsoft’s development tool for ASP.NET SDK is installed. you may be required to update certain software on your server.
‹ Click „ next to I accept the agreement to accept the software license („ changes to ´). and specifying where the .NET applications.NET Framework SDK starts with obtaining the setup program.NET
INSTALL THE .NET Framework SDK. This path gets the .NET Framework installed on your machine. This install includes the necessary runtime to process your ASP. The second way to get the Microsoft . For instance.
6
.NET SDK and run the setup.
A
run the setup program.
The process for installing the . The installation process includes accepting a software agreement. you can install the Microsoft . your version of the Microsoft Data Access Components (MDAC) may need updating to a more recent version. › Click Next to continue. You may need to scroll down to see the entire license agreement.NET Framework.
I The license agreement for
¤ Click Next to continue.NET SDK from a local drive or a network drive.NET Framework installed on your machine is to install Visual Studio.
I The .NET FRAMEWORK
fter you have the IIS installed on your Web server. As of Beta 2.NET.
Note: This task assumes that you have the installation program on CD-ROM.NET Framework SDK.NET Framework SDK
Setup page appears. You can also install the . When you
INSTALL THE .exe file.ASP. When installing . The first path is to install the .NET applications and also has documentation for using the .NET SDK to install.

I A dialog box appears
Á Click
allowing you to specify whether to install the . going from Beta 1 to Beta 2 of the .0. The namespace names have changed often.
° Click Next to select the
default folder and to continue.2914 of the .
next to SDK Samples to select it ( changes to ).NET Platform SDK. microsoft.NET Platform SDK. be sure to check the release notes for any special instructions. and documentation.com/newsgroups/.NET Platform SDK from http://msdn.
I The Destination Folder
window appears.
‡ Click Next to continue. This task uses Build 1. data access framework classes changed dramatically.GETTING STARTED WITH ASP.NET Runtime.0. ASP. next to Software Development Kit to select it ( changes to ).
I The .
Be careful when searching the Web for source code that runs on the . samples. com/downloads/.NET Platform SDK.NET Platform SDK by going to http://msdn. These notes will let you know what issues are present in the build that you are installing.NET SDK is installed.NET software.
ˇ Click
7
.NET and transactions from managed code support were dropped for Windows NT 4. For example.NET
1
You can download the latest . especially from Beta 1 to Beta 2. The availability of namespaces on each operating system changes quite often. Before installing the .microsoft. You can also go to the Microsoft newsgroups for the . In particular.

‹ Click
to expand the list of Web sites on the Web server ( changes to ). along with any of its subdirectories. the document that they first see is the default document. If someone bypasses the security of IIS. There are only a few exceptions to this rule.
I The Default Web Site
Properties dialog box appears.
› Click the Web site whose ˇ Click the Properties
button ( ).NET
CHANGE THE HOME DIRECTORY IN IIS
he location where the files for your Web site are stored is called the home. You can specify which directory on your Web server is the home directory.
8
.
You can also set up virtual directories to make other directories that are not underneath your home
CHANGE THE HOME DIRECTORY IN IIS
Default Web Site
⁄ In the Control Panel.
‡ Click Browse to open the
Browse for Folder dialog box. Any files that are in any of the subdirectories of the home directory will be available as well. The default location for the Web site that is created when installing IIS is C:\Inetpub\wwwroot\.
¤ Double-click Internet
Services Manager to open the Internet Information Services window. home directory you want to change.ASP. When users come to your Web site.
T
directory available for your Web site.
Á Click the Home
Directory tab. you must make sure that they only have read access permissions to the files.
double-click Administrative Tools to open the Administrative Tools window. See page 14 for information on setting the default document. Make sure that this home directory. has proper file system security applied. The default document must be placed in the home directory. or root. directory. You can change this location to be another directory of your choice. See page 10 for more information on virtual directories.

Use this option if you want to have users redirected to another URL when they are trying to access any part of your site. Use the table below to determine which option is best for setting the location of the home directory.GETTING STARTED WITH ASP.NET
1
There are several options you can choose when specifying a home directory.
I The new home directory
appears in the Local Path.
9
. Follow steps 1 to 5 on page 8 and then select the option you want to use. OPTION
A directory located on this computer A share located on another computer
DESCRIPTION
Use this option for specifying a directory located on the Web server as the home directory.
A redirection to a URL
° Click the directory you
want to set as your new home directory.
‚ Click OK to close the
properties dialog box.
— Close the Internet
Information Services window.
· Click OK to set the new
home directory and to close the dialog box. Use this option if you want to specify a share directory as the home directory. This is the most common choice. You can specify the user that you want to connect as using the Connect As button.

ADD A VIRTUAL DIRECTORY IN IIS
Default Web Site New
b Site
Virtual Directory
⁄ In the Control Panel.
¤ Double-click Internet
Services Manager to open the Internet Information Services window. com/virtual. All of the subdirectories of this directory will be accessible to your users.com/test as your URL.mylifetimegoals. the default Web site that is created when installing IIS will have a home directory located at C:\Inetpub\wwwroot. you access the files in that directory using www.mylifetimegoals. C:\Inetpub\wwwroot\test).ASP. Having virtual directories is helpful if you have files located on another server. You can then access the files in virtual by using the address www. you can configure your Web sites. suppose that your site is available at www. which you want to add the virtual directory. For example. C:\virtual).
ˇ Click Action ➪ New ➪
Virtual Directory. You may have files on one server that are shared by sites that are distributed across multiple Web servers. For example. Each Web site will have its own home directory.
› Click the Web site in
10
.
‹ Click
to expand the list of Web sites on the Web server ( changes to ).
A
Virtual directories give you the ability to access directories that are not necessarily a subdirectory under your home directory. you can create a virtual directory with the alias virtual and map it to any physical directory (for example. You add a subdirectory under your default directory (for example. For example.NET
ADD A VIRTUAL DIRECTORY IN IIS
fter you have installed Internet Information Server (IIS). This sharing can be accomplished by accessing this shared location through a virtual directory. After that subdirectory is added.mylifetimegoals.
double-click Administrative Tools to open the Administrative Tools window.com.

Click the Delete button and then click Yes in the dialog box that appears. Removing a virtual directory does not remove the actual directory and its contents from the computer. specify an alias and set the appropriate access and application permissions. Perform steps 1 through 3 to open the Internet Information Services window.
CONTINUED
11
.
You can also remove a virtual directory you no longer need from IIS. Click the Share This Folder option.
I The Virtual Directory
Á Click Next to continue. Click the File Menu.
° Click Next to continue. Then click the Web Sharing tab and select the Web site you want to make the virtual directory with. then choose Properties.GETTING STARTED WITH ASP. Click OK when you finish. Then click OK again to close out the Properties dialog box.NET
1
Virtual directories can also be set using Windows Explorer.
Creation Wizard appears.
‡ Type an alias for the
virtual directory. In the Edit Alias dialog box. and then select the virtual directory you want to remove. Select the folder you want to set up as a virtual directory in Windows Explorer.

If there is a default document in that directory. Select this setting for virtual directories containing ASP pages.
‚ Click Next to continue. The Run scripts permission is turned on by default. When a user specifies a URL that contains a directory and does not specify the name of the page.
12
. then a list of files and subdirectories appears. The Read permission is turned on by default.ASP. the Execute permission is rarely enabled. The Browse permission enables users to view the list of all the subdirectories and pages that the virtual directory contains. For security reasons.NET
ADD A VIRTUAL DIRECTORY IN IIS
A
fter you specify the path to the directory that you want to set up as a virtual directory. The Run scripts permission enables scripts to run in the directory.
— Click
I You can also click Browse
to locate the directory on your computer.
± Click Next to continue. Select this setting for virtual directories that have ASP pages that create files on the server side. Select this setting for a virtual directory containing contents that you want to make available for users to view. You have a choice of five settings to choose from or combine.
ADD A VIRTUAL DIRECTORY IN IIS (CONTINUED)
The Execute permission enables applications to run in the virtual directory. you can set access permissions for the directory. it will appear instead of the directory listing. The Read permission enables users to access Web pages. The Write permission enables the creation of files in the directory.
next to the appropriate access permissions ( changes to ).
· Type the path to the
directory in which you want to create a virtual directory.

or as a redirection to a URL.
13
. Then. A virtual directory enables you to choose the application protection level. a share on another computer. unlike normal subdirectories of the Web site.NET
1
Like home directories in Web sites.
You can also use virtual directories to isolate unstable sections of your Web application.GETTING STARTED WITH ASP. Choose High (Isolated) for virtual directories that contain code that needs isolation from the rest of the site. virtual directories can be specified as either a directory on a Web server. change this by accessing the properties of the virtual directory and specifying a network share or URL. To work around this. initially set out the virtual directory to be mapped to the directory.
™ Click
to close the Internet Information Services window.
you have successfully created a new virtual directory.
I The new virtual directory
appears under the Web site you selected. The option to create a virtual directory map to a network share or URL is not available from the virtual directory creation Wizard.
books
I The wizard confirms that
¡ Click Finish.

it sends back an error message.htm are some of the most common filenames used for default documents. default. the user sees a list of files and subdirectories instead of an error.
You can specify a different set of default documents for each directory in a Web site.NET
SET A DEFAULT DOCUMENT FOR IIS
he document that is sent to a user’s browser. sending the first document it finds.
¤ Double-click Internet
Services Manager to open the Internet Information Services window.
I The Default Web Site
Properties dialog box appears. If IIS does not find the document that matches the specified filenames. you can also set the order in which
SET A DEFAULT DOCUMENT FOR IIS
Default Web Site
⁄ In the Control Panel. is called the default document. When directory browsing is set for the requested directory. if no specific page is requested. Filenames like index. When specifying a default document. default.aspx. You should keep in mind some of the de facto standards when choosing the list of filenames to use in the list of default documents. Sticking with this as a standard will help when it comes to troubleshooting the site. default. You can specify zero to many filenames for IIS to look for when searching for the default document. and home.
Á Click the Documents tab.
14
.htm.asp. default.htm.
T
IIS looks for a match. It starts from the top of the list and searches downward.ASP.
‹ Click
to expand the list of Web sites on the Web server ( changes to ).
› Click the Web site that ˇ Click the Properties
button ( ). you want to set as your default document.
‡ Click
Enable Default Document to select it ( changes to ).html.
double-click Administrative Tools to open the Administrative Tools window.

‚ Click OK to add the new
default document to your list.
— Click an arrow button (
or ) to move the document up or down in the list.htm
° Click Add to open the
Add Default Document dialog box.NET
1
Another option on the Documents tab for the Web Site Properties page is the document footer. To do this.
¡ Click
window.
· Type the name of the new
default document. click Cancel to close the dialog box.
± Click OK to confirm
your changes and close the dialog box.
I The new default document
is added to the list.GETTING STARTED WITH ASP. Click Enable Document Footer and then click the Browse button to locate the HTML file you created. HTML Footer File Example:
<bold>Copyright 2001</bold>
home. create a file with some HTML formatting.
Note: If the Inheritance Override dialog box appears. This option is an easy and convenient way to put a footer at the bottom of all documents on your site. because they are already a part of the pages in your site. You should not put HTML tags such as <TITLE> or <BODY>.
to close the IIS
15
. Perform steps 1 to 6 below to display the Documents tab of the Default Web Site Properties dialog box.

‹ Click
to expand the list of Web sites on the Web server ( changes to ). You can specify how often you want log files to be created for your Web site.
to open the Active log format menu. you can have IIS log a number of different details about the request. The default format of W3C extended format should work for most cases. Logging can have an impact on site performance due to its need to write to the file system. When the Enable Logging option is checked in your Web Site tab of the Properties window for your Web site. You can choose the format in which you want the log files to be saved.
Default Web Site
W3C Extended Log File Format
⁄ In the Control Panel. you want to change.
Á Click the Web Site tab.
› Click the Web site that ˇ Click the Properties
button ( ). At the time of their request. You do not want your log files to fill up your hard drive. You can also specify the location of the log file in the Web server. It can also be an issue if you are not removing old log files.
· Click to select the log file ‚ Click Properties to open
the Extended Logging Properties dialog box.ASP. For busier sites.
I The Default Web Site
° Click
Properties dialog box appears. unless you have a program that requires some other format.
double-click Administrative Tools to open the Administrative Tools window.
16
Note: This option maybe enabled by default. You can choose to put your log file information in the same log file by choosing Unlimited file size.
. format that you want to use. IIS logs requests.NET
CHANGE LOG FILE PROPERTIES FOR IIS
I
nternet Information Server log files contain information about requests made to your Web server.
¤ Double-click Internet
Services Manager to open the Internet Information Services window. You should only use logging when it is necessary. ‡ Click next to Enable
Logging to enable the Web site to log information ( changes to ). hourly is
CHANGE LOG FILE PROPERTIES FOR IIS
appropriate. The default location of the log file is in the System32\Logfiles directory in the Windows operating system directory.

0.+MSIE+6.2615) 2001-04-20 15:26:22 127.aspx .127.0.1 .0. +COM++1.127.+MSIE+6.0.0.+MSIE+6.2615) 2001-04-20 15:32:10 127.0+(compatible. ± Type the path of the
directory where you want to store log files.0.127.2615) 2001-04-20 15:26:22 127.+Windows+NT+5.1 80 GET /quickstart/aspplus/Default.+COM++1.+Windows+NT+5.0+(compatible.0.0+(compatible.NET
1
You can select extended properties for assistance when troubleshooting.
£ Click
to close the Internet Information Services window.0.0.200 Mozilla/4.0.1 . +COM++1.304 Mozilla/4.0.GETTING STARTED WITH ASP. +COM++1.+Windows+NT+5.1 80 GET /quickstart/aspplus/images/ aspplus2.0.
I You can also click Browse
to select a directory on the computer.0.0.1 .0.
17
.0.0.
™ Click OK to close the
Properties dialog box.0b.0. Click the Extended Properties tab and then click each desired extended logging option.1 80 GET /quickstart/aspplus/doc/ toolbar.0.+MSIE+6.0.0.gif .200 Mozilla/4.
¡ Click OK to confirm the
log file properties that you specify.0b.0b.0.1 .200 Mozilla/4.0b.0.0+(compatible.aspx .2615) 2001-04-20 15:26:23 127.2615)
— Click „ to select the time period that you want to use to create new log files („ changes to ´).+Windows+NT+5.+Windows+NT+5.1 80 GET /quickstart/aspplus/doc/ quickstart.0. Log File Example:
2001-04-20 15:26:22 127.200 Mozilla/4.0.0.aspx .0.127.1 .0+(compatible. aspx .0.127. +COM++1.0.0b.1 80 GET /quickstart/aspplus/doc/ whatisaspx.0.+MSIE+6.

double-click Administrative Tools to open the Administrative Tools window. but do not take effect until the site is restarted.
⁄ In the Control Panel.
STOP. OR PAUSE A WEB SITE
*devserver
Default Web Site (Stopped)
STOP A WEB SITE
¤ Double-click Internet
Services Manager to open the Internet Information Services window. For busy Web sites. backups. Web sites can also be paused.NET applications. is stopped immediately.
ˇ Click the Stop button ( ). With ASP. OR PAUSE A WEB SITE
A
Web site sometimes needs to be stopped. click
the Web site.
I The Web site stops.NET
STOP.
18
. you should not have many reasons for stopping or pausing the Web server. Some Web site configuration tasks can be performed while the site is running.ASP. such as when you need to perform file maintenance. but it prevents any new activity on the Web site. such as processing an ASP. START. or virus checks on the site. START. Stopping a Web site from running causes an immediate interruption of service for all users accessing the site.
‹ Click
to expand the list of Web sites on the Web server ( changes to ). Any activity being performed by the Web site. Starting a Web site you
previously stopped also enables users to once again access information on the site.NET page or creating a file.
› To stop a Web site. You can stop and then start the site to apply the changes. Pausing a Web site does not stop the site from completing any activities that are in progress. it is common for Web site administrators to first pause the Web site and then wait until all activity has ceased before stopping the Web site.

click the Pause button again. COMMAND
iisreset /restart iisreset /start iisreset /stop iisreset /reboot iisreset /rebootonerror iisreset /status iisreset /?
DESCRIPTION
Stop and then restart the Web server. Display information about the iisreset command. or pausing the Web server. Stop and then restart the Web server.
Default Web Site
Default Web Site (Paused)
START A WEB SITE
¤ Click the Start button (
I The Web site restarts.
¤ Click the Pause
button ( ). starting. type iisreset / followed by the action you want to perform. I To resume running the
Web site. Restart the computer if an error occurs while stopping.
PAUSE A WEB SITE
I The Web site pauses. Start the Web server. click
the Web site. Stop the Web server.
19
.
). Using this command to stop or start a Web server will stop or start all the Web sites on the server.
⁄ To pause a Web site. click
the Web site.GETTING STARTED WITH ASP.NET
1
You can stop and start a Web server using the iisreset command.
⁄ To start a Web site. Restart the computer. At the Command Prompt on the Web server.

You can open this tool directly from the Start menu or use the Snap-in console that is available in the Computer Management Console Application. You can also use the
ISM tool to go to a specific directory or page in your Web site and browse from there.
¤ Double-click Internet
Services Manager to open the Internet Information Services window. IIS Admin gives you an Explorer-like view of your Web site so it is very intuitive for you to go to any specific area of your site.ASP.NET
BROWSE YOUR DEFAULT WEB SITE
ou can use the Internet Services Manager (ISM) Application to open pages into a browser for files that are on your Web site. If you choose a Web or directory to browse. versus having to type the entire URL. See page 14 for more information on setting a default document. You also can use the tool to open the Web site locally into your browser. Having this tool enables you to easily locate any page in your site and view it in a browser.
BROWSE YOUR DEFAULT WEB SITE
Administrative Tools
Internet Services Manager
⁄ In the Control Panel.
20
.
double-click Administrative Tools to open the Administrative Tools window. the default document will appear.
Y
This administrative tool enables you to configure your Web site and navigate through all of the content on the site.

WEB DEVELOPMENT BASICS

2

The Internet Services Manager is useful for browsing your Web site, but if you are browsing the same page multiple times, then you should look at some other alternatives. One alternative is to add the URL to your list of favorites in your browser. You can also launch a page from a shortcut on your desktop. You can create a shortcut by rightmouse clicking on your desktop and choosing the option off of the pop-up menu (New ➪ Shortcut). This brings up a dialog box that takes you through a wizard to configure the shortcut. You can also browse your site with other tools, like your development environment tool. One example is using Visual Studio .NET (VS.NET). VS.NET has a project explorer built into the development environment. From the project explorer you can launch any file you choose. You even have the option of choosing which browser to use.

Default Web Site

‹ Click

to expand the list of Web sites on the Web server ( changes to ).

› Right-click Default Web
Site to open the pop-up menu.

I The Default Web site
appears.

Note: The IIS 5.0 Documentation opens.

ˇ Click Browse.

21

ASP.NET

EXPLORE A WEB SITE
ou can use the Internet Services Manager (ISM) Application to explore content on your Web site in Windows Explorer. You can open this tool directly from the Start menu or use the snap-in console that is available in the Computer Management Console Application.

Y

tool’s interface displays a virtual structure of your Web site. There are cases in which you want to access the physical files or directories in your Web site. These cases could be when you want to set file/directory permissions or open a file directly for editing. Exploring your site through ISM is a useful feature when your site is composed of many virtual directories. With virtual directories, when you choose the Explore action from ISM, it loads up the directory to which the virtual directory is mapped. If the virtual directory is mapped to a share, the share appears in Windows Explorer.

This administrative tool enables you to configure your Web site and navigate through all of the content on the site. The tool gives you a Windows Explorer–like interface for navigating through the hierarchy of the site. You have the option to launch Windows Explorer from any directory of the site. Being able to launch Windows Explorer from any location in the ISM tool is very convenient. The ISM
EXPLORE A WEB SITE

Administrative Tools

Internet Services Manager

⁄ In the Control Panel,
double-click Administrative Tools to open the Administrative Tools window.

An alternative way to get to the Internet Services Manager is to open the Computer Management Console. This console can be reached by rightmouse clicking on the “My Computer” icon on the desktop and choosing Manage from the pop-up menu. You can also get to the Computer Management Console through the Control Panel.

The Computer Management Console is a very useful console when it comes to managing your Web site. You can connect to other machines on your network and manage resources on those machines that are used by your Web site. For example, you can maintain the shares that are exposed by a remote machine. For a share, you can give the share name, path, and security rights. Shares are sometimes used for virtual directories in your Web sites. See page 10 for information on how to create a virtual directory.

Default Web Site

wwwroot

‹ Click

to expand the list of Web sites on the Web server ( changes to ).

› Right-click Default Web
Site to open the pop-up menu.

I The Windows Explorer

ˇ Click Explore.

displays the directory where the files for the Default Web site are located.

23

ASP.NET

OPEN A TEMPLATE FILE
ou can use template files to shorten the time it takes to program your applications. Template files also help promote more consistent use of programming standards.

Y

components that you build. When you see patterns of repetitive code, this is an opportunity to make a generic template that you can create for future use. Templates are commonly used in this book to help you learn a task. By using the templates, you can save time by not having to create the basic HTML code for every page. You can simply open the file directly from the CD with your text editor. Or, to avoid going to the CD drive, you can copy the files onto your hard drive. After opening the template and making the necessary changes, you may want to save the file to the Web server for later requests.

Template files are files with common code that can be used across an application. For example, this book uses a template file, GenericTemplate.aspx, as a starting point for creating an ASP.NET Web page. There are many repetitive lines of code in creating an application. For example, Web Forms have several lines of code that are very similar page after page, with the exception of the content between the HTML opening and closing tags, which changes. After you have built several Web applications, you can determine the classifications of pages and
OPEN A TEMPLATE FILE

Note: If you installed the software from the CD, the path to the Code Templates directory is C:\Program Files\Visual ASP.Net\Code Templates\ plus the filename for the specific html template, such as GenericTemplate.htm.

Note: You can open the template from the CD at D:\VISUALASPNET\Code Templates\.

WEB DEVELOPMENT BASICS

2

SAVE A FILE TO THE DEFAULT WEB SITE

Y

ou can save your files to the Default Web site so that you and others can request the file from the Web server.

site, as opposed to a local drive on the Web server. To find the physical location of where your Web site files are stored, see page 22. Common files that will make up your Web sites include Web Forms, Code-behind Pages, Web Services/Web Service Clients, components, and configuration files. Unlike ASP 3.0 sites that use components, ASP.NET applications are self-describing and do not require registry entries. Therefore, you can simple copy the application with XCOPY or FTP. Copy deployment works in most cases, but there are other configurations that take a few more steps to properly configure.

The Default Web site is a Web site that is on your Web server when you install Internet Information Server 5.0. If you have not mapped the Default Web site to another location, the default location for the Default Web site is C:\InetPub\wwwroot. That is the path you should use if you have not changed the default configuration. If your Web server is on a different machine than the physical files of your Web site, you need to save the files on the file share that is designated for your Web

want to store the files is not onscreen, click the Save in to select the folder.

Note: To enable the file to load automatically in the Default Web site, save the file to the root directory (C:\Inetpub\wwwroot\) as Default.htm.

Note: See page 20 for instructions on browsing the Default Web site.

Note: See page 14 for more information about the default document in IIS.

25

ASP.NET

CREATE AN HTML PAGE
ou can use a text editor to create a Web page. A Web page should, at a minimum, have the <HTML> and the <BODY> tags in it. The tags in your HTML page give your Web browser specific instructions for displaying the page to the user. Most tags have an opening and a closing tag that affect the text between the tags. The closing tag should have a forward slash (/) in it. It is common to type tags in uppercase letters to make the tags stand out from the text in the Web page.

Y

You can create an HTML page with a form on it to gather input from a user. A form can be placed anywhere between the <BODY> tags in an HTML page. The action attribute in the <FORM> tag tells which page should process the form when the user submits the form. Forms are the best way to collect input from a user. You will consistently use forms if you are building an interactive site. HTML forms are a big part of how the ASP.NET has implemented its Framework, as you will see with Web Forms.

The <HTML> tag identifies a document as a Web page. You must place the HTML markup that you want to appear in the Web browser between the <BODY> tags.
CREATE AN HTML PAGE

° Position the cursor
insertion point between the <BODY> tags and create a form for collecting information about user comments.

‚ Add a Submit button to
the form.

26

I If the Default Web Site
Note: See page 20 for instructions on browsing the default Web site. such as a First Name.
¡ Type SubmitComments. Radio buttons enable users to select only one of several options. here are some examples of commonly used form elements: FORM ELEMENTS
Text Box Text Area Password Box Drop-Down List Check Box Radio Button Submit Button
2
DESCRIPTION
A text box enables users to enter a single line of text.
£ Browse to the saved Web
page at http://localhost /SubmitComments.WEB DEVELOPMENT BASICS
Several elements on an HTML form enable you to collect and/or display information. ™ Click Save to save and
close the dialog box. The TEXTAREA element displays a large text area that enables users to enter several lines or paragraphs of text. The SELECT element displays a drop-down list that enables users to select an option from a list of several options.htm. An example of an attribute for the textbox is the maxlength property. a File not Found error will appear onscreen because you have not created the page. ± Click to select the Default
Web Site folder where you want to store your file. which tells the Web browser the maximum number of characters that the user should be able to type into the textbox. click the Save in to select the folder..
— Click File ➪ Save As. To build a form.
Save As..
Note: If you click the Send Comments button on this form. An example of an element is a textbox. A submit button enables users to send data in the form to the ASP page that will process the data. For each element that you have. A password box enables users to enter text into a text box while masking what they are typing in with asterisks.
27
.
folder is not onscreen. you can have a number of attributes. Check boxes enable users to select one or more options.htm as your filename.
I The Web page appears
with the form on it.

Form statement enables you to access information passed by a form to a Web server.Write statement enables you to manipulate the response to a user’s request.ASP.” You can use <% and %> as a shorthand replacement for declaring server-side
CREATE AN ASP PAGE
Open. The Request. This statement enables you to modify the HTML sent in the response dynamically. interactive Web pages. Á Click Open to open the
template.
° Type a description of the
page between the <H3> tags and press Enter..0 page to process a form that is submitted from an HTML page. ASP 3. Saving your ASP 3. The Response.NET pages can coexist on the same Web site. ‹ Click to select the
folder that contains your Code Templates. enabling you to customize responses to user requests.0 pages with an .
Adding ASP code to an HTML page enables you to create dynamic.
‡ Declare the scripting
language used for the page..
28
.0 object model to interact with Web servers’ requests and responses to users. The server-side code blocks tell the Web server where the ASP code begins and ends.
ˇ Click to select a template.
· Type the HTML and ASP
code to display what the user fills in on the form. This tells the Web server which areas need to be processed before being sent to the user’s Web browser. ASP code is inserted into HTML code using code declaration blocks.
Y
code.
› Click
to select All Files from the drop-down list.NET
CREATE AN ASP PAGE
ou can create an ASP 3. ¤ Click File ➪ Open. Code declaration blocks are defined using <script> tags that contain a RUNAT attribute value set to “server.asp extension allows the Web server to determine how to properly process the file. You can use the ASP 3.0 pages and ASP.
Ctrl+O
⁄ Start your text editor.

Example:
<P><STRONG>Form Collection</STRONG> </P> <P> <% For Each Item in Request. The following code.Form(Item)(intLoop) %> <br> <% Next Next %> </P>
Save As.asp ™ Browse to the saved Web
as your filename.
I If the Default Web Site
folder is not onscreen.htm to C:\InetPub\wwwroot\ from the installation directory or the CD. written in VBScript.WEB DEVELOPMENT BASICS
2
With proper use of the ASP 3...
‚ Click File ➪ Save As. will display all of the form variables submitted.
I The Web page echoes
back the information that you filled in on the form.
Note: You will need to copy SubmitComments.Form(Item).htm.
± Type ReceiveComments. — Click to select the Default
Web Site folder where you want to store your file.
I The Web page appears with
the form on it. click the Save in to select the folder.
¡ Click Save to save and
close the dialog box.Count Response.
Note: See page 20 for instructions on browsing the default Web site.
¢ Click the Send Comments
button.
page at http://localhost /SubmitComments. you can generically display all of the information that was posted by any HTML form.0 object model.Write Item & " = " & Request.
29
.Form For intLoop = 1 to Request.
£ Type your information
into the fields on the form.

› Click
to select All Files from the drop-down list.
30
.
Y
When you are ready to create the form for the page.
ˇ Click to select a template.
Open.NET. You can do this by having the page submit to itself. the model for processing and responding to user requests is to use the same Web file(s) for collecting user input and displaying results. However.
° Click between the <BODY>
tags and create a form for collecting information about user comments.0.NET Web Form that provides the HTML to render the user interface and processes requests from a user.NET
CREATE AN ASP. You can do this by setting the RUNAT attribute equal to Server. you must set up both the form and the controls on the form to run server-side. declare what language you will use on the page. ¤ Click File ➪ Open.NET WEB PAGE
ou can create an ASP.NET Web Forms. This model of sending requests to the same page that collects user input is called postback. For more information about server-side controls. This model could be implemented with ASP 3.NET WEB PAGE
With ASP..ASP. Postbacks are an integral part of the event-handling model that is available in ASP.
‚ Add a Submit button to
the form. you need to use the correct tags to do this.
Ctrl+O
⁄ Start your text editor.
· Add additional HTML
controls to the form to collect information. including the <HTML> and the <BODY> tags.NET Framework. Á Click Open to open the
template.
CREATE AN ASP.NET page..
‡ Type a description of the
page between the <H3> tags. ‹ Click to select the
folder that contains your Code Templates. see Chapter 5. Introduction to Server-side Controls. To start the ASP. Then add the standard HTML to the page. but you would typically see a separate page for collecting input and displaying results of submitted input. with ASP.

in the case of C# the extension is . is a common Web development technique. nothing significant should happen because no code has been created for when the page submits the form to itself. extension is . you will need a placeholder for displaying information when the page comes back to the user. This is a cleaner programming model that is closer to what is available to eventdriven programming tools that programmers have had for years.
— Click File ➪ Save As.
Save As.aspx.aspx.0.
With ASP. Code-behind pages enable you to separate code from presentation (HTML). The concept of code-behind pages is a new feature that was not available in ASP 3. or place the code in a codebehind page. click the Save in to select the folder.
folder is not onscreen.cs.
£ Browse to the saved Web
page at http://localhost /Comments.
™ Click Save to save and
close the dialog box.
¡ Type Comments. When you configure your Web Forms to postback.
31
..
I If the Default Web Site
Note: See page 20 for instructions on browsing the default Web site.NET Web Forms.. postback.
Note: If you click the Send Comments button on this form. you can either have your server-side code imbedded in the Web Form.
I The Web page appears
with the form on it.aspx as
your filename.WEB DEVELOPMENT BASICS
2
Creating a Web Form that submits to itself. You can put an empty SPAN tag into your Web Form as a placeholder for displaying results back to the user. ± Click to select the Default
Web Site folder where you want to store your file.

for example. Note that this is only one of several ways to configure events for your Web Forms. ¤ Click File ➪ Open.
Ctrl+O
⁄ Start your text editor.NET. For example. If you want to process events on the Web server. you are presented with a challenge when programming for events.
ADD AN EVENT HANDLER TO AN ASP. you need to forward the event captured by the browser to the Web server along with the state of the page.
32
. ‚ Add the ONCLICK event
handler to the form and call the event created. ‹ Click to select the
folder that contains your Code Templates.
Open.
Y
Processing user interactions to elements on your Web page (events) on the Web server is simplified for you in ASP.
° Declare a script block to
run server-side.
› Click
to select All Files from the drop-down list. Á Click Open to open the
template. This attribute determines what function is called when the event occurs.NET PAGE
ou can add code to your ASP. From within the function..
ˇ Click to select a template. you can add an OnClick attribute to the button that calls a function to process the form.NET pages to respond to your user’s interaction. you need to do a few things to properly configure your Web Form.
‡ Declare the language used
for the page. Next you need to add an additional attribute to the element that is capturing the user interaction.ASP. First. To configure this.
· Create an event handler.NET PAGE
make sure your HTML form has the RUNAT attribute set to Server. clicking a button or an image. you can set the <SPAN> placeholder’s InnerHTML property to display some HTML based on results of processing the event.NET
ADD AN EVENT HANDLER TO AN ASP.. In Web development.

back the information that you filled in on the form. transmitting. Because users can have one of many browsers. you can write client-side script that handles events on your Web page. and interpreting the event and handling it appropriately on the server.
Save As.aspx.
¢ Type your information into
the fields on the form. you are not assured that the event-handling code will run properly.
33
..aspx
£ Browse to the saved Web
page at http://localhost /SubmitReceive Comments. This is how you can run C# code when the button is clicked.
folder is not onscreen. but you will find that server-side code is a more reliable way to process events. The Web Forms framework handles virtually all of the mechanics of capturing..
™ Click Save to save and
close the dialog box.
¡ Type
SubmitReceiveComments.
— Click File ➪ Save As.
as your filename. ± Click to select the Default
Web Site folder where you want to store your file. click the Save in to select the folder.
∞ Click the Send Comments
button. Also you are not assured that the user will access your page with a browser that can interpret script.
I The Web page echoes
I If the Default Web Site
I The Web page appears with
the form on it. These scripts are interpreted by the client’s browser. There are programmatic ways to address these issues.WEB DEVELOPMENT BASICS
2
The Web Forms architecture gives you the ability to run server-side code when client-side events are fired.
Instead of responding to events on the server.

NET
WRITE YOUR FIRST C# APPLICATION
he C# (pronounced C sharp) language is a valuable asset in the . to generate the source code.
34
Á Type { }. placing the opening and closing curly braces on separate lines.
.
type in the code to print out "Hello World using C#!". You can use C# to create standalone executables or to create dynamic content on a Web form. There are many types of applications that can be built with the C# language.NET Framework. › Type { }. you can use Namespace aliases to easily leverage the . you can create a standard “Hello World” console application.
ˇ Between the curly braces. If you want the simplest application. like Notepad.
Starting with the C# language. placing the opening and closing curly braces on separate lines.NET applications.
‹ Type the name of the class you want to create and press Enter. The file type that typically holds C# code is a class file. you may want to start applying it by creating the simplest C# application possible. Web services. A C# class is a text file saved as a *. Namespace aliases are used to reference classes in the . You can compile this class with the C# compiler (csc.NET Framework classes. To write your first application. and console applications.
T
If you are new to the C# language.exe) file. ASP.
‡ Between the curly braces. a console application is a good choice. In C# applications.
type static void Main() and press Enter to create the Main function. ¤ Type using System. you need a text editor. Some of the more common ones that you can create are Windows applications. to set off the body of the class.ASP.
WRITE YOUR FIRST C# APPLICATION
⁄ Open your text editor. to
import the System namespace and press Enter.NET Framework.cs file. to set off the body of the Main function.exe) at the command prompt which creates an executable (*.

you may know that a class defines the operations an object can perform.C# BASICS
3
If you are familiar with object-oriented programming.
‚ Click Save. and defines a value that holds the state of the object. events.
35
.
Note: You can save all of your console applications in a specific directory (example: C:\CSharp). This will be one of the first bugs you will find when compiling your C# application. Each language chooses its own syntax for creating instances of classes. or properties.
I The source file saves to the
directory and can now be compiled. events.cs
° Click File ➪ Save to open the Save As dialog box.
The C# language is case sensitive. You can access an object’s services by calling its methods and accessing its properties. you can use an editor and compiler that assists by being compliant with the case sensitivity. such as methods. To avoid problems with case sensitivity. · Type a name for the file. An instance of a . and fields.NET Framework class is an object. it can have one or more members that have no implementation.
Save
Ctrl+S
C:\CSharp\FirstApp. Although a class generally includes both definition and implementation.

O
specify the source file that you want to compile. open the command prompt and go to the directory where the source file is located (for example: C:\Csharp). If you created a console application.
‹ Click OK to open the
command line window.. the source file is used by the C# compiler to create an executable program.exe command to invoke the C# compiler. A console application is an executable program that can be run from the command line. simply type a space and then the name of the file that you want to compile. you can compile the file into an executable program that you can run. A compiler is a utility program that takes a source file — a readable text file — and converts it into a executable file — a binary file that the operating system of the computer knows how to run.NET
COMPILE A C# APPLICATION
nce you have created your C# source file. you can then run this executeable program by typing the name of the file. To
COMPILE A C# APPLICATION
Run..
⁄ Click Start ➪ Run. The C# compiler has many options that you can specify when compiling an application. When this command is run.
36
.ASP.
I The Run dialog box
appears.
¤ Type cmd in the Open
field. You can use the csc.
To compile the application.

I An executable file is
created from the source file.
Á Run the program by typing
37
. you would type csc /out:HelloWorld. the command is cd C:\Csharp. For example.
Note: In this example.
› Change directories to the
source file location by using the cd command.
Note: In this example.
ˇ Compile the class at the
command prompt using the csc command. type csc /? | more to see the options one screen at a time. the command is csc FirstApp. To do this.exe. to compile the FirstApp.cs You can view all of the options for the C# compiler by typing csc /? at the command line. the name of the executable file and pressing Enter.cs. use the /out switch followed by a colon and type the name of the executable file that you want to create.exe FirstApp.cs source file to an executable file named HelloWord. Because the options list is long and could scroll outside of the viewable window.C# BASICS
3
You can specify another filename for the executable application that you create.
I The program displays the
Hello World using C#! message.

ˇ Type using System. and then press Enter. to
import the System namespace and press Enter. but skip over the task of commenting. the code will look as though many individual developers. what. › Between the curly braces. you may end up not documenting the code. and indents. Before your development team starts coding. as opposed to a coordinated development group. placing the opening and closing braces on separate lines. Commenting your code while producing it facilitates better communication within the development team and helps with the maintainability.NET
FORMAT YOUR CODE
W
ell-formatted code makes your code easier to read. not at the end of it. A common mistake for development teams is putting off commenting until the very last part of the project and then never getting back to complete the task.
FORMAT YOUR CODE
When formatting your code. which is necessary for capturing the why. If developers wait until after the coding to assemble guidelines. Most developers have good structure to their code. If these guidelines are not set at the beginning. Formatting code is a discipline that is carried out during the coding.
‹ Type { }. maintain. These guidelines should include all the standards that determine how your organization formats code professionally. when. ¤ Type the name of the
namespace you want to create and press Enter. placing the opening and closing curly braces on separate lines. add the comment details. comments. the task will most likely not get done. created the code. be sure to put in white space. they should write a coding guidelines document. and reuse.
38
.
Á Add a documentation
comment by typing /// followed by the comment. Formatting your code professionally is an important consideration in development. If you do not comment when you code.ASP.
press Tab and type // to begin a single line comment. and how of their code.
‡ Type the name of the class
you want to create followed by {}.
⁄ Open your text editor.

In C# you can comment a single line or multiple lines. Indention is a key part of giving structure to your code. you must keep several concepts in mind. The line end is notated by the semicolon (.
° To create a flower box. A single line is notated by // and a multiple line is notated by /* at the beginning of the first line and */ at the end of the last line. this whitespace includes blank lines.
™ Type the remaining code.
· Type in the details of the
class.
add a single line comment by typing //. consider the amount of code on each line. Whitespace is where you control the density of your code.
— Type public static void Main() followed by { }.
¡ Type the comment.
type / to specify a multiple line comment.
adding comments on the line before the code.
‚ To end the flower box.C# BASICS
3
To properly format code. a line end.
39
.
type / to specify the end of a multiple line comment. as well as indention. and the keywords used for comments. to create the Main function. Also.
placing the opening and closing curly braces on separate lines.) and the line continuation is the carriage return and line feed (just strike the enter key in your editor). The key parts of the formatting that are affected by syntax are how you show a line continuation.
± Within the Main function. You will need to know your language’s proper syntax when formatting your code.

you can use the string data type for its storage. placing the opening and closing curly braces on separate lines. Initialization is setting an initial value for the variable. you set up locations in memory where your program can store the many values it needs to perform its task.
. If you are storing someone’s first name. to
import the System namespace and press Enter. you will need to determine what type of information you want to store. When you build applications that use this information.
Á Type { }. To declare a variable in C#.ASP. If you are storing someone’s age.
type static void Main() and press Enter to create the Main function. Defining a variable enables you to assign an easy-toremember name to a memory location. you deal with many classifications of information. or an age. to specify the body of the class. ¤ Type using System.
‹ Type the name of the class
you want to create and press Enter. a person’s name. you can use one of the integer data types. Using variables in C# requires declaration and initialization. When you declare variables. Declaration tells the application how to
DECLARE A VARIABLE
⁄ Open your text editor. The type of information you are storing will determine what the proper data type to use is.
In the real world. placing the opening and closing curly braces on separate lines. money. This is the first step in using variables and is required before you perform the initialization.
ˇ Between the curly braces. This information could be a date.
Y
allocate memory for the information you want to store.NET
DECLARE A VARIABLE
ou can structure the way you store information with variables. you will need to temporarily store these values for later use in the application.
40
› Type { }.

type two statements to declare and initialize a variable on separate lines and then press Enter. // Executing this line will give you the following error: Console. /// <summary> /// Summary description for ApplyIt. TYPE THIS:
namespace DeclareInitializeVariables { using System. } } }
3
RESULT:
Compile error = “Use of unassigned local variable ‘sTest’”
‡ Between the curly braces.WriteLine (sTest).
° Type a statement to
declare and initialize a variable on the same line and press Enter. /// </summary> public class ApplyVariableDeclaration { public void ApplyIt() { string sTest. Failing to initialize a variable produces a runtime error.C# BASICS
You must declare and initialize variables before using them to avoid an error.
41
.

‹ Click File ➪ Save. This value can come directly from the result of an operation by adding two numbers or concatenating a string.
¤ Add the
Console. or from the value of a property or field on an object. Using this naming convention tells us the data type of the variable and the classification of the information (a first name). The convention used in
INITIALIZE A VARIABLE
strFirstName is Hungarian notation. When choosing a name for a variable. you initialize it by giving it a value.
Save
Ctrl+S
C:\Csharp\DeclareInitializeVariables. ˇ Click Save. from the return of a method.
42
. you need to give it a meaningful name. When you initialize a variable. otherwise a runtime error will occur. This lets you know what is in its storage without having to search through the code to find out what data type was used when it was declared. › Type a name for the file. If you are storing someone’s first name in a variable. .
Note: You can save all of your Console applications in a specific directory (example: C:\CSharp).NETcompliant languages use. you should give it a name like strFirstName.NET has a common set of data types that all .
I The source file saves to the
directory and can now be compiled. The CTS is a formal specification that details how a type is defined.NET
INITIALIZE A VARIABLE
A
fter you declare a variable.Writeline function to write the values for the variables to the console screen.ASP.cs
⁄ Type the statement to
declare and initialize a multiple variable of the same type on the same line and press Enter.NET platform that allows cross-language compatibility. you need to make sure that you pass data that can be stored in that type. Having a Common Type System (CTS) is one of the foundations of the .

43
. int val = 12.
Á Click Start ➪ Run to open the Run dialog box. The following table outlines the intrinsic data types used by C#. either true or false Character type. a string is a sequence of Unicode characters 8-bit signed integral type (unsigned) 32-bit signed integral type (unsigned) 64-bit signed integral type (unsigned)
SAMPLE CODE
object o = null.
‡ Type cmd in the Open
field. bool val1 = true. a char value is a Unicode character Precise decimal type with 28 significant digits
Run. I The Run dialog box
appears.long val2 = 34L.
‚ Compile the class at the
command prompt with the csc command.
I The program displays the
message about the initialized variables..C# BASICS
You need to know what data types are available to you in C# to properly store data. short val = 12. float val = 1. decimal val = 1.
Short (ushort) 16-bit signed integral type (unsigned) int (uint) long (ulong)
float (double) Single-precision floating point type (double precision) bool char decimal Boolean type.
— Run the program by typing
the name of the executable file and pressing Enter. C# DATA TYPE
Object String Sbyte (byte)
3
DESCRIPTION
The ultimate base type of all other types String type.bool val2 = false.
· Change directories to
where DeclareInitialize Variables.
Note: See page 36 for more information on compiling and running a file. string s = “hello”.cs is located by using the cd command.23F. char val = ‘h’. long val1 = 12. sbyte val = 12.23M.
° Click OK..

When using a . the size of a font.
ACCESS PROPERTIES
⁄ Open your text editor. or you can use the Today property to get the current date. You can use the Now property to get a date/time stamp for the current date and time. you will need to make sure that the namespace for that class is imported.
Accessing properties requires the class that defines the object to be available for use in your application.
create the Main function.Now) or taking a shortcut that does not include the name of the base class that is referenced (for example: DateTime. For example.NET implicit object.ASP. You can do this by fully qualifying the class and its property (for example: System. to set off the body of the class. the caption of a window.
ˇ Between the curly braces.
› Type { }.Now).DateTime. ¤ Type using System.
‹ Type the name of the class
you want to create and press Enter.NET Framework have very useful properties. to
import the System namespace and press Enter. you will qualify the class and the property that you want to access. you can use the DateTime object from the System class for a few handy properties.
Y
Many objects in the . and the name of a customer. Next. Examples of properties include the length of a string.
44
. A property is a member that provides access to an attribute of an object or a class. placing the opening and closing curly braces on separate lines.NET
ACCESS PROPERTIES
ou can access the attributes of an object by using properties.
Á Declare variable to hold a
Date Time string.

message about the date and time.
45
. you could represent a pencil as an object. and events are.cs .
Properties are a natural extension of fields.
° Send this value to the
console. You will want to use Get and Set accessors to control reading and writing to properties.C# BASICS
3
Object-oriented languages have three import concepts for working with objects. This chapter covers these three concepts. In general.
Note: See page 35 for more information on saving a file. color.Notepad
‡ Access the Now property from the DateTime class that is part of the "System" Framework class. Properties describe attributes of your object. For example. They are both named members with associated types. and the syntax for accessing fields and properties is the same.
‚ Compile and run the
program. To work with an object. and thickness of lead.
AccessProperties. methods. you will need to know what properties. you should expose properties instead of public fields. Some of the properties of this object would be its length.
I The program displays the
· Save as the class name. With properties you have better control over the storage and access of the information stored.

Write
function to write a message to the console for collecting a character. to set off the body of the class.
Note: Only the first character is read. the if and switch statements. It is up to you to determine which construct will best solve your programming problem. the first embedded section of code runs.
Á Use the Console.
46
› Type { }. not the line. the control then goes to the second embedded section of code. The switch statement works best when multiple comparisons with one value are used for controlling the execution of code.
ˇ Between the curly braces. if the Boolean expression evaluates to true.
create the Main function that reads in the arguments from the command line. After this is done. placing the opening and closing curly braces on separate lines. control is transferred to the end of the if statement. You will commonly use the if statement for a single comparison that has code that needs to execute when the comparison yields true and when the comparison yields false. If the Boolean expression evaluates to false. After this second embedded section runs. to
import the System namespace and press Enter.
‡ Declare a character
variable and read the user input into the variable. Boolean expressions yield either
MAKE DECISIONS USING CONDITIONAL STATEMENTS
a true or false value. Both the if and switch statements are controlled by Boolean expressions. With the if statement.
.
Y
You have two main ways to implement conditional code.
‹ Type the name of the class
you want to create and press Enter.ASP. ¤ Type using System.NET
MAKE DECISIONS USING CONDITIONAL STATEMENTS
ou will typically use conditional statements in your code to enforce business logic. Conditional statements (selection statements in the C# specification) are for making decisions in your code. The if and the switch statements can both be used to control conditional flow. control goes to the end of the if statement.
⁄ Open your text editor.

MakeStatements .C# BASICS
3
After evaluating and converting a switch statement to the governing type. . and no default label is present
THEN . .
message about the character the user input.
— Compile and run the
program.
A constant specified in case a label is equal to the value of the switch expression No constant matches the value of the switch expression. Control is transferred to the statement list following the default label. Control is transferred to the end point of the switch statement. .
47
.Notepad
° Create an if-then statement to determine whether the input was a number.
Control is transferred to the statement list following the matched case label. you can execute the statement several ways. .
· Write the appropriate
message to the console.
Note: See page 35 for more information on saving a file. IF . and a default label is present No constant matches the value of the switch expression.
I The program displays the
‚ Save the file as the class
name.

ˇ Between the curly braces. the default lower bound of the array is 0. strStateList[ ]. If this State List array was defined to contain 52 members. you would define a string array of 52 members.
48
.
create the Main function. You can do so by iterating through all the members of the array with a standard For or For Each construct.
Á Declare an array
variable for holding the goals and a string variable for the question to the user.
WORK WITH ARRAYS
⁄ Open your text editor.
‡ Store goals in an array for
displaying a message to the console. you may use an array to hold a list of states. you will determine the data type needed for storing members of the array and you will determine the number of members in the array. So when you access the first member of the State List array.
‹ Type the name of the class
you want to create and press Enter.
With arrays. Because the state names will all be string data types. placing the
opening and closing curly braces on separate lines.NET
WORK WITH ARRAYS
ou can create arrays when working with a set of variables of the same data type that are related to each other. you would reference this member with strStateList[0].
Y
Arrays are a variable type.
° Store responses in another
array.ASP. If you structure your code this way. so you will need to declare and initialize them just like you need to declare and initialize a string variable type. When declaring an array. to
import the System namespace and press Enter.
› Type { }. you do not have to add any lines of code if new members are added to the array. then the last member would be referenced as strStateList[51]. For example. Arrays allow you to optimize lines of code. ¤ Type using System.

TYPE THIS:
using System. “Run a marathon”.WriteLine(“{0}\n{1}\n{2}\n”. Console.NET Framework to manipulate and sort the members of the array.WriteLine(“\nAfter the sort:”).
‚ Save the file as the class
name. Console. // Write the members of sGoalList to the console before modifying Console.WriteLine(“{0}\n{1}\n{2}\n”.Sort(sGoalList). “Give $1 million to worthwhile causes”}.Notepad
· Write the message to the
console. } } }
RESULT:
Before sort: Hike the Appalachian Trail Run a marathon Give $1 million to worthwhile causes
After the sort: Give $1 million to worthwhile causes Hike the AppalachiÏan Trail Run a marathon
WorkArrays .Write(“Before sort:\n”).sGoalList).
49
.
I The program displays the
message about the goal list and options. namespace ApplyArrays { class ApplyArrays { static void Main() { // Initialize an array in same line as declare string[] sGoalList = {“Hike the Appalachian Trail”. // Write the sGoalList to the console after sorting Array.
Note: See page 35 for more information on saving a file.sGoalList).C# BASICS
3
You can use the Array class provided in the .
— Compile and run the
program. Console.

ASP. you may use an iterative statement to work with every member of that array. The for statement has more structure than the while and do statements.
Y
Each iterative statement handles a loop differently. The break statement will transfer the control to the end of the iterative statement and stop the iteration.
ˇ Between the curly braces.
There are four iteration statements to choose from: while. the embedded code can use either a break or continue statement. With the chosen statement. for.
› Type { }. you will need to create a Boolean expression that is evaluated each time the loop is executed.
create the Main function. and foreach. After choosing a statement.
‹ Type the name of the class
you want to create and press Enter. The do statement will execute 1 or more times. ¤ Type using System. to set off the body of the class.
Á Declare variables for use
by the case statement and the if-then logic.
50
. placing the
opening and closing curly braces on separate lines. Your choice is based on the requirements of the logic you are implementing.
CONTROL LOGIC USING ITERATIVE STATEMENTS
⁄ Open your text editor. The while statement will execute 0 or more times. do. condition. There are multiple ways to implement an iterative statement.
‡ Create a case statement. You have three optional parameters used to operate loops. For example. The foreach statement is used for enumerating elements in a collection. you will write code that is embedded within the statement. and iterator. Within all the iterative statements. The continue statement will transfer control to the end of the iterative statement and then perform another iteration.NET
CONTROL LOGIC USING ITERATIVE STATEMENTS
ou need to use iterative statements when a section of code needs to execute more than once. after creating an array. which are an initializer. to
import the System namespace and press Enter.

I The program displays the
message about the goal set. } } }
RESULT:
Current value of n is 1 Current value of n is 2 Current value of n is 3 Current value of n is 4 Current value of n is 5
ControlLogic .
Note: See page 35 if you need more information on saving a file. n++. n). TYPE THIS:
using System.Notepad
° Create an if-then statement. · Use the Writeline
method to send the appropriate value to the console. while (n < 6) { Console.
— Compile and run the
program. The following is a simple example of using a while loop.C# BASICS
3
You will find that while statements work well with applying business logic. class ApplyWhileStatements { public static void Main() { int n = 1.
51
.WriteLine(“Current value of n is {0}”.
‚ Save as the class name.

To do this. to
import the System namespace and press Enter.
ˇ Between the curly braces. › Type { }.
Y
message which welcomes the user using their name.
Á Declare two string
variables.
‹ Type the name of the class you want to create and press Enter.NET
CONCATENATE A STRING
ou will find many cases that you need to programmatically build a string by concatenating two or more strings together. Remember that as you append your strings. Programmers call this process string concatenation. you will have to include the spacing inside the double quotes of your string to have proper spacing between words. You want to format a
CONCATENATE A STRING
⁄ Open your text editor. There are several ways to concatenate two or more string sources.
You can format a message to the user by using a combination of string variables and literals that are in quotation marks. you would use the statement "Welcome. to set off the body of the class. The += assignment would be used to append a string to an existing string. For example.
52
. " + strUsername. The + operator would be used to combine strings in the order that they appear in the expression.ASP.
create the Main function.
‡ Concatenate the strings
together. placing the
opening and closing curly braces on separate lines. say you have a variable like strUserName and you have populated that variable with the User’s Name. You can work with two variables of string data type and join them together into a single string. You will use the + operator in C# to concatenate the two strings together. ¤ Type using System. You can use either the arithmetic operator + operator or the += assignment operator.

i < args. // Loop through the arguments and concatenate into one string for(int i = 0.
Note: See page 35 for more information on saving a file.Notepad
° Concatenate the strings
within a statement.C# BASICS
You can shorten the code required to concatenate a string to itself by using the += assignment operator.
— Compile and run the
program.
53
. Go to top of Empire State Building.
‚ Save as the class name. } // Write the result of the concatenated string to the console Console. The sample below passes arguments into a console application from the command line and builds a single string that puts all the command line parameters into one string.Length. COMPILE THIS:
using System.exe “Run a marathon” “Go to top of Empire State Building”
RESULT:
Your goal list is: Run a marathon. “.cs .
I The program displays the
message about the concatenated strings. i++) { strDynamicString += args[i] + “.WriteLine(“Your goal list is: “ + strDynamicString). } }
3
TYPE THIS:
<program name>. public class ApplyStringConcatenation { public static void Main(String[] args) { String strDynamicString = “”.
· Write the two statements
to the console.
ConcatenateString.

For example.
Many functions are available to convert from one data type to another data type. There are two different types of conversions: an implicit conversion and an explicit conversion. you simply use the ToString() method call at the end of the variable. To use this method. Be careful when you do this.
Y
when converting from one data type to another data type is to look up the appropriate function for the conversion. placing the
opening and closing curly braces on separate lines. An implicit conversion is done when you cast another variable into a variable of a different data type. ¤ Type using System.ASP.
54
. like Visual Basic 6. a runtime error will occur. because sometimes the variable you are casting into cannot hold the original variable. suppose you want to add numbers together.
› Type { }.
ˇ Between the curly braces.
Á Declare a byte variable and initialize the value to 3. For example. Some languages. to set off the body of the class. An example of a function that you will use often is the function that converts to a string. and the numbers are held in string variables. the first thing to do
CONVERT A VARIABLE
⁄ Open your text editor.
‡ Declare an integer
variable and initialize the value to the byte variable created. So.
‹ Type the name of the class
you want to create and press Enter.
create the Main function. Another example of where you may want to convert is using a method on a class. If another data type is passed.
Note: This is an example of an implicit conversion.NET
CONVERT A VARIABLE
ou will want to convert variables when performing operations that require all variables to be the same data type. will do an implicit conversion.
° Output the two values to
the console. but not in the case of C#. the Response.Write method expects a string data type to be passed for the first parameter. to
import the System namespace and press Enter.

2”.Now.Now.cs .
Example:
using System.
± Save as the class name.
Note: This is an example of an explicit conversion.ToLocalTime().C# BASICS
The following example represents a class definition that does several different types of conversions. = DateTime.ToString(). string strDate.
¡ Compile and run the
program.Notepad
· Declare a long variable and initialize the value to the maximum value for a long variable.ToLongTimeString(). // This is how numerics are converted to strings string strDoubleValue = dblValue. Finally. ‚ Declare an integer
variable and initialize the value to the byte variable created.
55
. // This strDate strDate strDate } } is conversion of full dates to other data types = DateTime. The second conversion demonstrates a conversion from a string to a number.ToShortDateString(). public class ApplyConversion { static void Main() { string strExample = “1. the dates are converted into different formats.
Note: See page 35 for more information on saving a file.Parse(strExample).ToString().
I The program displays the
— Output the two values to
the console. // This is how to convert a string to number double dblValue = Double.Now.
3
ConvertVariables. = DateTime. The first conversion changes the data type from a number to a string.
message about the byte and long variable conversions.

The foreach statement automatically increments the position in the collection and automatically stops after the last member has been evaluated. placing the
opening and closing curly braces on separate lines. This will work. Also.
› Type { }. the statement includes an iteration variable that holds an instance of the member at the current position. you will have to manually move through the collection using the MoveNext method and then check to see when you have reached the end of the collection. The foreach statement will also put you at the first member of that collection when entering the foreach statement the first time. you can use any of the iteration statements that are available in C#. but you will find that using the foreach statement will eliminate the work required to move to the next member and to keep track of where you are in the collection.Notepad
⁄ Open your text editor. When programming with a single-dimension array.
‡ Declare a collection of
integers. to
import the System namespace and press Enter. One collection type is a single-dimension array.
ˇ Between the curly braces. If you use a while or a do statement.
Á Declare an integer variable and initialize the value to 0.
° Add the foreach statement to display all the members over 5.ASP.
create the Main function.
ENUMERATE A COLLECTION
Untitled .NET
ENUMERATE A COLLECTION
ollections give you a sophisticated way to work with a group of items. you can use the foreach statement to iterate through the collection.
56
. to set off the body of the class.
‹ Type the name of the
class you want to create and press Enter. with the collection. ¤ Type using System.
C
Looping through a collection. You are most likely to use this instance in your embedded statement.

for (int i=0.
Example:
static void Main() { int iCount = 0. Note how much extra programming you must do to make this work.C# BASICS
You can use a for statement instead of a foreach statement.
‚ Save as the class name. i<iNumberList.2.11}.1.GetLength(0). int[] iNumberList = new int [] {0.”.5. i++) { if (iNumberList[i]>5) { iCount++.cs .Notepad
· Output the results to the
console.WriteLine(“Out of {0} numbers. }
3
EnumerateCollection.7. iNumberList. found {1} Numbers that were greater than five.8.
— Compile and run the
program.Length.
Note: See page 35 for more information on saving a file. } } Console.
57
. iCount) .
I The program displays the
message about the results.

to set off the body of the class. The Subtract method would contain functionality that would take one parameter and subtract the other parameter and return the result.
58
.
create the Main function. This method could take in a parameter that is a stream of data to be printed and could return a value that indicates whether the data printed successfully.
Many objects in the . and Divide. For example. Methods are built into classes using method declarations.
ˇ Between the curly braces.NET Framework classes contain useful methods.
› Type { }. Consider a Calculator object as another example. This object could have several methods like Add. You can use methods to hold a section of code that may be used more than one time. the . The Subtract method could take in two parameters that are integer data types and return an integer.NET
DECLARE AND USE METHODS
M
ethods are members of an object or class that implement a computation or action. Subtract.
Á Declare a string variable to hold the date. 2002).
DECLARE AND USE METHODS
⁄ Open your text editor. which converts a Date or DateTime to a long version of a Date (for example: Thursday. Multiply.ASP. Programmers also use methods to encapsulate functionality.
‡ Write a message about the
types of formats to the console. to
import the System namespace and press Enter. placing the
opening and closing curly braces on separate lines.
‹ Type the name of the class
you want to create and press Enter. One of the methods could be PrintPage.NET Framework DateTime class has several methods that can be used. you could represent a
printer as an object. and a character variable to hold the user input. ¤ Type using System. For example. such as the ToLongDateString method. May 30.

C# BASICS
3
You have many methods to leverage from objects in the .
· Call the
GetFormattedDate function with the user input and put into the variable for the current date.ToLongTimeString()). } }
RESULT:
output would be: 10:12:12 PM
° Read the input from the
console. TYPE THIS:
using System.DateTime. public class ApplyNETFramework { public static void Main() { Console. CONTINUED
59
.
‚ Write the message about
the current date to the console.Now.WriteLine(System.NET Framework.

and events. As you get comfortable with developing in ASP. If the developer has to change the signature of that method.NET.NET Framework.ASP. Methods enable the developer to hide (encapsulate) the difficulty of a coding task by placing complicated sections of code in a method. you use many methods that are available from the . methods. A signature change includes any of the following: adding or subtracting input parameters or return values. the consumer of the method will not function any more. Methods hold operations that can have 0 to many input parameters and 0 to one return values. If the signature of the method (input parameters and return values) is well thought out. changing the data type of an input parameter or return value. you will find three important concepts: properties.
± Declare a string variable to hold the return value.NET development.
60
. When you are new to ASP.
¡ Create a case statement to handle the different types of formats. although this
problem can be solved via overloaded functions. Taking this approach will reduce the number of lines you will have to write in your code and make the code itself easier to maintain. which returns a string.NET
DECLARE AND USE METHODS
W
orking in an object-oriented language.
DECLARE AND USE METHODS (CONTINUED)
— Create the
GetFormattedDate function. you will find that you will start creating your own custom methods. the developer can change how he implements the code and not affect the consumer of that method.

C# BASICS
A method has four possible signatures.
Example:
using System; public class DeclareUseMethodsExtra { // Public operation that takes no parameters and has no return public static void MySubRoutine() { // code goes here } // Public operation that takes parameters and has no return public static void MySubRoutine(int intParam) { // code goes here } // Public operation that takes no parameters and has a return public static string MySimpleFunction() { // code goes here return “MyReturn”; } // Public operation that takes in parameters and has a return public static int MyAddFunction(int intParam1, int intParam2) { return intParam1 + intParam2; } }

3

DeclareUseMethods.cs - Notepad

™ Create the different cases
for the user input, formatting the return variable appropriately.

£ Save as the class name.
Note: See the section “Write Your First C# Application,” earlier in this chapter, if you need more information on saving a file.

¢ Compile and run the
program.

I The program displays the

options for different dates and times and displays results for the current date and time.

61

ASP.NET

IMPLEMENT EXCEPTION HANDLING
hen programmatically working with errors, you need to understand exception handling. No matter how good a developer you are, you cannot avoid runtime errors. For example, suppose your program tries to read a file that does not exist. How would you handle this? You would first try to access the file and then, if there is a failure, you would want to have code that runs if the error occurs. If the error occurred, you may want to ask the user to pick a new path for that file and then try again.

W

If you do not code for handling errors, your code would either stop executing or would move on to the next executable statement. Moving on to the next statement is acceptable in some cases, but not all. The exception handling in C# is performed by using the keywords try and catch. The code that you want to “try” goes in a block of code after the try statement. After that try code block, you would put in a catch statement. The code that you want to execute in the event that an error occurs would go into a block of code that is after the catch statement.

IMPLEMENT EXCEPTION HANDLING

⁄ Open your text editor. ¤ Type using System; to
import the System namespace and press Enter.

‹ Type the name of the class
you want to create and press Enter.

ˇ Between the curly braces,
create the Main function.

› Type { }, placing the
opening and closing curly braces on separate lines, to set off the body of the class.

Á Create a new variable of
type Implement ExceptionHandling.

‡ Use the try statement to create a new string variable set to null, and use this variable to call EvaluateString. ° Use the catch statement to write out the exception.

62

C# BASICS
Exceptions can be thrown in two different ways. A throw statement can be executed programmatically or it can happen at runtime where the processing of the C# statement causes the error (like dividing by zero). Below is a table of common exception classes: EXCEPTION
System.OutOfMemoryException System.StackOverflowException

3

DESCRIPTION
Thrown when an attempt to allocate memory (via new) fails. Thrown when the execution stack is exhausted by having too many pending method calls; typically indicative of very deep or unbounded recursion. Thrown when a null reference is used in a way that causes the referenced object to be required. Thrown when an explicit conversion from a base type or interface to a derived type fails at runtime. Thrown when a store into an array fails because the actual type of the stored element is incompatible with the actual type of the array. Thrown when an attempt to index an array via an index that is less than zero or outside the bounds of the array fails. A base class for exceptions that occur during arithmetic operations, such as DivideByZeroException and OverflowException.

— Save as the class name.
Note: See page 35 for more information on saving a file.

± Compile and run the
program.

I The program displays the
error that was raised.

‚ Use this function to raise an
ArgumentNullException error.

63

ASP.NET

CONVERT A CONSOLE APPLICATION TO AN ASP.NET WEB PAGE

Y

ou can migrate code from a console application to an ASP.NET Web Page. The coding is very similar, but you need to adjust code that deals with the user interface. With the console application, your user interface is the command line. With the ASP.NET Web page, your user interface is a Web browser. You can reuse many parts of the console application. In fact, except for the code pertaining to the user interface, much of the code will remain the same. The process for converting the console application is to create a user interface in HTML that gathers

appropriate information. For example, you will use a drop-down list box in this task to prompt the user for the type of format in which they would like to see the date. Console applications are closer to a procedural style of programming. The user interface is very simple, and users do not have many ways to interact with the program, except for command-line parameters. Moving from console applications to ASP.NET applications, you will need to understand how to use event handlers. To learn more about event handlers, see page 32.

CONVERT A CONSOLE APPLICATION TO AN ASP.NET WEB PAGE

⁄ Open the
ConvertToWebPage Template.aspx template file from the CD-ROM.

¤ Open the console
application source file, DeclareUseMethods.cs, from the CD-ROM.

Leverage the use of components when you write a console application that eventually becomes an ASP.NET application. When implementing your application functionality, encapsulate logical units of code behind methods in the classes that make up the component. If you program in this way, you will be able to reuse the code when migrating to a new user interface (Windows application or ASP.NET application). Also, if you put your code into components, you will be able to share these components with future or existing applications.

You will typically not choose to write console applications if you build a production application. There are cases in which you would choose a console application. Some examples of useful console-type applications include testing out programming syntax, building quick test harnesses, building administrative applications, or building debugging tools.

› Paste the GetFormattedDate function into the <SCRIPT> section of the ASP.NET Web page.

I Scroll down the page to

ˇ Save the file and request
from the Web server.

‡ Click the Submit button. I The date appears in the
format selected.

view the SubmitBtn_Click function in the page, which calls the GetFormattedDate function. SubmitBtn_Click function.

Á Select a date format.

I A Submit button calls the

65

ASP.NET

INTRODUCTION TO HTML CONTROLS

Y

ou can take standard HTML elements and control these elements on your Web server with HTML server controls. This gives you control

over attributes of these elements while processing server-side code.

BASICS OF HTML SERVER CONTROLS

HTML server controls are essentially HTML elements that the server can process. This processing can occur before sending the Web page to the user and/or when the page is posted back to the server. All HTML server controls (also known as HTML controls) map directly to an HTML element. Also, “the properties of” almost every HTML control are identical to the corresponding HTML element’s attribute. HTML controls are defined in the System.Web.UI.HtmlControls namespace. You can create an HTML control in most cases simply by adding the RUNAT="Server" attribute within the tag of the HTML element. If you incorrectly set the RUNAT attribute on the HTML element, you lose all server-side processing capabilities. You want to give each HTML control a unique ID attribute so you have a way to reference the control in your server-side code. You can set attributes for the HTML controls to establish control properties and to handle events. Property attributes configure how the control appears and behaves as an HTML element on a Web page. In most cases, the property attributes map directly to the standard attributes on the HTML 4.0 element. For example, the ID attribute on an HTML control renders in the client’s browser as an ID attribute on the HTML element, too. As for handling events, you distinguish events as attributes on an HTML control to map an HTML control’s event to a procedure that will process the event. For example, when working with the HTMLButton control, you can add an attribute

onServerClick to map to a function that is called when the user clicks the button. HTML server controls derived from the HtmlInput abstract class need to be within an HtmlForm control. For all HTML server controls, overlapping tags are not allowed — you need to make sure that the HTML tags are properly closed and cleanly nested. The .NET Framework provides classes to handle the most commonly used HTML elements. For HTML elements that corresponding HTML controls, lacking the HtmlGenericControl class. You can programmatically read and write to attributes on the HTML element and map events to server-side code. Note that any attribute declared on an HTML server control is added to the HtmlGenericControl’s Attribute collection and can be manipulated in server-side code. For example, with a <body ID="Body" RUNAT="Server"> element, you can programmatically attribute on a body tag change the bgcolor.netframeworkoffers with the following code: Body.Attributes["bgcolor"] = "blue";). All HTML controls are derived from the HtmlControl abstract class. Within this abstract class, there are two other abstract classes, HtmlContainerControl and HtmlInputControl, which contain all HTML controls, except for the HtmlImage class, which is derived directly from the HtmlControl abstract class.

66

Including this attribute makes the control read-only.WORK WITH HTML CONTROLS
4
CLASSIFICATIONS OF HTML CONTROLS
All HTML Controls On the HtmlControl abstract class.NET page Disabled (Read/Write) — A value that indicates whether the disabled attribute is included when the browser renders an HTML control. These HTML elements function without a separate closing tag. They include a Type attribute that defines the type of input control they render on a Web page. Attributes (Read) — Collection of all attribute name and value pairs expressed on a server control tag within a selected ASP. <button>. which are commonly used across all HTML controls. such as the <select>. Style (Read) — All Cascading Style Sheet (CSS) properties applied to a specified HTML server control in an .aspx file TagName (Read) — The element name of a tag containing a RUNAT="Server" attribute HTML Input Controls HtmlInputControl derived controls map to the standard HTML input elements that are part of an HTML form. The common properties for this control are: Align (Read/Write) — The alignment of the image relative to other Web page elements Alt (Read/Write) — The alternative caption that the browser displays if an image is unavailable or currently downloading to the user’s browser Border (Read/Write) — The width of a frame for an image Height (Read/Write) — The height of the image Src (Read/Write) — The source of the image file to display Width (Read/Write) — The width of the image
67
. HtmlContainerControl’s derived classes share the following common properties: InnerHtml (Read/Write) — The HTML content found between the opening and closing tags of the specified HTML control InnerText (Read/Write) — All text between the opening and closing tags of the specified HTML control HTML Image Control The HtmlImage server control is the only concrete class derived directly from the HtmlControl abstract class. you can find the following properties. and <form> elements. <a>. HtmlInputControl derived classes share the following properties: Name (Read/Write) — A unique identifier name for the HtmlInputControl Value (Read/Write) — The contents of an input control Type (Read) — The type of HtmlInputControl
HTML Container Controls HtmlContainerControl’s derived controls map to HTML elements requiring opening and closing tags.

Problems may arise due to configuration issues and limitations of the user’s machine or browser.NET that you want to use the HTMLForm control.
68
. navigating to an appropriate page based on form input. with your code dependent on the user’s Web browser and operating system. you have access to the entire set of . This value tells ASP.
Y
Employing an HTMLForm control is much like using an ordinary HTML form.
‹ Add a message to
the user.aspx template from the Code Templates directory. Because your code is running server-side. you can use the HTMLForm control to fire off an event on the server. setting the value equal to Server. such as collecting information from the form.
› Add a form to the page and
give the form an ID attribute and set the RUNAT attribute to "Server". Running client-side script places you are at the mercy of your user’s environment. as opposed to an ordinary HTML form. An HTMLForm control requires you to add the RUNAT attribute to your form tag.
Á Add a <span> tag on the form to display a message to the user.
PROCESS REQUESTS TO THE SERVER
⁄ Open the
GenericTemplate.
ˇ Add a button using the
OnServerClick event to call the buttonContinue_OnClick function.ASP.
¤ Add a heading for
the page. You can then use this event to do a many of things.NET Framework classes of running client-side. and displaying a message to the user by using a <span> tag. For example. giving you the ability to access information on the form and process this information accordingly.NET
PROCESS REQUESTS TO THE SERVER
ou can use the HTMLForm control to process requests on the server to fire off events where server-side code is executed.

‡ Add the
buttonContinue_OnClick function between the <HEAD> tags. The default value for this attribute is false. you do not use this attribute. the form controls appear grayed out. so by default the browser posts to the page where the form is located. you often use ACTION and METHOD attributes. When you do this.
69
.
° Set the InnerHTML
property of the <span> tag on the form.
You can also set the DISABLED attribute.WORK WITH HTML CONTROLS
4
When working with forms.
· Save the file and request it
from the Web server. but you can change it to true if you want a non-editable version of the form. A <POST> allows you to send more form data to the server. In most cases with ASP.
I A continue message
appears.NET. enabling you to validate the form data before sending the user to the next page or to display a message on the page the user was viewing.
Note: See pages 20 to 25 for instructions on saving a file to the Web server and then requesting the file using the IIS Admin. The METHOD attribute tells the Web browser whether to send the form data to the Web server via the URL in the query string (this would be a GET) or through the HTTP Request (this would be a POST). The ACTION attribute tells the Web browser where to send the form data.
‚ Click the Continue
button.

¤ Add a heading for the
page. After creating these. To enable the user to reset all controls on a form. You can create two types of text boxes: one for text and another for a password. you can place a <Submit> button and a <Reset> button on the form.
Y
that will run only when the page is submitted to the server by implementing the OnServerClick event. set the TYPE attribute to Submit.ASP.
70
. You can write code
CREATE A FORM BUTTON
⁄ Open the
GenericTemplate. You implement both of these buttons using the HTMLInputButton control. to submit a form to the Web server.
If you want to process a server-side HTMLForm. You can provide the capability to submit a form by placing a submit button (<input TYPE="submit">) on the form.
› Add a form to the page
with a RUNAT attribute set to "Server".
‹ Add a message to the
user.
Á Add an
HTMLInputButton on the page and have it call the SubmitBtn_Click function for the OnServerClick event.
‡ Add an HTMLSpan
control on the page to display the results of the login. you typically use the HTMLInput control.NET
CREATE A FORM BUTTON
ou can use a form button to control actions that take place on an HTML form.aspx from the Code Templates directory.
ˇ Add an HTMLInputText
control for the name and the password and label them. you can use the reset button (<input TYPE="reset">). See page 74 for more details. or to reset the contents of the form. To ensure that the HTMLInput control sends the form to the server. You can create a simple login page to test for a static password by adding a couple of HTMLInputText controls on the page.

Value = "".WORK WITH HTML CONTROLS
4
For the convenience of your user.
· Use an if statement to check the password and display the message using the HTMLSpan control on the page. inputPassword. use the OnServerClick event to call the ClearBtn_Click event. This example clears all contents despite the original value. For this control. There is an input of type-Reset that reasets the form to original values.Value = "". EventArgs e) { inputName. add an HTMLInputButton with the TYPE attribute set to Button.
± Click the Submit button. <INPUT TYPE="Button" OnServerClick="ClearBtn_Click" RUNAT="Server">
RESULT: A Web page that allows the user to click the Clear button to clear the form
° Create a SubmitBtn_Click function to check the password. } Then.
— Type in a name and a
correct password.
Note: Try entering an incorrect password.
Note: See pages 20 to 25 for instructions on saving a file to the Web server and then requesting the file using the IIS Admin.
‚ Save the file and request it
from the Web server.
71
. TYPE THIS:
void ResetBtn_Click(object Source. you can add a clear button to the page that will clear out the contents of the form.
I A message appears
notifying you if your password is correct.

I
control. appears.
Note: See pages 20 to 25 for instructions on saving a file to the Web server and requesting the file using the IIS Admin. you can use the HTMLButton control to create a button with some nice features. you can use some client-side events to customize the look. currently do not support the <button> element). to set button properties.aspx template from the Code Templates directory.0 BUTTON
f you are working with a user that has a Web browser that supports the HTML 4. You can use the two DHTML events.
I The button background
color changes. As when adding other controls. you can change a button’s background color whenever a user positions the mouse cursor over the button. therefore. Note that the <button> element is defined in the HTML 4.ASP.
I A continue message
72
.
‡ Position your mouse over
the button.
¤ Add a Continue button
with the HTMLButton control to the form and call the Button_OnClick function for the onServerClick event. use the onMouseOut event. To change the background color back to the original setting when the user moves the mouse cursor away from the button. With HTML 4.
‹ Set the STYLE attribute for the button. onMouseOver and onMouseOut.
I The button background
color changes back. You can use the onMouseOver event to change the background color.
ˇ Set the background
color for the button for the onMouseOut event. › Set the background
color of the button for the onMouseOver event.0. give each of the HTMLButton controls an ID and set the RUNAT attribute equal to Server. feel.
Á Save the file and request it
from the Web server.0 BUTTON
⁄ Open the
WelcomeTemplate.NET
CREATE AN HTML 4.0 <button> element. This feature lets the user know that he or she can click the button.0 specification.0 and above (Other popular browsers like Navigator and Opera. For example.
An HTMLButton control needs to reside on an HTMLForm control within your page to fully utilize this
CREATE AN HTML 4. it is supported only in Microsoft Internet Explorer version 4.
° Click Continue and move
the mouse off the button. and behavior of buttons.

‡ Save the file and request it
from the Web server.
on the Button_OnClick function from EventArgs I The light is red. You may also want to set the <SRC> attribute for the
CREATE A GRAPHICAL BUTTON
⁄ Open the
WelcomeTemplate. you can change the SRC of the image to a new value.
The HTMLInputImage must be on an HTMLForm control. Using these events.
° Move your mouse over
the button and click. you can also employ the onMouseOver and onMouseOut events to change the image dynamically.aspx template from the Code Templates directory. If you target HTML 4. For the SRC attribute.0 compatible Web browsers.
› Set the image for the
onMouseOver event. As with adding other Web controls. to ImageClickEventArgs. When the user moves the mouse cursor off the image. you must specify the ID attribute and set the RUNAT attribute equal to Server.NET page.
I The light changes to green
and a continue message appears.
Y
HTMLInputImage control.
Note: See pages 20 to 25 for instructions on saving a file to the Web server and then requesting the file using the IIS Admin.
73
. This setting tells the Web browser where to locate the image. You can use the onMouseOver and the onMouseOut events to set the properties of your images.
Á Change the parameters
‹ Set the SRC attribute for the button. specify the path to the image relative to the root directory of your Web server.
ˇ Set the image for the
onMouseOut event.WORK WITH HTML CONTROLS
4
CREATE A GRAPHICAL BUTTON
ou can use an image as a form-submitting button as well.
¤ Add an HTMLInputImage
control to the form and call the Button_OnClick function. on an ASP. you can change the image back to the original setting by using the onMouseOut event.

add an ID attribute and a RUNAT attribute set to Server and make sure that it is on an HTMLForm control.
‡ Add an HTMLSpan
control on the page to display the results of the login. You should specify what type of text box it is. For security purposes the password text box displays asterisks. To do this.NET page to process your text boxes as server controls. enabling you to work with the text box’s properties.
‹ Add a message to
the user. you can add a couple of HTMLInputText controls to the page.
¤ Add a heading for the
page.
› Add an HTML form
control to the page. in your code. such as the length and type. The second control has the TYPE set to Password to specify that it is input for a password. The first control lets the user enter a name and has the TYPE property set to Text to indicate that it is an ordinary text box.
74
.ASP.
A
To indicate that the text boxes are HTMLInputText controls rather than ordinary text boxes.
Á Add an HTMLInputButton
on the page and have it call the SubmitBtn_Click function for the OnServerClick event.
ˇ Add HTMLInputText
controls for the name and the password and label them.NET
REQUEST SINGLE LINE INPUT
text box is a common control that is used on forms for enabling users to enter text into a form. You can use an ASP.
REQUEST SINGLE LINE INPUT
⁄ Open the
GenericTemplate. Two valid text box types are Password and Text. rather than the characters you are typing.aspx template from the Code Templates directory.
You can create a simple login page to test for a static password.

· Add an if statement to check the password and display the message using the HTMLSpan control on the page.WORK WITH HTML CONTROLS
4
You can create a read-only text box by setting the Disabled property of the HTMLInputText control to true.
Example:
Enter Name: <INPUT ID="inputName" TYPE="Text" SIZE="40" RUNAT="Server" VALUE="Guest" DISABLED="true">
You can limit the number of characters that a user can type into a text box.
I A message appears
notifying you if your password is correct.
75
.
Note: See pages 20 to 25 for instructions on saving a file to the Web server and then requesting the file using the IIS Admin. The MAXLENGTH property is used for this purpose.
‚ Save the file and request it
from the Web server.
— Type in a name and the
incorrect password.
Example:
Enter Name: <INPUT ID="inputName" TYPE="Text" SIZE="40" RUNAT="Server" MAXLENGTH="40">
You can programmatically hide the text boxes from the user by setting the Visible property of the HTMLInputText control equal to false.
± Click the Submit button.
Example:
Enter Name: <INPUT ID="inputName" TYPE="Text"SIZE="40" RUNAT="Server" VISIBLE="false">
° Create a function called
SubmitBtn_Click to check the password.

aspx template from the Code Templates directory. You can implement this as an HTMLTextArea control so that you can easily access the contents of the control.
I A message appears
displaying the suggestion.
› Save the file and request it
from the Web server. This gives the user more space to type input on the form. Use ROWS and COLS properties to modify the height and width respectively. You can gather suggestions from users by giving them an HTMLTextArea control to fill in on a server form. Á Click the Submit button. As with adding other controls.
76
. as well as set the properties of the control.
Note: See pages 20 to 25 for instructions on saving a file to the Web server and then requesting the file using the IIS Admin.NET
REQUEST MULTIPLE LINE INPUT
Y
ou can use the <textarea> tag to create input boxes that have more than one row.
ˇ Fill in a suggestion. You can modify the text of the HTMLTextArea by using the InnerHTML or InnerText properties.
¤ Add an HTMLTextArea
control to the form and set the COLS and ROWS attributes. you should give each of the HTMLTextArea controls an ID and set the RUNAT attribute equal to Server. An HTMLTextArea control needs to reside on an HTMLForm control within your page to take full advantage of this control.
‹ Add the code in the
SubmitBtn_Click function to echo back the contents of the HTMLTextArea control. You should also add an HTMLInputButton and call a function using that control’s onServerClick event.
You can specify the number of columns and the number of rows for the control to size it properly.ASP.
REQUEST MULTIPLE LINE INPUT
⁄ Open the
SuggestionsTemplate. Use InnerHTML if you desire to format the text when you update the HTMLTextArea. The suggestions can be echoed back to the user by setting the InnerHTML property of the <span> tag.

Note: See pages 20 to 25 for instructions on saving a file to the Web server and then requesting the file using the IIS Admin. and on that form you could ask for one or more of the person’s hobbies by providing check boxes.
I The ASP.aspx template from the Code Templates directory. You can set the VALUE attribute of the HTMLInputCheckBox to either be a key or the actual value of what the check box is representing. You should use the HTMLInputRadioButton control when you want the user to select only one option from a list of options.WORK WITH HTML CONTROLS
4
REQUEST BOOLEAN INPUT
heck boxes are convenient when you need to have the user respond to a yes/no or true/false question.
77
.
I A message appears
displaying the suggestion.
C
You can initialize the check box to be either checked or not checked. setting the VALUE attribute as Have more goals to choose from displays this in the message that is echoed back to the user.
¤ Add an HTMLInputCheckBox
control to the form and set the VALUE attribute. The HTMLInputCheckBox control gives you a server-side control to work with when you need to ask these types of questions. If the Checked property is true. you can see if the control was checked by looking at the Checked property of the control. you could have a registration form. but is used more often when you want the user to select zero to many options from a list of options. For example.
REQUEST BOOLEAN INPUT
⁄ Open the
SuggestionsTemplate. Á Click the Submit button. The HTMLInputCheckBox control is similar to the HTMLInputRadioButton control.
‹ Add the code in the
SubmitBtn_Click function to send an appropriate message back to the user.
ˇ Check the check box.
› Save the file and request it
from the Web server.NET Web page
appears. When the form is submitted. For example. the user has checked the control.

By doing this. After you create your HTMLForm. In these cases. You can set the radio button that is initially selected by setting the CHECKED attribute to true.
Á Click the Submit button. you can add a series of multiple HTMLInputRadioButton controls to your HTMLForm. By using the HTML control. Each control must have a unique value for the ID attribute. but the NAME attribute for a group of controls should be the same.
78
Note: See pages 20 to 25 for instructions on saving a file to the Web server and then requesting the file using the IIS Admin.NET Web page
appears. If this is not set.
ˇ Check the first radio
button. You can ask questions which have multiple choices for an answer and force the user into selecting one of the options by using the HTMLInputRadioButton control. you can use the <input type="radio"> tag to create a radio button. you can now work with it on the server.
¤ Add multiple
HTMLInputRadioButton controls to the form and set NAME attributes.ASP. none of the radio buttons are selected until the user clicks a radio button.
I The ASP.
the user can select only one option from the group.
‹ Add the code in the
SubmitBtn_Click function to send an appropriate message back to the user. When you want to inspect information on a unique member of the radio button group. The HTML control in ASP.
REQUEST A SELECTION FROM A GROUP
⁄ Open the
SuggestionsTemplate.
› Save the file and request it
from the Web server.
.checked checks the first member in the radio button array).NET
REQUEST A SELECTION FROM A GROUP
S
ometimes you may want to have a user select a single option from a group of choices. you can access it by the ordinal reference in the array created (radio[0].aspx template from the Code Templates directory.NET that represents this HTML is the HTMLInputRadioButton control.
I A message appears
displaying the suggestion.

WORK WITH HTML CONTROLS
4
REQUEST INPUT FROM A DROP-DOWN LIST
A
nother option for allowing a user to select a single option from a group of options is using the <select> tag.
Note: See pages 20 to 25 for instructions on saving a file to the Web server and then requesting the file using the IIS Admin.
¤ Add an HTMLSelect control
and a number of options to the form. you can ask questions which have multiple options for answers and allow only one of the options to be chosen.
‹ Add the code in the
SubmitBtn_Click function to send an appropriate message back to the user.
Á Click the Submit button. you can include the controls MULTIPLE attribute and set it equal to true. the first option displays.aspx template from the Code Templates directory. you could use the databinding capabilities. if you have an array of values.
and select the first option from the dropdown list. Like the HTMLInputRadioButton control. you can bind to this array by using the
REQUEST INPUT FROM A DROP-DOWN LIST
Datasource property and the DataBind method of the HTMLSelect control. You can use the HTMLSelect control to implement the <select> tag. This tag creates a dropdown list box from which the user can select a single value.
⁄ Open the
SuggestionsTemplate. If this is not set.
ˇ Click
I The ASP.NET Web page
appears. you can use the SELECTEDINDEX attribute to specify which option the user sees when the list box appears. To fully leverage this control. The <select> tag is also useful when you have a large number of options and little space to display the options.
79
.
I A message appears
displaying the suggestion.
› Save the file and request it
from the Web server. When creating the HTMLSelect control programmatically. If you want to enable users to select more that one item from the list. For example.

While the page is loading. programmatically by using the HTMLAnchor control.
create parts of the anchor tag. you can set the properties for an HTMLAnchor control.
› Add a form to the page
with a RUNAT attribute set to "Server". that will be hyperlinked in the user’s Web browser. To properly configure a bound anchor tag. This control gives you the ability to both set and get information from the <a> tags that you create on your ASP. You can also set the InnerText property of the HTMLAnchor control.
¤ Add a heading for
the page. or HTML. it must have an opening and closing tag. you can use the combination of a data repeater and data binding to
CREATE A LINK
⁄ Open the
GenericTemplate. The anchor tag surrounds the text. To build your anchor tags dynamically.
ˇ Place an anchor with
a RUNAT attribute set to "Server" on the page for the user to click.
The HREF attribute for the anchor tag is the URL that the user gets sent to when clicking the anchor tag.
80
.NET pages.aspx template from the Code Templates directory. When using the <a> tag as an HTML server control. This text is what the user clicks to request another resource on the Web server.NET
CREATE A LINK
Y
ou can work with the anchor tag.
‹ Add a message to
the user. For example.ASP. <a>. you should bind the HREF attribute and the text between the <a> and </a> tags. you can set the HREF property to equal the URL that you want the user to navigate upon clicking the link.

InnerText="You clicked?".WORK WITH HTML CONTROLS
4
You can override the redirect of the HTMLAnchor control by implementing the ServerClick event. ° Set the InnerText
property of the anchor on the form.
Note: See pages 20 to 25 for instructions on saving a file to the Web server and then requesting the file using the IIS Admin.
81
.mylifetimegoals.com"> Go To Home Page for My Lifetime Goals Website </A>
Á Add the Page_Load
function between the <HEAD> tags.mylifetimegoals.
‡ Set the HREF property of the anchor on the form.
Example:
<SCRIPT LANGUAGE="C#" RUNAT="Server"> void aWebsite_OnClick(object Source.
Example:
<A ID="aWebsite" RUNAT="Server" HREF="http://www. } </SCRIPT> <A ID="aWebsite" RUNAT="Server" HREF="http://www.
· Save the file and request it
from the Web server. EventArgs e) { aWebsite.
I The anchor appears
properly.NET Web page
appears.
I The ASP.com" onServerClick="aWebsite_OnClick"> Go To Home Page for My Lifetime Goals Website </A>
You can set the attributes for the anchor tag in the HTML as well.

For example. you can dynamically change the source of the image so that a graphic can be replaced with another graphic. The initial image that appears is set in the <img> tag when designing the page.NET
RENDER AN IMAGE
ou can use the HTMLImage control to have programmatic control over the images on your Web pages.ASP.NET Web pages by adding the ID and by setting the RUNAT attribute to Server on the <img> tag. You could do this in the Page_Load event by setting the property
RENDER AN IMAGE
⁄ Open the
GenericTemplate.
¤ Add a heading for
the page.
You can use the HTMLImage control on your ASP.
Y
programmatically.
› Add a form to the page
with a RUNAT attribute set to "Server". There are a number of other attributes that you can set for the HTMLImage control such as the image border size. the browser updates the graphic on the page.
82
. you can have a list of graphics in a drop-down list box.
‡ Add an Image control on the page and set the source for the image control. the width and height of the image.
ˇ Add an HTMLSelect
control on the page so the user can select a goal type. or you could set the property by adding the SRC attribute in the <image> tag. When the user selects a graphic by name and clicks the Apply button. and the alignment of the image.
‹ Add a message to
the user. You can use the control to change the properties of the image. For example.aspx template from the Code Templates directory. You need to set the SRC attribute that tells the Web browser the location of the image to load.
Á Add a button on the page
for the user to click and use the OnServerClick event to call the SubmitButton_Click function.

Example:
<FORM RUNAT="Server"> <IMG ID="imageGoalImages" SRC="/visualaspdotnet/Chapter04/Code/images/ travel.
± Click the Apply button.
‚ Save the file and request it
from the Web server.gif" ALT="Picture of a road and a distant planet earth" RUNAT="Server"/> </FORM>
You can use the BORDER property to display a border around the image by setting it to a value greater than zero.NET Web page
appears.
Example:
<FORM RUNAT="Server"> <IMG ID="imageGoalImages" SRC="/visualaspdotnet/Chapter04/Code/images/tr avel.
I The Travel graphic
appears.
Note: See pages 20 to 25 for instructions on saving a file to the Web server and then requesting the file using the IIS Admin.gif" WIDTH="100" HEIGHT="100" RUNAT="Server"/> </FORM>
° Add the
SubmitButton_Click function.
83
.gif" BORDER="2" RUNAT="Server"/> </FORM>
To change the size of the image.
— Click
and select Educational as the goal type.
I The Educational graphic
appears.
I The ASP.
· Set the InnerHTML
property of the span on the form in the Sub.
<FORM RUNAT="Server"> <IMG ID="imageGoalImages" SRC="/visualaspdotnet/Chapter04/Code/images/tr avel. you can set the WIDTH and HEIGHT properties of the image.WORK WITH HTML CONTROLS
4
You can use the ALT property to display a message when the user places the mouse pointer over the image. The default setting of zero displays no border around the image.

cell spacing and padding. You can also use the HTMLTable control to set properties for the table. before the page is generated like the Page_Load event. you need to add the ID and RUNAT attributes to the table. To do this.
Y
You can create the table in one of the events like the page_load event. and border size and color.
BUILD A TABLE
When working with the HTMLTable control. As with other HTML controls. You can place a <table> tag on your page like you would do with an ordinary HTML or ASP page. You can use the HTMLTable.
Á Add the Page_Load
function.NET
BUILD A TABLE
ou can use the HTMLTable control to dynamically create and modify tables in your ASP pages.NET page. HTMLTableCell.
· Create and initialize an
array for the contents of the table.
› Add a form to the page. the HTMLTableRow control.
⁄ Open the
GenericTemplate.ASP.
¤ Add a heading for the
page.
‹ Add a message to the user. you need to set the RUNAT attribute to Server. and an object that represents a row.
‡ Create and initialize a
variable to be a counter for the rows.
° Create and initialize a
variable for the number of cells and a variable for the number of rows. including the object that represents a cell. the HTMLTableCell control. It is best to work with these objects as collections. 84
. and HTMLTableRow controls to accomplish this. ˇ Add a table to the page
and set the BORDER attribute equal to 1.aspx template from the Code Templates directory. the HTMLTableCellCollection and HTMLTableRowCollection objects. including the background color. you can use their respective collection objects. To create an HTMLTable control on your ASP. You can build out a table from an array while the page is loading. you need to work with a couple of other controls.

NET Web page
appears.
¢ Save the file and request it
from the Web server.
™ Add the cell to the row.
‚ Process each row
with a for loop. if (rowcount%2 == 1) row.
¡ Create a new
HTMLTableCell for each cell and add the value in the array to the cell.
85
. rowcount++.
I A table appears with the
contents of your array. cell spacing.WORK WITH HTML CONTROLS
4
You can specify the cell padding.Align="Right".
I The ASP.
Example:
<FORM RUNAT="Server"> <TABLE ID="tableExample" Border="1" CellPadding="5" CellSpacing="0" BorderColor="Black" BgColor="#C0C0C0" RUNAT="Server" /> </FORM>
You can use table row properties to format a table with alternating colors for each row. border color.
You can specify a number of properties for the table cells by setting the horizontal and vertical alignment of the cells. £ Add the row to the table.BgColor="#C0C0C0".
Example:
HtmlTableCell cell = new HtmlTableCell(). cell.VAlign="Top".
Example:
HtmlTableRow row = new HtmlTableRow().
± Process each cell in
the row with a for loop. and background color for the table.
Note: See pages 20 to 25 for instructions on saving a file to the Web server and then requesting the file using the IIS Admin.
— Create a new
HTMLTableRow for each row. cell.

86
. you can check for the hidden variable by viewing the source for the Web page.
¤ Add an HTMLTextBox
control to the form. For example. Because users can view the source of the HTML to see the hidden variables.aspx template from the Code Templates directory.
Y
HTMLInputHidden controls is a good alternative to managing state in Session variables. Also.
HTMLInputHidden controls are typically used for retaining state from one page to the next page.NET
STORE HIDDEN INFORMATION ON A FORM
ou can store information on your forms with a hidden variable. See page 226 for details on managing state with Session variables.
› Set the hidden value of
the variable to what was entered into the text box. When this is done.
‹ Add an
HTMLInputHidden control to the form. You should store important state into HTMLInputHidden controls when the user clicks the submit button on the form. you do not want to place too much information in hidden variables. you can create a page that posts back to itself and simply moves the data from the text box and puts it into a hidden variable. You can find that sometimes storing data in
STORE HIDDEN INFORMATION ON A FORM
⁄ Open the
SuggestionsTemplate. you should not use this technique with sensitive or secure information. because the data is being posted back and forth between the Web browser and the Web server.ASP. Users cannot see the data in hidden variables.

This will remove the tag from the response to the user. This hidden variable is used for state information for controls on the form.
I The source for the
page appears and the hiddenSuggestions tag contains the suggestion. ‡ Click the Submit button.NET Web page
appears.
I The ASP. ASP. ° Click View ➪ Source from
the menu in Internet Explorer.
Note: See pages 20 to 25 for instructions on saving a file to the Web server and then requesting the file using the IIS Admin.
Á Type in a suggestion. you may have noticed that there was another hidden variable on the form that you did not create. you can set the Visibility property equal to false.WORK WITH HTML CONTROLS
4
When you viewed the source.aspx file has an <input> tag marked up in the document.
If you ever want to programmatically remove an input tag from the page that the user receives. even though the .NET automatically creates this variable.
Source
ˇ Save the file and request it
from the Web server.
87
.

They can choose a local file. To be able to send a file. you need to write some code that will check for the file. After a user selects a file by using the HTMLInputFile control. and do some exception handling if there is a problem.
¤ Add the ENCTYPE attribute and specify that the form will be posting multipart form data. This attribute instructs the Web
browser that one of the controls is a file that needs to be uploaded to the server.
UPLOAD FILES
⁄ Open the
SuggestionsTemplate.NET
UPLOAD FILES
P
eople who visit your Web sites can upload files to your Web server using the HTMLInputFile control. check to make sure there is a filename entered. To place the file on the server’s file system.
88
. On the form. you are required to modify the HTMLForm control to contain the attribute name/value pair of ENCTYPE="multipart/ form-data". the user will submit the form to the server.aspx template from the Code Templates directory. you can then add an HTMLInputFile control by using the <input> tag and setting the attribute’s TYPE="File" and RUNAT="Server". sending the file up with the HTTP request.ASP. and then have that file uploaded to the Web server. having the user upload a file of a predetermined format is a more convenient way of inputting data. For some applications.
Á Catch the exception if
the post was unsuccessful and set the message to reflect an error. save the file if available. ‹ Add a message and an
HTMLInputFile control to the form. as opposed to having the user type all of the information into a form.
ˇ Post the file up to the Web
server and set the message for the <SPAN> tag.
› In the SubmitBtn_Click
function.

. spanMessage.ToString().
I The Choose file dialog box
appears. try { fileSuggestions.
‚ Click Open.
· Select a file to upload to
the Web server.Guid.
— Click the Submit button.txt" + exc.txt").WORK WITH HTML CONTROLS
Because there is a chance that users could overwrite files on the Web server when uploading files. } } }
4
‡ Save the file and request it
from the Web server. you may want to make sure the names of files are unique.aspz. Chapter04\Code\HTMLInputFile_ai.NewGuid().SaveAs("c:\\temp\\" + stringFileName + ". One way of doing this is by using the System. See the complete source code on the CD-ROM. 89
° Click the Browse button. Guid class.
I The path and filename
appear in the text box. EventArgs e) { if (fileSuggestions. } catch (Exception exc) { spanMessage.InnerHtml = "File uploaded successfully to " + "c:\\temp\\" + stringFileName + ".PostedFile.ToString(). The following modifications to the SubmitBtn_Click function would save files to the Temporary directory using a GUID.PostedFile != null) { string stringFileName = System.
I A message appears
Note: See pages 20 to 25 for instructions on saving a file to the Web server and then requesting the file using the IIS Admin.
notifying you that the file successfully uploaded to the Web server. which stands for a Globally Unique Identifier.
<SCRIPT LANGUAGE="C#" RUNAT="Server"> void SubmitBtn_Click(object Source.txt".InnerHtml = "Error saving file" + "c:\\temp\\" + stringFileName + ".

you can add an attribute onServerClick to map to a function that is called when the user clicks the button. You can set attributes for the Web controls to set properties of the control and handle events. Web controls are defined in the
controls. The Web controls wrap common HTML elements and give a consistent interface (hiding the programmers from the inconsistencies that cause a longer learning curve for Web development).ASP.WebControls namespace. At first glance. Rich.
System. “Why Web controls?” The answer is “uniformity and ease of use. List.WebControls namespace has a few controls that enable you to have better control over your HTML page display. The requirement for the notation is similar to building well-formed XML documents (like closing all tags). Like an HTML control. you mark up events as attributes on a Web control. Because you can systematically create many of these controls when the page is loading. This gives you the ability to map a Web control’s event to a procedure that will process the event. You also want to give each Web control a unique ID attribute.
Basics of Web Form Controls Web server controls are a close cousin to the HTML server controls covered in Chapter 4. but Web controls also have a list of very rich controls like the ASP:Calendar control.Web.UI. Seeing the high-level differences and similarities between Web server controls and HTML server controls (especially the overlap of representation for HTML elements).
Classifications of Web Controls Web controls overlap with the HTML controls by representing many of the same HTML elements that are available with HTML controls. This processing can occur before sending the Web page to the user and/or when the page is posted back to the server.Web. Web controls are HTML elements that can be processed on the server. This control acts as a container for other controls and can be shown and hidden using code. you should ask. so that you have a way to reference the control in your serverside code. but the way you program with these controls is unified across these controls.UI. Web controls all have the ASP namespace prefix in front of every control in the System. These rich controls are usually made up of many HTML elements that can collectively render the rich control. Data List. each tag needs to contain the RUNAT="Server" attribute within it. As for handling events. Web
forms have a slightly different convention than HTML Working with Web Controls The System. There are many Web controls to choose from and they can be classified as Basic. you can work with the ASP:Placeholder control to specify where on the Web page the controls should be placed. There is overlap in coverage for these
controls. when working with the ASP:ImageButton control. Web controls do not always map directly to an HTML element. you may find the syntax foreign if you have not previously worked with XML. you should make sure that the HTML tags are properly closed and cleanly nested (overlapping tags are not allowed). and Validation controls.WebControls namespace.” Web server controls use consistent naming conventions and programming models across the controls in the namespace for Web controls.Web. you may not understand why Web form controls (also known as Web controls) exist and you may get the two confused.UI. Another feature that controls the layout of a Web page is the ASP:Panel control. For example. Unlike HTML controls.NET has provided expanded capabilities over the HTML server controls with the Web server controls. Property attributes configure how the control will appear and behave as an HTML element on a Web page. a Web control’s properties are not identical to the representative HTML element’s attribute. The following tables summarize these controls:
90
.NET
INTRODUCTION TO WEB CONTROLS
A
SP. For all HTML server controls. When working with Web controls. Just like HTML controls. Also.

HTML ELEMENT(S) CLASS HTML EQUIVALENT
Button CheckBox RadioButton HyperLink Image ImageButton Label LinkButton Panel Table TableCell TableRow TextBox
<button></button> <input type="checkbox"/> <input type="radio"/> <a></a> <img></img> <input type="image"/> <span></span> <a><img/></a> <div></div>
<table></table> Represents a cell in a Table control. Displays a single month calendar that enables the user to select dates and move to the next or previous month.WORK WITH WEB CONTROLS
5
WEB CONTROLS
List Web Controls CLASS BRIEF DESCRIPTION
Multiselection check box group. <td></td> Represents a row in a Table control. Image that responds to mouse clicks (derived from Image). Radio button control (derived from CheckBox class). Drop-down list which allows the user to select a single item. Label control. Image.
Data List Web Controls CLASS BRIEF DESCRIPTION
Data-bound list control that displays the items from a data source in a table. Data-bound list control that displays items using templates. Check box that enables the user to select a true or false condition. List box control that allows single or multiple item selection. List control that encapsulates a group of radio button controls.
CheckBoxList DropDownList
DataGrid DataList
ListBox
Rich Web Controls CLASS BRIEF DESCRIPTION
Displays an advertisement banner on a Web page. <tr></tr> Constructs a text box and defines its properties. Displays a hyperlink style button control on a Web page. <input type="text"/> or <input type="password"/> or <textarea></textarea>
91
. Constructs a table and defines its properties. Hyperlink used to link to another resource. Represents a control that acts as a container for other controls.
RadioButtonList
AdRotator Calendar
Basic Web Controls CLASS CLASS
BRIEF DESCRIPTION DESCRIPTION
Push button control.

The ASP:Button control. This section uses client-side code to create a rollover behavior for the button. you have all the capabilites of the standard HTML input submit button plus the extended properties and state management that is avaliable for server controls. This chapter also looks at the LinkButton Web control and the ImageButton control. With this Web server control. the browser sends a message letting the user know the process is continuing to the next step.
‹ Set the TEXT attribute equal to Continue.
92
. Developers use button controls most frequently for this purpose. which you can use for the same purpose. you can redirect the user to the next page in the process. This section demonstrates how to create a form that uses the Button Web control to forward users to the second step in a process.
› Set an initial style for the
button.
Buttons are the natural choice for a control that needs to submit form data back to a server.
Y
id="cmdButton" />.ASP.aspx template from the Code Templates directory.NET
CREATE A BUTTON FOR POSTING DATA
ou can place a control on your Web forms for users to click in order to submit a form to the Web server for processing. in the client’s browser. When the user clicks the button. At this point. <ASP:BUTTON ID="cmdButton" TEXT="Continue" RUNAT="Server" />.
¤ Add a Button Web control on the page for the user to click. <input type="submit" name="cmdButton" value="Continue"
CREATE A BUTTON FOR POSTING DATA
⁄ Open the
WebWelcomeTemplate. generates an HTML Input Submit Button tag.

backgroundColor='Silver'" onMouseOut="this..CommandArgument + ".
° Save the file and request it
from the Web server.
Example:
<SCRIPT LANGUAGE="C#" RUNAT="Server"> void Button_OnClick(object Source.." + "</BR>" + "Your Command Name was " + buttonContinue. } </SCRIPT> <ASP:BUTTON ID="buttonContinue" TEXT="Continue" STYLE="height=30. If you have more than one button.
93
. I A message appears.
· Click the Continue button.style.</BR>" + "Your Command Argument was " + buttonContinue.WORK WITH WEB CONTROLS
The Button Web control has a couple of additional properties that you can use to handle some of the programming problems you have with standard HTML 4. EventArgs e) { labelMessage.
‡ Add the onClick event to call the Button_OnClick function.</BR>".backgroundColor='White'" onClick="Button_OnClick" CommandName="Move" CommandArgument="Homepage" RUNAT="Server"/>
5
ˇ Add the code for the
onMouseOver event to set the background color of the button to silver. the CommandName and Argument are useful attributes that can store information that is associated with the button and can be used in the event handler.style.width:100" onMouseOver="this.0 Buttons.
Note: See pages 20 to 25 for instructions on saving a file to the Web server and then requesting the file using the IIS Admin.
Á Add the code for the
onMouseOut event to set the background color for the button back to white.Text="You are continuing to Step 2.CommandName + ".

ASP.
‹ Save the file and request it
from the Web server. but it gives you the ability to process the form data by calling a subroutine when the onclick event is detected.
⁄ Open the
WebWelcomeTemplate. you can use the LinkButton Web control to give your users a way to submit forms. Remember that you need to add an ID attribute and set the RUNAT attribute to 'Server'. To do this. you must open a template file and declare the LinkButton control and set the appropriate attributes and event handlers.aspx template from the Code Templates directory. ASP 3. The LinkButton Web control takes an anchor tag. this capability is built in. The LinkButton control is created with the <ASP:LINKBUTTON> tag. To handle the event when the user clicks the link.
Note: See pages 20 to 25 for instructions on saving a file to the Web server and then requesting the file using the IIS Admin.NET
CREATE A HYPERLINKED BUTTON
L
ike the Button Web control.0 requires programmers to complete extra work to take anchor tags and enable them to submit forms. you should add an attribute for the onClick event. <a>.
94
. you can redirect the user to another page. In ASP. I A message appears.
› Click the link.
¤ Add a LinkButton Web
control to the page and have it call the Button_OnClick when the onClick event is fired. create the code that processes the form data. For the function that you call in the onClick event.
CREATE A HYPERLINKED BUTTON
The LinkButton Web control resides on a server form on your ASP.NET. and extends its capabilities to function like an HTML input submit button. You can use the LinkButton control on a page that lets the user move to a second step in a process.NET page. This control looks like a normal hyperlink that a user can click. This subroutine will run before the user is sent to the page designated in the link. When you finish processing the form.

You can do this if you use an ImageButton Web control in combination with some client-side code to create a rollover effect.WORK WITH WEB CONTROLS
5
CREATE A GRAPHICAL BUTTON
ou can use an image for a button on a form to create an animated button. To create a rollover effect. To set the image for the control. set the IMAGEURL to the path and the filename of the image that you wish to display.
¤ Add a ImageButton Web
control to the page. This Web control addresses a common Web programming need.
I A green light appears with
a continuing message. As with other HTML and Web controls. The result of using an ImageButton Web control on a form will generate an <input type="image"> tag in the user’s browser. Set onMouseOver to the path and filename of the image you want to display when the user puts their mouse on the image.
ˇ Add the onMouseOver
and onMouseOut event handlers to create the rollover effect.aspx template from the Code Templates directory. You should use the onMouseOut event to set the image back to the original image path and filename when the user moves the mouse off the image. The ImageButton control is created with the <ASP:IMAGEBUTTON/> tag.
Á Save the file and request it
from the Web server.
Y
The ImageButton Web control will reside on a server form on your ASP. set the RUNAT="Server" attribute in the tag.
‹ Set the initial value for the
image.
Note: See pages 20 to 25 for instructions on saving a file to the Web server and then requesting the file using the IIS Admin.NET page.
95
. the ability to use an image as a button. ‡ Position your mouse over
the stoplight and click.
add the onMouseOver and onMouseOut event handlers.
I A red light appears.
CREATE A GRAPHICAL BUTTON
⁄ Open the
WebWelcomeTemplate.
› Call the
Button_OnClick when the onClick event is fired for the ImageButton Web control.

You can work with a couple different types of text boxes. you can add a button which calls a server-side function.
ˇ Add a Button Web control that calls the SubmitBtn_Click for the onClick event. including a single-line text box. Then. and a password text box.
Á Add a Label control for the message. and dates. To enable users to submit the form.
‹ Type a message to the user. As with other HTML and Web controls.aspx template from the Code Templates directory. ‡ Add a single-line text box
and set the WIDTH attribute to 200 pixels. The values for TEXTMODE are SingleLine.NET page. set the RUNAT="Server" attribute in the tag.
Y
The TextBox Web control resides on a server form on your ASP. To do this.ASP. a multiline text box.
° Add a password and set
the WIDTH attribute to 200 pixels. first add a single-line text box for the user to type his or her login name. you can format an appropriate message to display using a label on the form. Users can type in information such as text.NET
REQUEST TEXT INPUT
ou can use the TextBox Web control to enable a user to type information into a form.
REQUEST TEXT INPUT
You can create a simple login page to test for a static password. and Password. The type of text box is specified by setting the TEXTMODE attribute. Multiline. Depending upon success or failure of the password. In that function. you can check what the user entered in the password box against a value.
› Type a Server form to the
page. You can create the TextBox control with the <ASP: TEXTBOX /> tag. numbers.
⁄ Open the
GenericTemplate.
96
.
¤ Type a heading for the
page. add a password text box.

Example:
Enter Name: <ASP:TEXTBOX ID="inputName" TEXTMODE="SingleLine" TEXT="" WIDTH="200px" RUNAT="Server" VISIBLE="False"/>
You can create a multiple line textbox by setting the TEXTMODE attribute to MultiLine. I A message appears
notifying you that the password is correct. with the MAXLENGTH attribute.
Example:
Enter Name: <ASP:TEXTBOX ID="inputName" TEXTMODE="SingleLine" TEXT="" WIDTH="200px" RUNAT="Server" MAXLENGTH="40"/>
You can programmatically hide the text boxes from the user by setting the Visible attribute of the TextBox Web control equal to False.
¡ Click the Submit button.
Example:
Enter Name: <ASP:TEXTBOX ID="inputName" TEXTMODE="MultiLine" TEXT="" WIDTH="200px" RUNAT="Server" MAXLENGTH="40"/>
· Create a function called
SubmitBtn_Click to check the password.
Example:
Enter Name: <ASP:TEXTBOX ID="inputName" TEXTMODE="SingleLine" TEXT="" WIDTH="200px" RUNAT="Server" DISABLED="True"/>
You can limit the number of characters that a user can type into a textbox.
— Save the file and request it
from the Web server.
97
.WORK WITH WEB CONTROLS
5
You can create a text box that is read only by setting the Disabled attribute of the TextBox Web control to True.
± Type in a name and a
correct password.
Note: See pages 20 to 25 for instructions on saving a file to the Web server and then requesting the file using the IIS Admin.
‚ Add an if statement to check the password and display the message using the Label Web control on the page.

In this case of multiple check boxes.ASP. For most cases. You can use multiple check boxes on one Web form.
REQUEST BOOLEAN INPUT
⁄ Open the
GenericTemplate. you can use the CheckBoxList Web server control. set the RUNAT attribute to Server.
ˇ Add a Button Web control that calls the SubmitBtn_Click for the onClick event.
› Add a server form to the
page. which is how you reference it in code.
‹ Type a message to the
user. See page 128 for how controls are data bound.aspx template from the Code Templates directory. You need an ID attribute to give the control a name. you can use the CheckBox Web server control. This control functions similarly to the HTMLInputCheckBox HTML server control. The CheckBox control is created with the <ASP: CHECKBOX > tag.
S
Use the TEXT attribute to set what is displayed to users for that check box. If set to true.
Á Add a Label control for the message. you should use the Checked property to see whether it is set to true. As with other Web server controls.
98
.NET page. ‡ Add a CheckBox Web
server control. To process the check box. that means that the user clicked the check box.NET
REQUEST BOOLEAN INPUT
ome Web page form questions that you ask your users require a yes/no or true/false response.
The CheckBox Web control will reside on a server form on your ASP.
¤ Type a heading for the
page. you will create a multi selection check box group dynamically by binding the control to a data source. For these types of responses.

¤ Type a heading for the
page. you are asking a question that requires only one answer from a group of answers.
‹ Type a message to the
user.
‡ Add a RadioButton
Web server control for each of the radio button options and set the GROUPNAME attribute for the controls to be the same so they are in a group. When the user submits the form. In this example.NET
REQUEST A SELECTION FROM A GROUP
ou can use radio buttons to have a user select a single option from a group of choices. To conveniently work with a group of radio control buttons.aspx template from the Code Templates directory. Then. To associate a group of radio buttons. where you force the user to choose one option out of a list of options. Radio buttons are typically implemented in groups of two or more. set the GROUPNAME attribute to be the same for all controls in the group. You can also specify which of the radio buttons is checked when
REQUEST A SELECTION FROM A GROUP
⁄ Open the
GenericTemplate. the Checked property of the controls formats a message. Á Add a Label control for the message. To do this. You can do this by setting the CHECKED attribute for the radio button to True.
To employ the RadioButton Web server control on your server form.
ˇ Add a Button Web control that calls the SubmitBtn_Click for the onClick event. The RadioButton control functions similarly to the HTMLRadioButton server control. you must first declare a RadioButton Web server control with the <ASP:RadioButton RUNAT="Server"> tag. you can use the RadioButtonList Web server control.
› Add a server form to the
page. you must give each radio control button that you want a unique ID attribute. you create a form with multiple RadioButton Web server controls in the same group.ASP.
100
.
Y
the user requests the page.

± Click the Submit button.
‚ Save the file and request it
from the Web server. EventArgs e) { if (radiobuttonlistSuggestions.SelectedIndex > -1) { labelMessage.
Example:
<FORM RUNAT="Server"> <P/> <ASP:RADIOBUTTONLIST ID="radiobuttonlistSuggestions" RUNAT=”Server”> <ASP:LISTITEM>Fewer Goals</ASP:LISTITEM> <ASP:LISTITEM>More Goals</ASP:LISTITEM> <ASP:LISTITEM>Same Number of Goals</ASP:LISTITEM> </ASP:RADIOBUTTONLIST> <P/> <INPUT TYPE="Submit" VALUE="Submit" OnServerClick="SubmitBtn_Click" RUNAT="Server"> <P/> <ASP:LABEL ID="labelMessage" RUNAT="Server"/> </FORM>
By using this RadioButtonList Web server control.
101
.
Example:
<SCRIPT LANGUAGE="C#" RUNAT="Server"> void SubmitBtn_Click(object Source.
· Add an if statement to check whether the control was checked and send the appropriate message. } } </SCRIPT>
° Create a function called
SubmitBtn_Click to check the suggestion selected.WORK WITH WEB CONTROLS
5
You can use the RadioButtonList Web server control for working with multilple RadioButton Web server controls.
Note: See pages 20 to 25 for instructions on saving a file to the Web server and then requesting the file using the IIS Admin. I The suggestion echoes
back.
— Click to select the first
radio button. you can use the SelectedIndex property to find out which radio button was selected.Text.Text = "You suggested " + radiobuttonlistSuggestions.SelectedItem.

‡ Add a DropDownList
Web server control and set its attributes.
› Add a server form to the
page.NET
REQUEST INPUT FROM A DROP-DOWN LIST
ou can use a drop-down list box for soliciting input from a user where you want to give a group of options and require the user to select only one of the options.
Á Add a Label control for the message. To present a list of options. the Web server reads the selected value as a property of the DropDownList control and echoes the suggestion back to the user.NET page. The DropDownList control is used to generate a drop-down list box on a form. you can use the SelectedItem. To process the DropDownList Web server control.
102
ˇ Add a Button Web control that calls the SubmitBtn_Click for the onClick event.
The DropDownList Web control resides on a server form on your ASP. When the user submits the form.aspx template from the Code Templates directory.
Y
holds each option in its own tag. The DropDownList control is created with the <ASP: DROPDOWNLIST > tag. the drop-down list box
REQUEST INPUT FROM A DROP-DOWN LIST
⁄ Open the
GenericTemplate.
¤ Type a heading for the
page.
. You need to add an ID attribute and set the RUNAT attribute to Server for the control to work properly. <ASP:LISTITEM>. You can use the DropDownList Web server control and the ListItem controls to display a form for gathering input for suggestions.ASP.
‹ Type a message to the
user.Text property to find the value of the option that was selected.
° Add ListItem Web
server controls for each option. The DropDownList Web server control gives you a way to create this HTML control and work with the control programmatically.

TYPE THIS:
<HTML><HEAD> <SCRIPT LANGUAGE="C#" RUNAT="Server"> void Page_Load(Object Sender.
— Save the file and request it
from the Web server. alSuggestions. } </SCRIPT></HEAD><BODY> <FORM RUNAT="Server" ID="Form1"> <P /><ASP:DROPDOWNLIST ID="dropdownlistSuggestions" RUNAT="Server" /> <ASP:BUTTON TEXT="Submit" OnClick="SubmitBtn_Click" RUNAT="Server" ID="Button1" /><P /> <ASP:LABEL ID="labelMessage" RUNAT="Server" /> </FORM></BODY> </HTML>
5
RESULT: A drop-down list appears with the three suggested goals and a submit button.Add ("Fewer Goals").".
± Click
option." + dropdownlistSuggestions.
103
.. I The suggestion echoes
back on screen.WORK WITH WEB CONTROLS
As with the rest of the Web server controls.Add ("Same Number of Goals"). } void SubmitBtn_Click(object Source.DataSource = alSuggestions.
Note: See pages 20 to 25 for instructions on saving a file to the Web server and then requesting the file using the IIS Admin. dropdownlistSuggestions. dropdownlistSuggestions.
‚ Set the label according to
the input received from the user. EventArgs E) { if (!IsPostBack) { ArrayList alSuggestions = new ArrayList().SelectedItem. alSuggestions.Text + ".Add ("More Goals").Text ="Your suggestion is.DataBind(). you can data-bind the control to a data source.
to select an
¡ Click the Submit button..
· Create a function called
SubmitBtn_Click to check the input. alSuggestions. EventArgs e) { labelMessage.

will disable selection of the calendar.
Y
handler for the SelectionChanged event. You need to add an ID attribute and set the RUNAT attribute to Server for the control to run properly. You can give your users all the section options (select a day. you should check for the SelectedDate property to retrieve the date that the user chooses. None. you can write an event
REQUEST DATES FROM A CALENDAR
⁄ Open the
GenericTemplate.NET Framework.
Á Add a Calendar control to
the page and have the control call the Date_Selected function for the onSelectionChanged event.
‹ Type a message to the
user. The Calendar control is created with the <ASP: CALENDAR> tag.aspx template from the Code Templates directory.NET page. In the event handling code.NET
REQUEST DATES FROM A CALENDAR
ou can use the Calendar Web server control when you need a user to select a valid date. including weeks and months. so the control works with most browser types.
The Calendar Web control will reside on a server form on your ASP.
› Add a server form to the
page. or month) by setting the mode to DayWeekMonth. You can select any single day with the Day mode. The Calendar control supports four date selection modes. The last option. This is one of the richest Web server controls available in the ASP. You can have users select different ranges for dates as well.ASP. you can set the mode to DayWeek. The Calendar control can be generated using only HTML. To determine which date a user selects.
104
.
¤ Type a heading for the
page. week.
ˇ Add a Label control for the message. If you want to give the option for selecting single day or a week at a time.

WORK WITH WEB CONTROLS
5
You can set a number of properties for the Calendar control to customize the control.
Note: See pages 20 to 25 for instructions on saving a file to the Web server and then requesting the file using the IIS Admin.
· Save the file and request it
from the Web server.
Example:
<ASP:CALENDAR ID="calendarGoal" RUNAT="Server" onSelectionChanged="Date_Selected" DAYNAMEFORMAT="FirstLetter" SELECTIONMODE="DayWeekMonth" FONT-NAME="Verdana" FONT-SIZE="12px" HEIGHT="180px" WIDTH="230px" TODAYDAYSTYLE-FONT-BOLD="True" DAYHEADERSTYLE-FONT-BOLD="True" OTHERMONTHDAYSTYLE-FORECOLOR="Gray" TITLESTYLE-BACKCOLOR="Navy" TITLESTYLE-FORECOLOR="White" TITLESTYLE-FONT-BOLD="True" SELECTEDDAYSTYLE-BACKCOLOR="LightBlue" SELECTEDDAYSTYLE-FONT-BOLD="True"
‡ Create the
Date_Selected function. ‚ Click to select a date.
I A calendar appears. The following code can customize the control in a number of ways. such as enabling the user to select a week or a month at a time as opposed to just a single date. I The date echoes back.
105
.
° Set the label according to
the input received from the user.

you must add the <ASP:HYPERLINK RUNAT="Server"> tag to the page.
T
The HREF for the anchor tag represents the URL that the user gets sent to after clicking the anchor tag.
CREATE A LINK
⁄ Open the WebVisit HompageLinkTemplate.aspx template from the Code Templates directory. or HTML. You must set the HREF and the TEXT properties.
‹ Add the code to set the
HREF and Text properties for the HyperLink control. You can use this control to set properties for the hyperlink.NET Web page from the server. you can use the Page_Load event to set the hyperlink’s properties.
I The page appears with a
HyperLink. including where the user is directed to when clicking the hyperlink and what text represents the hyperlink. The following example lets you use the Page_Load event to set the properties for the HyperLink Web server control. The anchor tag surrounds the text.
› Save the file and request it
from the Web server. When you request the ASP. the Page_Load event fires and the server creates the anchor tag using the code in the server-side event. you can use the HyperLink control.NET page.ASP. that is hyperlinked (underlined) in the user’s Web browser. ¤ Add a HyperLink Web
server control to the form.
106
. To create a HyperLink Web server control on an ASP. You should also add an ID attribute for the control so that you can reference it in your code.NET
CREATE A LINK
o create a hyperlink programmatically with Web server controls.
If you want to create a link programmatically.
Note: See pages 20 to 25 for instructions on saving a file to the Web server and then requesting the file using the IIS Admin.

you can easily replace this image. You can
RENDER AN IMAGE
⁄ Open the
WebGoalTypesTemplate. This displays if the user’s Web browser has graphics turned off or the source for the graphic is missing.
Y
set the IMAGEURL attribute for mapping the path of the image source file.
Note: See pages 20 to 25 for instructions on saving a file to the Web server and then requesting the file using the IIS Admin.NET page. which separates it from most of the other Web server controls.
› Click to select the
Educational goal type from the drop-down list box. I The image is updated with
the Education image. One attribute that is useful is the ALTERNATETEXT attribute.WORK WITH WEB CONTROLS
5
RENDER AN IMAGE
ou can use the Image Web server control to work with your images. through code. You can then add code on your page that modifies this control. This text for this attribute will also show as pop-up help text (if the user holds the mouse pointer over the image).
I The page appears with the
Travel image. Then.
The Image Web server control functions very similarly to the HTMLImage control.
¤ Add an Image control to the server form. The Image Web control will reside on a server form on your ASP. you can use the Image control to specify what image appears when the page first displays. For example.
ˇ Click the Apply button. The Image control is created with the <ASP: IMAGE > tag.
‹ Save the file and request it
from the Web server. The Image Web server control does not support any events. You will then need to add an ID attribute and set the RUNAT attribute to Server. You can make the pop-up help text different than the alternative text by using the TOOLTIP attribute.
107
.aspx template from the Code Templates directory.

° Create and initialize
variables for number of rows and number of cells.
Note: You need to give the form an ID attribute and set the RUNAT attribute to "Server". You need to add an ID attribute and set the RUNAT attribute to Server for the control to work properly. the TableCell control.
‡ Create and initialize a
variable for counting rows. cell spacing and padding.
Y
When working with the Table Web control. you can create an iterative statement that will loop through all members of the collections and make programmatic modifications to each item in the table.
Á Add the Page_Load
function. and an object that represents a row.
‹ Add a message to the user. ˇ Add a table to the page
and set the BORDER attribute equal to 1. you can work with several other controls.
108
.
› Add a form to the page. Because you normally work with these members of the TableCell and TableRow controls as collections.
· Create and initialize an
array for the contents of the table. such as Page_Load. You can also use the Table Web server control to set table properties such as background color. the TableCellCollection and TableRowCollection objects. before the page is generated.
You can populate the table in one of the events.NET
BUILD A TABLE
ou can use the Table Web server control to dynamically create and modify tables in your ASP pages.
BUILD A TABLE
⁄ Open the
GenericTemplate. The Table control is created with the <ASP: Table> tag. the TableRow control. The Table Web control will reside on a server form on your ASP.ASP. you can use their respective collection objects.aspx template from the Code Templates directory. With these collections. and border size and color.
¤ Add a heading for the
page.NET page. You can use the HTML server control HTMLTable for the same purpose as this control. This includes the object that represents a cell.

EventArgs e) { string[] sGoalList = {"Hike the Appalachian Trail". "Give $1 million to worthwhile causes"}.
¡ Create a new
HTMLTableCell for each cell and add the value in the array to the cell.
™ Add the cell to the row. tcGoals. TableCell tcGoals = new TableCell(). i++) { TableRow trGoals = new TableRow().Add(new CheckBox()).
¢ Save the file and request it
from the Web server.
109
.
Note: See pages 20 to 25 for instructions on saving a file to the Web server and then requesting the file using the IIS Admin.Rows. trGoals.
I A table with the contents
of your array appears.Cells. The full page for this example is available on the CD.WORK WITH WEB CONTROLS
Not only can you add literals to a table cell.Controls. TYPE THIS:
void Page_Load(Object sender.Add (new LiteralControl(sGoalList[i])). int iRows = sGoalList.Cells.
± Process each cell in the
row with a for loop. trGoals.Controls.Add(tcGoals). TableCell tcGoal2s = new TableCell(). i<iRows. Table1. tcGoal2s.
‚ Process each row with a
for loop. for (int i=0. but you can also add other controls.
— Create a new
HTMLTableRow for each row.Add(tcGoal2s). £ Add the row to the table.GetUpperBound(0) + 1.Add(trGoals). }}
5
RESULT: A table that contains a list of goals with a checkbox next to each.

‡ Click the Submit button.
‹ Add a button to the pages ˇ Save the file and request it
that calls the Button_OnClick event.
MANIPULATE TEXT
⁄ Open the
WebWelcomeTemplate. which fires off an event that can read what was in the text box and update a Label control on the form with this value.NET
MANIPULATE TEXT
T
he Label Web server control is used for displaying text on a Web page. You can work with the Label control in your code and programmatically change the properties of the label. For example. The Label control is created
with the <ASP: Label> tag. You need to identify what each TextBox contains. including the text that appears. you can have 3 TextBox controls on a form. After filling in the text box.ASP. from the Web server. I Note the Label control on the page. users can click a button.NET page. you can have a form that takes input using a TextBox control. Like the Image Web server control.
Á Type a message in the
text box. For example.
¤ Add a Text box to the page. set the RUNAT attribute to Server. You will need an ID attribute to give the control a name. You can use the Label Web control to identify the purpose of controls that you arrange on a Web form. The Label Web control will reside on a server form on your ASP. As with other Web server controls.
› Modify the code in the
Note: See pages 20 to 25 for instructions on saving a file to the Button_OnClick event so Web server and then requesting that the label is updated with the file using the IIS Admin. which is how you reference it in code.
110
. I A message appears. the text from the text box. the Label Web server control does not support any events.aspx template from the Code Templates directory.

but if you are adding controls for a form.Add method. › Add the control to the
Placeholder control. then you should use the Placeholder control.
ˇ Save the file and request it
from the Web server. This is a convenient way to specify where on your page you want to put controls.Controls.WORK WITH WEB CONTROLS
5
ADD A PLACEHOLDER FOR CONTROLS
ou can use the Placeholder Web server control to hold other controls on your ASP.
Y
control and add the control to the placeholder using the Placeholder. The Placeholder control does not generate any HTML back to the Web browser.NET Web page. but is used only to specify the location of controls that you add at runtime.
‹ Create an HTML server control and set its properties.
I The HTMLAnchor control
appears where the placeholder is located.
Note: See pages 20 to 25 for instructions on saving a file to the Web server and then requesting the file using the IIS Admin. you should make sure that it is between the <form> tags. If you do not know which control should be on the page or how many controls should be on the page until the page is requested.
You can use the Placeholder Web server control almost anywhere on your ASP. Placeholder controls are very useful in dynamically loading controls on a Web page.
¤ Add a Placeholder
control to the form.
111
. It is especially useful if you want to create all of your form controls programmatically.aspx template from the Code Templates directory.NET Web pages. You should then create the
USE A PLACEHOLDER FOR CONTROLS
⁄ Open the
WebVisitHomepage Template. It does not have to be on a server form.

NET Web pages. you can hide Panels or make them visible. which is how you reference it in code.ASP. For example.
° Add a message to the user
about being on the second step. ˇ Type a message to the
user.
You use the Panel control to break the Web page into sections of the Web page the user can view. you can create a page that first displays one panel.
› Create a Panel control and give it an ID.
Á Add a button for the user
to click and call the Button_OnClick function for the onClick event. This gives the effect of seeing multiple pages. As the user interacts with your page.NET page.
112
. The Panel control is created with the <ASP: Panel> tag.
¤ Add a heading for the
page. the first panel can be hidden and the second panel can be displayed.NET
PROVIDE A CONTAINER FOR CONTROLS
he Panel control can be used as a container for other controls on your ASP. which would initially hide the control. The control is very useful if you wish to hide a specific group of controls.
‡ Create a Panel control and give it an ID and set the VISIBLE attribute for the control to False. You can set the initial value of attributes when you declare the control. Therefore. when in fact they are viewing different Panels of the same page. you can set the VISIBLE attribute to False. you treat the Panel control as a container for other controls.aspx template from the Code Templates directory. You will need an ID attribute to give the control a name.
‹ Create a server form. For example.
T
The Panel Web control resides on a server form on your ASP.
PROVIDE A CONTAINER FOR CONTROLS
⁄ Open the
GenericTemplate. This would give users the impression that they have moved to another page. When the user finishes the page and clicks a Submit button.

‚ Set the Visible property of the first panel to False.
± Save the file and request it
from the Web server.
Example:
<ASP:PANEL ID="panelStep1" HEIGHT="100px" WIDTH="300px" BACKCOLOR="Silver" RUNAT="SERVER"/> Are you ready to set your goals? Click the Continue button to go to Step 2.
Note: See pages 20 to 25 for instructions on saving a file to the Web server and then requesting the file using the IIS Admin. — Set the Visible property
of the second panel to True. you can change the BACKCOLOR property to give a nice visual effect as the user moves from one panel to the next. ¡ Click the Continue button.WORK WITH WEB CONTROLS
5
You can use the Panel control’s properties to give an improved visual effect as the user moves to the next step in a process. I The second panel appears
informing you that you are on step 2. <P/> </ASP:PANEL>
· Create the
Button_OnClick function.
113
. You can also set the HEIGHT and the WIDTH properties for the panel. For example.
I The first panel appears. <P/> <ASP:BUTTON ID="buttonContinue" RUNAT="Server" onClick="Button_OnClick" TEXT="Continue"/> </ASP:PANEL> <ASP:PANEL ID="panelStep2" BACKCOLOR="Gold" HEIGHT="100px" WIDTH="300px" RUNAT="SERVER" VISIBLE="False"/> You are on Step 2.

You can then modify an advertisement file with details on your ads. you can display an advertisement on your Web page. another advertisement may display.
¤ Add a heading for the
page.ASP.NET Web page is simple.
‹ Add a server form to the
page.aspx template from the Code Templates directory. The
DISPLAY ADVERTISEMENT BANNERS
details include the location of the graphic. ASP. Having this information in a separate XML file makes it easy to maintain the advertisements.
114
.NET gives you an AdRotator control that supports the process of displaying advertisements. If you click Refresh. Add the <ASP:AdRotator RUNAT="Server"> tag to the place on the page where you want the banner to be displayed. The XML can be generated automatically through some server-side process or a programmer can modify it directly in the XML document. and how often the advertisement should be displayed. After you have done this.
⁄ Open the
GenericTemplate. Each time a new page appears or is refreshed. create or modify a separate XML format file. Then. The control supports displaying advertisements randomly. This file contains the details about the advertisements.
› Add an AdRotator Web
server control to the page and specify the location of the advertisement file. the URL that the user is sent to when clicking the banner.
M
The process of declaring the AdRotator control on your ASP.NET
DISPLAY ADVERTISEMENT BANNERS
any Web sites use advertisement banners to generate income. called the advertisement file. an advertisement is selected.
ˇ View the contents of the
advertisement file. you can add advertisements to a Web page by declaring the AdRotator control. For example.

• The <Keywords> element describes the category under which the advertisement falls.
Note: See pages 20 to 25 for instructions on saving a file to the Web server and then requesting the file using the IIS Admin. <Keywords>. <AlternateText>. • The <NavigateURL> element is the URL that the user will be sent to when clicking the advertisement. and <Impressions> elements.
Á Save the file and request
from the Web server.
I An advertisement appears. • The <AlternateText> element is what will be displayed if the Web browser has graphics turned off or displayed as help text when the user places the mouse pointer over the banner. • The <ImageURL> element is the path and filename for the graphic to be displayed on the banner. The child nodes to the <Ad> element are the <ImageURL>. <NavigateURL>. Each of the <Ad> elements contain details on different advertisemts. • The control uses the <Impressions> element as a weighting for how often the advertisement should be displayed relative to the other advertisements.
‡ Press F5 to refresh the
Web page.
I Another advertisement
may appear. You can use this element to filter out specific ads for different sections of your Web site.WORK WITH WEB CONTROLS
5
The elements of an Advertisement file are as follows: • The root node of the XML file is the <Advertisements> element.
115
. which contains one too many <Ad> elements.

For example. like the textbox and the dropdown list box.NET
VALIDATE REQUIRED FIELDS
ou can use the RequiredFieldValidator control on your ASP.
Á Add a TextBox control to the form.
To set this up.aspx template from the Code Templates directory. The RequiredFieldValidator checks to make sure that the user has changed a control’s value from the initial value. you can create a simple form that has the user input their login name. You must then
VALIDATE REQUIRED FIELDS
⁄ Open the
GenericTemplate.
¤ Add a heading for the
page.ASP. Because you always want the user to input something for the field.NET Web pages to specify which controls on your page require input. and specify which control to validate by setting the CONTROLTOVALIDATE attribute equal to the ID of the control to validate.
Y
declare the control at the location you want the error message to be displayed. Finally. › Add a server form to the
page. ‡ Add a Button control to the form.
‹ Add a message to the user.
116
. This is a convenient way to enable very basic validation on your pages.
° Add a
RequiredFieldValidator control to the page and specify a name for the control by adding the ID attribute. you specify the validation message for the user by setting the TEXT attribute. you have to create a RequiredFieldValidator control for each of the fields that you want to require input. you can use the RequiredFieldValidator control to ensure that something was entered into the field. You can use the control with most form controls.
ˇ Add another message to
the user.

WORK WITH WEB CONTROLS
You can also validate other controls. To do this.
Note: See pages 20 to 25 for instructions on saving a file to the Web server and then requesting the file using the IIS Admin. you need to set the INITIALVALUE attribute for the REQUIREDFIELDVALIDATOR element equal to the value that associates that the user has not selected an option. set the validation message by specifying the TEXT attribute. you can validate a drop-down list box. TYPE THIS:
<HTML> <BODY> <FONT FACE ="Verdana"> <H3>Welcome to mylifetimegoals.
— Click the Submit button.com</H3> What suggestions do you have for improving our site? <FORM RUNAT="Server"> <ASP:DROPDOWNLIST ID="dropdownlistSuggestions" RUNAT="Server"> <ASP:LISTITEM>Choose</ASP:LISTITEM> <ASP:LISTITEM>Fewer Goals</ASP:LISTITEM> <ASP:LISTITEM>More Goals</ASP:LISTITEM> <ASP:LISTITEM>Same Number of Goals</ASP:LISTITEM> </ASP:DROPDOWNLIST> <P/><ASP:BUTTON TEXT="Submit" RUNAT="Server"/><P/> <ASP:REQUIREDFIELDVALIDATOR ID="requiredfieldvalidatorInputName" CONTROLTOVALIDATE="dropdownlistSuggestions" TEXT="You must select a suggestion!" INITIALVALUE="Choose" RUNAT="Server"/> </FORM> </FONT> </BODY> </HTML>
5
RESULT: A page with a dropdown list appears that requires a selection to be made before submitting the page.
‚ Save the file and request it
from the Web server.
· Within the
RequiredFieldValidator control.
117
. For example.
Note: Do not fill in the login name box. I A validation message
appears.

¤ Add a heading for the
page.
‹ Add a message to the user.
To use this validation control. You can do this comparision based on a number of operations. › Add a server form to the
page. or if one is less than another. if one is greater than or equal to another. you must specify the control to validate with the CONTROLTOVALIDATE attribute. If the input is invalid.
ˇ Add a message to the user
and TextBox control to the form. To do so. you can create a form that requires one of the answers to be less than or equal to another one of the answers. For example. You then need to create a CompareValidator control for each comparision you would like to make. ° Add the
CompareValidator control to the page. The syntax for declaring a CompareValidator control is <ASP:COMPAREVALIDATOR RUNAT="Server">. the control to compare with the CONTROLTOCOMPARE attribute. including: checking the controls to see if they are equal to each other.NET.
‡ Add a Button control to the form.ASP. After you have set these. you would then display a validation message.NET
COMPARE TWO FIELDS FOR VALIDATION
ou can compare two values on a form when submitting a form to the server.aspx template from the Code Templates directory.
COMPARE TWO FIELDS FOR VALIDATION
⁄ Open the
GenericTemplate.
Á Add another message to
the user and TextBox control to the form.
118
. you can then designate the validation message to be displayed with the TEXT attribute.
Y
After you declare the control. and finally the operator with the OPERATOR attribute. you can use the CompareValidator control that comes with ASP. you must first create the two controls to use as criteria for the validation.

it checks to see if the values in the two text boxes are equal.
· Within the
CompareValidator control. When the form is submitted. I A validation message
appears. set the validation message by specifying the TEXT attribute.
± Click the Submit button." RUNAT="Server"/> </FORM> </FONT> </BODY> </HTML>
5
RESULT: The result is a page that collects values for two questions. then a message is displayed. TYPE THIS:
<HTML> <BODY> <FONT FACE ="Verdana"> <H3>Welcome to mylifetimegoals.com</H3> Please help us by taking the following survey. If they are not equal. <FORM RUNAT="Server"> How many goal-setting sites have visited you this month? <ASP:TEXTBOX ID="inputTimesVisitedGoalSites" TEXTMODE="SingleLine" TEXT="" WIDTH="50px" RUNAT="Server"/> <BR/> How many visits to www.mylifetimegoals.
— Fill in the form with a
smaller number for the first question.
119
.
‚ Save the file and request it
from the Web server.
Note: See pages 20 to 25 for instructions on saving a file to the Web server and then requesting the file using the IIS Admin.com this month? <ASP:TEXTBOX ID="inputTimesVisitedMyLifetimeGoals" TEXTMODE="SingleLine" TEXT="" WIDTH="50px" RUNAT="Server"/> <P/><ASP:BUTTON TEXT="Submit" RUNAT="Server"/><P/> <ASP:COMPAREVALIDATOR ID="comparevalidatorInputName" CONTROLTOVALIDATE="inputTimesVisitedMyLifetimeGoals" CONTROLTOCOMPARE = "inputTimesVisitedGoalSites" OPERATOR="Equal" TYPE="String" TEXT="Answer 1 must equal to Answer 2.WORK WITH WEB CONTROLS
You can programmatically check to see if the values for two controls are equal.

You must then specify the type of data you want to check. you can then use the <ASP:RANGEVALIDATOR RUNAT="Server"> tag to declare a
CHECK THE BOUNDARIES OF INPUT
⁄ Open the
GenericTemplate.
D
RangeValidator control. doubletype data. and the user gets a chance to correct the form and resubmit it.NET
CHECK THE BOUNDARIES OF INPUT
evelopers often need to validate a control based on a range of values. you can check a control to ensure that the user has put a date that falls within a specific range of dates.
120
. a validation message appears.
After you place a control on a server form.
¤ Add a heading for the
page. If the user does not type input that falls within a valid range. including ranges based on currency. you add the TEXT attribute and set it equal to the message.
‡ Add the
RangeValidator control to the page.aspx template from the Code Templates directory.
‹ Add a message to the user. › Add a server form to the
page. a validation message is displayed.
ˇ Add a message to the user
and TextBox control to the form. If the date falls outside this range. such as setting the type to Date. Then you need to specify the MAXIMUMVALUE and MINIMUMVALUE attributes to give the range for valid input. and string data. dates. You can have different types of ranges. For example.
Á Add a Button control to the form. For these cases. you can use the RangeValidator Web server control. integer-type data.ASP. To set the validation message.

set the validation message by specifying the TEXT attribute. a message is displayed to the user.
° Within the
RangeValidator control. <FORM RUNAT="Server"> <ASP:CALENDAR ID="calendarGoal" onSelectionChanged="Date_Selected" RUNAT="Server" /> <P/><ASP:TEXTBOX ID="inputMessage" RUNAT="Server" /> <P/><ASP:BUTTON TEXT="SubmitDate" RUNAT="Server"/> <P/><ASP:RANGEVALIDATOR ID="rangeValDate" TYPE="Date" CONTROLTOVALIDATE="inputMessage" MAXIMUMVALUE="1/1/2002" MINIMUMVALUE="1/1/1990" TEXT="Please enter a date between 1/1/1990 and 1/1/2002.SelectedDate. but can select the date from the Calendar control." RUNAT="Server"/> </FORM> </FONT> </BODY> </HTML>
5
RESULT: The result is a page that contains a calendar server control for selecting a date.
I A validation message
appears. the date is validated on the server.
121
.
Note: See pages 20 to 25 for instructions on saving a file to the Web server and then requesting the file using the IIS Admin. EventArgs e) { inputMessage.com</H3> Select the date you wish to accomplish this goal by. } </SCRIPT></HEAD><BODY> <FONT FACE ="Verdana"> <H3>Welcome to mylifetimegoals.Text = calendarGoal.ToShortDateString().
‚ Fill in the form with a date
outside the range. If the date does not fall within the specified date range.WORK WITH WEB CONTROLS
You can use the Calendar Web server control in combination with the RangeValidator control so the user does not need to type in a date. When the date is selected and then submitted.
· Save the file and request it
from the Web server. TYPE THIS:
<HTML> <HEAD> <SCRIPT LANGUAGE="C#" RUNAT="Server"> void Date_Selected(object s.

For these situations. use the VALIDATIONEXPRESSION attribute to indicate what you wish to use for the regular expression. This control lets you use regular expressions for your criteria to determine whether the input is valid. You then need to specify the control to validate with the CONTROLTOVALIDATE attribute. On the form containing the control you wish to validate. you can use the RegularExpressionValidator control.
ˇ Add a message to the user
and TextBox control to the form. you can use a simple regular expression to ensure that the user has filled in a text box with a ZIP Code. For example.
‡ Add the Regular ExpressionValidator control to the page. declare the control with the <ASP:RegularExpressionValidator
VALIDATE WITH REGULAR EXPRESSIONS
⁄ Open the
GenericTemplate.
Using the RegularExpressionValidator control is much like using the other validation controls.
122
. › Add a server form to the
page. you can just check to make sure that five numbers where entered.
¤ Add a heading for the
page.NET
VALIDATE WITH REGULAR EXPRESSIONS
ou may encounter situations where you have to be very specific about validating the text that a user inputs.
‹ Add a message to the user. specify the validation message using the TEXT attribute.ASP. In the regular expression. Regular expressions are a pattern-matching language used for processing text. If the text box does not contain five numbers.aspx template from the Code Templates directory.
Y
RUNAT="Server"> tag.com). see Microsoft’s MSDN site (msdn.microsoft.
Á Add a Button control to the form. Next. Finally. you can display a message back to the users and enable them to correct the input and resubmit the form for validation and processing. For more information on pattern matching.

WORK WITH WEB CONTROLS
5
Regular Expressions are commonly used for validating fields. CODE \d{3}-\d{2}-\d{4} \d{5}(-\d{4})? ((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4} ((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4} http://([\w-]\. Testing for a valid e-mail address. Here are some useful examples of Regular Expressions.
123
.
° Within the
RegularExpressionValidator control.. Testing for valid US postal code. Testing for a valid URL.
Note: See pages 20 to 25 for instructions on saving a file to the Web server and then requesting the file using the IIS Admin. I A message appears. set the validation message by specifying the TEXT attribute./?%=]*)? \d{4}-?\d{4}-?\d{4}-?\d{4} DESCRIPTION
Testing for a valid Social Security Number.
— Click the Submit button.)+[\w-](/[\w. Testing for a valid US phone number.
‚ Type in an invalid zip
code.
· Save the file and request it
from the Web server. Testing for Visa Credit Card.

The output of this control can be set with the DISPLAYMODE attribute. To organize the validation errors that occur on your page.aspx template from the Code Templates directory.
I You can scroll down to
view the validation controls on the page. You can use the ValidationSummary control to collect the validation results from all validated
controls.
SUMMARIZE VALIDATION ERRORS
⁄ Open the
WebValidationTemplate. For example.
124
. not just the first validation error. you can create a suggestion form that has all of the form controls and their associated validation controls. which is done with the HEADERTEXT attribute. Because the summary appears on the same page as the form. You can then specify the format for the summary. You should place the ValidationSummary control where you would like the summary message to be displayed.NET
SUMMARIZE VALIDATION ERRORS
M
ost of your forms will perform validations on the different controls on your forms. It is best to specify a header message for the validation summary. This is especially convenient for users because they will see a list of all the validation errors for the form. you can use the ValidationSummary Web server control to display a summary of the validation. you can put a ValidationSummary control at the top to display all of the validation errors that were triggered upon submission.ASP. the user can address the issues immediately and resubmit the form.
I You can scroll down
to view the form controls on the page. For this form.

› Fill out invalid input in
each field.WORK WITH WEB CONTROLS
5
You can choose from three different formats when displaying your Validation Summary.
ˇ Click the Submit button.
125
.
<ASP:VALIDATIONSUMMARY ID="validationsummarySurvey" DISPLAYMODE="List" RUNAT="Server" HeaderText="The following issues occurred:"/>
Finally.
‹ Save the file and request it
from the Web server.
<ASP:VALIDATIONSUMMARY ID="validationsummarySurvey" DISPLAYMODE="SingleParagraph" RUNAT="Server" HeaderText="The following issues occurred:"/>
¤ Add the ValidationSummary control to the page and set the properties for the control.
<ASP:VALIDATIONSUMMARY ID="validationsummarySurvey" DISPLAYMODE="BulletList" RUNAT="Server" HeaderText="The following issues occurred:"/>
You can also specify a simple list. you can format the summary as a Paragraph. I A message appears
showing all the validation errors. They are specified using the DISPLAYMODE attribute for the ValidationSummary control.
Note: See pages 20 to 25 for instructions on saving a file to the Web server and then requesting the file using the IIS Admin. The default mode is the bullet list.

When you have a connection. RDBMS (Relational Database Management System) storage is very commonly used in Web applications.NET
INTRODUCTION TO DATA ACCESS WITH ASP. For more complex lists. An important property of the Connection object is the Connection string.NET. which is used to specify how to open the database. you can then use a control called a Data Adapter to retrieve the data. which is especially useful when executing a stored procedure. you will look at how to work with databases in ASP. The simplest control is the Repeater control. and DataGrid controls. which is the class for connections with Microsoft SQL Server databases. (read) Name of the current (or soon to be) connected database. This control allows for more complex formatting of your data.ASP. After those parameters are set (typically through the ConnectionString property). you will probably want to display this data on the Web page. footer. The following table provides Key Properties and Methods of the SQLConnection class. You can use the DataSet object as the target for this data. and item templates for data.
CONTROLS USED TO ACCESS A DATABASE
Connection Connections are the starting point to data access. (read) Name of SQL Server instance with which to connect. There are several controls to which you can bind data. It enables you to create simple header. To do this.NET provides data access to RDBMS storage via ADO. you can bind the data to a control.NET technology. The Command object enables you to specify the parameters for the stored procedure. including paging and support for editable columns.NET using ADO. The origin of where the data is provided is called the data source. you can use a couple of controls that are supplied by ADO. You have many formatting options for the DataGrid control. These include the Repeater.
After you have the data from the data source. These controls include a Connection object.NET
ata access is an intergral part of creating dynamic web content.
D
BASICS OF DATA ACCESS
In this chapter. You need to give connection parameters to establish a connection. ASP.NET for dealing with data. you can work with the DataList control. The DataGrid control is the most functional control available in ASP. which is used to make the connection to the database.
DataSource
126
. Another control used for data access is the Command object. To get to this data. you will invoke the Open method to create an active connection.NET.
PROPERTY
ConnectionString Database
DESCRIPTION
(read/write) String used to open a SQL Server database. DataList.

DataAdapter A DataAdapter object bridges the source data and the DataSet so that retrievals and updates can occur. and item templates for displaying data. Commands are important for stored procedures and you still want to use stored procedures in your data access routines (for both security and performance reasons). which is the class for commands with Microsoft SQL Server databases. Like the Repeater control. (read/write) A value indicating how the CommandText property is to be interpreted. DataList Control For more complex lists. Calls the respective INSERT.
PROPERTY
CommandText CommandType Connection Parameters
DESCRIPTION
(read/write) The T-SQL statement or stored procedure to execute at the data source.ACCESS DATA WITH ASP. it uses templates for specifying how to display data. and creates a DataTable named Table. or DELETE statements for respective action in the specified DataSet from a DataTable named Table. you can work with the DataList control.NET for dealing with data. UPDATE. Creates a new instance of a SqlParameter object.NET
CONTROLS USED TO ACCESS A DATABASE (CONTINUED)
6
Command The Command object in ADO.
PROPERTY
AcceptChangesDuringFill TableMappings
DESCRIPTION
(read/write) A value indicating whether AcceptChanges is called on a DataRow after it is added to the DataTable.
GetFillParameters Update
CONTROLS USED TO DISPLAY DATA
Repeater Control The simplest control for binding data is the Repeater control that enables you to create simple header. The following table provides Key Properties and Methods of the DataAdapter class. The following table provides Key Properties and Methods of the SQLCommand class.
DataGrid Control The DataGrid control is the most functional control available in ASP.
127
. footer. (read) A collection that provides the master mapping between a source table and a DataTable. Retrieves the parameters set by the user when executing a SQL SELECT statement. You can define different types of columns with the DataGrid.
METHOD
Cancel CreateParameter ExecuteNonQuery
DESCRIPTION
Cancels the execution of a SqlCommand.NET is very similar to its cousin ADO. Executes a T-SQL statement against the Connection and returns the number of rows affected.
METHOD
Fill
DESCRIPTION
Adds or refreshes rows in the DataSet to match those in the data source using the DataSet name. (read/write) The SqlConnection used by this instance of the SqlCommand. (read) The SqlParameterCollection.

To bind the control to the data source.NET
DISPLAY REPEATING DATA
ou can use the Repeater Web server control to format data into custom lists. You can then use the templates to format the output. You can use the HeaderTemplate and FooterTemplate for output that comes before the items and after the items.
‹ Add a message to the user. To format the lists.aspx from the Code Templates directory. you can use templates to define the layout of the data. For example. respectively.
° Add the footer template tags and end the table. The AlternatingItemTemplate formats output as well. The SeparatorTemplate is used to specify formatting between rows of data. you must first set the DataSource property and then call the DataBind method. The ItemTemplate is a required template. you can specify a horizontal line in HTML.
¤ Add a heading for the
page. as well as alternating or separate rows of data.ASP. › Add a Server Form to the
page.
DISPLAY REPEATING DATA
⁄ Open
GenericTemplate.
ˇ Declare a Repeater
control on the page and give it an ID. You should give the control an ID so that you can reference it in code. This includes headers and footers.
Y
You can work with the Repeater control by adding <ASP:REPEATER RUNAT="Server"> to your ASP. Use an ItemTemplate when you want to format output for each row in the data source. although the template is applied only to every other row of the data.NET Web page.
128
. ‡ Add the item template tags and output the data items from the Repeater control.
Á Add the header template tags and begin a new table with a heading.
The Repeater control can support several different types of templates.

¡ Bind the Repeater control to the array list data.
129
.DataBind().ACCESS DATA WITH ASP.
‚ Create an array list. <ASP:REPEATER ID="repeaterCommaDelimited" RUNAT="Server"> <HEADERTEMPLATE> <B>Travel Goals</B><BR/> </HEADERTEMPLATE> <ITEMTEMPLATE> <%# Container.DataItem %> </ITEMTEMPLATE> <SEPARATORTEMPLATE>. </SEPARATORTEMPLATE> </ASP:REPEATER>
RESULT: The items from the data source appear in a comma-separated list.DataSource = alTravelGoals.
· Add the Page_Load
function to the page.
— Add some travel goals to
the array list. TYPE THIS:
repeaterCommaDelimited.aspx.
I A properly formatted table
appears with the data from the array list. repeaterCommaDelimited.NET
6
You can use the following Repeator control to display the data in comma delimited format by binding the Reaper control to an array list and using a comma as the SeparatorTemplate. See the full source code at Chapter06/Code/ASPRepeater_ai. The first set of code can be put into the Page_Load event and the second set into a server-side form to perform the databinding.
™ Save the file and request it
from the Web server.
± Set the data source for the
Repeater control to the array list.

¤ Add a heading and a
message to the user. If you want to have a table use different colors on alternating rows to aid in the readability of the table.
° Create a data table
variable. add a row
and set the value for the Goal column.NET Web page.
— For each row.
› Declare a DataList control on the page and give it an ID. EditItemTemplate describes the format when a user edits an item.
Á Import the System.
· Create a data row
variable.
‚ Add a column to the data
table. Give the control an ID attribute so that you can reference it in code.
‹ Add a Server Form to the
page.
DISPLAY COMPLEX LISTS
The DataList supports a number of templates. You can specify what should be output between each row with the SeparatorItem template.
⁄ Open the
GenericTemplate. each row in the data source utilizes the ItemTemplate.aspx from the Code Templates directory.ASP. SelectedItemTemplate describes the format when a user selects an item. You can then use the templates to format the output.NET
DISPLAY COMPLEX LISTS
ou can use the DataList Web server control to format complex lists. This control shares many similar features with the Repeater control. The AlternatingItemTemplate formats every other row in the datasource. You can use the HeaderTemplate and FooterTemplate to format a header and footer. To bind the control to the data source. ‡ Add the Page_Load
function.
130
.Data namespace. such as specifying the direction of the list as well as some additional template-formatting options. ˇ Add an item template
to the page and output the goal items. you should first set the DataSource property and then call the DataBind method.
Y
You can work with the DataList control by adding <ASP:DATALIST RUNAT="Server"> to your ASP. but it has additional features. For example. you can use the AlternatingItemTemplate.

NET
6
You can select from many options when formatting the DataList. See the full source code at Chapter06/Code/ASPDataList_ai.aspx.ACCESS DATA WITH ASP.
£ Save the file and request it
from the Web server.
± Create a DataView from
the table that was created.
131
.
¡ Set the data source for the
data list. TYPE THIS:
<ASP:DATALIST ID="datalistTravelGoals" RUNAT="Server" BORDERCOLOR="Black" CELLPADDING="5" FONT-NAME="Verdana" FONT-SIZE="12px" HEADERSTYLE-FORECOLOR="White" HEADERSTYLE-FONT-BOLD="True" HEADERSTYLE-BACKCOLOR="Navy" ALTERNATINGITEMSTYLE-BACKCOLOR="LightBlue">
RESULT: This produces a formatted list of the data provided. Type the following code into a server-side form.
I A properly formatted table
appears with the data from the data table.
™ Bind the data list to the
data source.

Data and System. you would be required to write many more lines of server side code to display data.Data. represents the connection and the commands to execute on the database.SqlClient namespace.
‹ Add a message to the user. also in the System.
¤ Add a heading for the
page.SqlClient namespace. found in the System. and sorting of data. The SQLDataSet. SQLDataAdapter. SqlClient namespaces. will use the SQLDataAdapter to retrieve data from the SQL Server data source. It supports advanced features to enable paging.ASP. The SQLDataAdapter.Data.Data.
T
displaying data. editing of data. this is the most common control that you use. and SQLDataSet.
Á Add the Page_Load
function. Because this example includes a database.
132
. Without this control. depending on how the DataGrid is configured) to support these features. For server-side databinding.aspx from the Code Templates directory. The SQLConnection object. you need to look at a few more new objects: SQLConnection.NET
DISPLAY SQL DATA
he DataGrid Web server control is a very flexible control for working with data. The DataGrid control generates an HTML table (along with other HTML elements.
The process you use to work with a DataGrid resembles that of the Repeater and DataList controls if you just want to use the control for
DISPLAY SQL DATA
⁄ Open the
GenericTemplate.
‡ Create a
SQLConnection object and use a connection string to connect to the database. › Add the control to the
page.Data namespace.
ˇ Import the System. is used to create a connection from the Web server to the SQL server database. from the System.

133
.ACCESS DATA WITH ASP. type the following code into a server-side form.
· Create a new DataSet
object.
‚ Add the
SQLDataAdapter to populate the DataSet.
¡ Save the file and request
the file from the Web server.
° Create a
SQLDataAdapter and set the SQL statement to retrieve business type books using the SQLConnection object. See the full source code at Chapter06/Code/ASPDataGrid_ai.NET
6
There are many options availabe to enhance the viewing and controlling of data with the DataGrid. To see some of these options. TYPE THIS:
<ASP:DATAGRID ID="datagridTitles" RUNAT="Server" SHOWHEADER="False" BORDERCOLOR="Black" CELLPADDING="5" FONT-NAME="Verdana" FONT-SIZE="12px" HEADERSTYLE-FORECOLOR="White" HEADERSTYLE-FONT-BOLD="True" HEADERSTYLE-BACKCOLOR="Navy" ALTERNATINGITEMSTYLE-BACKCOLOR="LightBlue" />
RESULT: This produces a formatted HTML table that contains the results of the query to the pubs database.
± Bind the DataGrid to the DataSet.aspx.
I A message appears.
— Set the DataGrid Data
Source property to the DataSet.

When you have a connection. which will be used to establish a connection to your database.
‡ Create a
SQLConnection object and use a connection string to connect to the database. you can use the Command object to execute a SQL statement that
INSERT DATA INTO A SQL DATABASE
⁄ Open the
GenericTemplate. After the data is inserted. the user ID and password.Data
and System.
° Create a
SQLDataAdapter object and set the SQL statement to retrieve business type books using the SQLConnection object. you open the connection.
Á Create the Page_Load
event. to confirm that the data insert was successful.ASP. You normally read this data from a form control on your ASP. and then close the connection. The most important property for this object is ConnectionString.
‹ Add a message to the user.aspx from the Code Templates directory.
Y
inserts a row of data into the database. which can specify the server.
134
. To do this. After you set the SQL statement.
· Create an insert command
for the titles table and read it into a string variable. and the database to connect to when creating the connection.NET to create Web pages that insert data into your SQL databases.NET
INSERT DATA INTO A SQL DATABASE
ou can use ASP. SqlClient namespaces. execute the command. After you have inserted the data into the database. ˇ Import the System. you can use a bound DataGrid control.NET framework objects. you need to work with a couple of .
› Add a DataGrid control to the page and set its properties. you will excute the Command object to select data that contains the new data (see page 132 for details on how to do this).NET Web page.
¤ Add a heading for the
page. The first object that you need to use is the Connection object.Data.

00. 1000.Parameters.Parameters["@Id"]. To do this. 10. pub_id. type.
TYPE THIS:
String insertCmd = "INSERT INTO titles(title_id.
± Populate the DataSet
object. you get a DataGrid control with the row that was added to the database.NVarChar.000')". '0736'. SqlDbType.
¡ Set the DataSource and
DataBind properties of the DataGrid on the page.
135
. Full of helpful tips. See Chapter06/Code/ ASPInsert_ai. 'How to Reach Your Business Goals'. 6)). title.'. price. sqlcommandTitles. SqlCommand sqlcommandTitles = new SqlCommand(insertCmd. examples.
RESULT: A page that asks for a book ID. and case studies. 25.00.
I A new record appears in
the titles table. When a valid ID is provided.Text. you need to read this data from the form and put it in your INSERT SQL string. 1000. and then
close the connection to the database with the SQLCommand object. sqlconnectionPubs). '2001-06-12 00:00:00.Add(new SqlParameter("@Id".
— Open.
‚ Use the insert command
string and the connection object to create a SQLCommand object.NET
6
You are most likely inserting data based on what a user fills out on a form. 'A practical how-to book on reaching even the most difficult business goals. notes. 'business'.
™ Save the file and request it
from the Web server. ytd_sales. sqlcommandTitles.ACCESS DATA WITH ASP. This code executes in an event where the user clicks a Submit button.aspx for the full source. royalty. pubdate) VALUES(@Id. The following code shows how to read one of the parameters for an insert from a form control. advance.Value = inputTitleId. execute.

NET to create Web pages that can update data in a SQL database. After your SQL string is constructed. The user changes the values that need to be updated and then submits the information for updating. After completing your database access code. make sure you close the connection to the database.
⁄ Open the
GenericTemplate. you can use the SQLCommand object.
Y
SQL UPDATE statements are typically built from information the user provides. you create an SQLCommand object and specify the SQL string to be executed against the database.
‡ Create a
SQLConnection object and use a connection string to connect to the database. Most of your applications require updating data that is persisted in a SQL Database. The
UPDATE DATA FROM A SQL DATABASE
SQLConnection object creates a connection to the database.aspx from the Code Templates directory. To send your custom SQL statement to the database. After you have a connection.
¤ Add a heading for the
page.Data. you can update a price in a book database through a Web page. ˇ Import the System. To update data in a SQL database. One way of updating data is by executing SQL UPDATE statements.
‹ Add a message to the user.
. you use the SQLConnection and SQLCommand objects. For example. you can then open a connection using the SQLConnection object.
› Add a DataGrid control to the page and set its properties. Because you are most likely building this SQL string from user input.ASP.Data
and System. you can read the information off of an HTML or Web server control.
136
· Create an update command for the titles table and read it into a string variable.
° Create a
SQLDataAdapter and set the SQL statement to retrieve business type books using the SQLConnection object.
Á Create the Page_Load
event.NET
UPDATE DATA FROM A SQL DATABASE
ou can use ASP.SqlClient namespaces. The current data that is in the SQL Database is retrieved and displayed to the user.

sqlcommandTitles.ACCESS DATA WITH ASP. you should read this data from the form and put it in your SQL UPDATE string.
the titles table. execute. sqlcommandTitles.
™ Save the file and request it
from the Web server. TYPE THIS:
String updateCmd = "UPDATE titles SET price = 35. SqlDbType. To do this.
137
.Value = inputTitleId.
± Populate the DataSet
object.00 WHERE title_id = @Id".
— Open.Add(new SqlParameter("@Id".aspx for the full source.NVarChar.Text. SqlCommand sqlcommandTitles = new SqlCommand(updateCmd.
I A record is updated from
¡ Set the DataSource and
DataBind properties of the DataGrid on the page.Parameters.Parameters["@Id"].
‚ Use the insert command
string and the connection object to create a SQLCommand object.NET
6
You can update data based on what a user fills out on a form. This code executes in an event when the user clicks a Submit button. and then
close the connection to the database with the SQLCommand object. When a valid ID is provided. The price is now $35. The following code shows how to read one of the parameters for an insert off a form control. you get an updated price in a DataGrid control. sqlconnectionPubs).
RESULT: This produces a page that asks for a title ID. Please see Chapter06/Code/ASPUpdate_ai. as opposed to $25. 6)).

Data
and System.NET to create Web pages that can delete data from your SQL Databases.
‹ Add a message to the user. Next. This active flag can be used to archive data when performing maintenance on your database. but is possible from a Web Page. Some developers will add a flag to a database table that indicates if the data is active or not. you can execute the command. This is not as common as updating and inserting data.ASP.
Y
likely building this SQL string from user input. you use the SQLConnection and SQLCommand objects to delete data from your SQL database. There are alternatives when it comes to deleting rows of data from a database.
› Add a DataGrid control to the page and set its properties. Finally. The most common use of deleting data is in administrative applications that are used to maintain data in your application. Because you are most
DELETE DATA FROM A SQL DATABASE
⁄ Open the
GenericTemplate.Data.
Á Create the Page_Load
event.
° Create a
SQLDataAdapter object and set the SQL statement to retrieve business type books using the SQLConnection object. you create a SQLCommand object and specify the SQL string to be executed against the database.
· Create a delete command for the titles table and read it into a string variable.
¤ Add a heading for the
page. you should close the connection to the database. you can read the information off an HTML or Web server control. After you have a connection. ˇ Import the System.NET
DELETE DATA FROM A SQL DATABASE
ou can use ASP. You use the SQLConnection object to create a connection to the database.
‡ Create a
SQLConnection object and use a connection string to connect to the database.aspx from the Code Templates directory. you can then open a connection using the SQLConnection object.SqlClient namespaces.
138
. After your SQL string is formatted and set.
As with inserting and updating data.

Value = inputTitleId.
6
RESULT: This produces a page that asks for a title ID. execute.
¡ Set the DataSource and
DataBind properties of the DataGrid on the page. 6)). This code executes in an event where the user clicks a Submit button.NET
You probably delete data based on what a user fills out on a form. The following code shows how to read one of the parameters for an insert off a form control.
± Populate the DataSet
object. you get an updated DataGrid control that shows a list of books that are in the pubs database (minus the record for the title that you deleted).
139
. sqlcommandTitles.aspx for the full source. To do this.
I The record disappears
from the titles table.
™ Save the file and request it
from the Web server.Parameters["@Id"]. and then
close the connection to the database with the SQLCommand object. SqlDbType.
‚ Use the delete command
string and the connection object to create a SQLCommand object. When a valid ID is provided.Parameters.
— Open. SqlCommand sqlcommandTitles = new SqlCommand(deleteCmd. sqlcommandTitles.ACCESS DATA WITH ASP. Please see Chapter06/Code/ ASPDelete_ai. TYPE THIS:
String deleteCmd = "DELETE FROM titles WHERE title_id = @Id".Text. you need to read this data from the form and put it in your DELETE SQL string. sqlconnectionPubs).Add(new SqlParameter("@Id".NVarChar.

you need to retrieve the desired data into a DataView using a DataSet.NET Web pages provide some nice sorting features that you can use when working with SQL Data. In this event.
· Create a DataSet object. and can easily be done by creating an event procedure for the DataGrid’s OnSortCommand event. You can control the direction of the sort by appending ASC (for ascending order) and DESC (for descending order) to the end of the Sort property of the DataView that you use for binding to the DataGrid control. This is a nice feature. SqlClient namespaces.
‹ Add a message to the user. After you sort the data.
° Create a
SQLDataAdapter and set the SQL statement to retrieve business-type books using the SQLConnection object.
¤ Add a heading for the
page.Data
and System. you can use the Sort property to specify the column on which to sort. After you have this data in your DataView. you can set the data source for the control to the sort data and bind the data.
140
. See page 132 to see how a DataSet is created.
SORT DATA FROM A SQL DATABASE
⁄ Open the
GenericTemplate.
The DataGrid control provides the ability to sort data by clicking on column headers.Data.
‡ Create a
SQLConnection object and use a connection string to connect to the database.
› Add a DataGrid control to the page and set its properties. you capture the SortExpression on the DataGrid control and pass it to a function that would sort the data and rebind to the DataGrid control.aspx from the Code Templates directory. ˇ Import the System. ‚ Populate the DataSet
object.
Á Create the Page_Load
event. When you work with large sets of data. it is very important to have sorting capabilities. First.ASP.NET
SORT DATA FROM A SQL DATABASE
A
SP.

DefaultView. Source. } public void BindGrid(String sortfield) { SqlDataAdapter sqldataadapterTitles = new SqlDataAdapter("select title. The first set of code goes into a server-side form and the second part goes into a server-side script block.aspx for the full source. datagridTitles.
™ Save the file and request it
from the Web server.ACCESS DATA WITH ASP. Please see Chapter06/Code/ASPSort_ai.
I The table is sorted based
on the Title column. datagridTitles. TYPE THIS:
6
<ASP:DATAGRID ID="datagridTitles" RUNAT="Server" ALLOWSORTING="True" OnSortCommand="datagridTitles_Sort"/> protected void datagridTitles_Sort (Object sender. DataView Source = datasetTitles. notes.
141
. price"+ "from titles where type='business'".
¡ Set the DataSource and
DataBind properties of the DataGrid on the page.
— Create a DataView based
on the DataSet that was filled.Tables["titles"]. DataSet datasetTitles = new DataSet(). sqlconnectionPubs). sqldataadapterTitles.NET
You can sort data by using the SortExpression Property on the DataGrid control. "titles"). DataGridSortCommandEventArgs e) { BindGrid(e.SortExpression).Fill(datasetTitles.
± Sort the DataView on the
title column with the Sort command.DataSource=Source.Sort = sortfield. }
RESULT: This produces a DataGrid control that sorts the table by the column that is clicked.DataBind().

by using stored procedures.
ˇ Import the System. you are probably reading a majority of the data for the parameters for the stored procedures from controls on your Web page. With stored procedures.
‡ Create a
SQLConnection object and use a connection string to connect to the database.aspx from the Code Templates directory. SqlClient namespaces. Like the ad hoc queries.
· Set the command type for
the SQLAdapter. Stored procedures are precompiled SQL statements that can be cached in memory on your database server. This makes maintenance much easier. Stored procedures can have zero to many parameters.Data
and System.
‹ Add a message to the user. UPDATE. you can also raise explicit errors if a problem occurs while executing the SQL that is in a stored procedure. Also. you will have all your SQL in one place and not distributed throughout your code.
142
. This data can be used by the stored procedure in a SELECT statement to filter data with the WHERE clause.NET
EXECUTE STORED PROCEDURES
U
sing stored procedures in your applications produces faster and more secure data access as compared to running SQL Statements directly against your database.
⁄ Open the
GenericTemplate.
Á Create the Page_Load
event.
° Create a
SQLDataAdapter and set stored procedure using the SQLConnection object. › Add a DataGrid control
to the page and set its properties.
¤ Add a heading for the
page. It is good practice to inspect for these errors after the stored procedure returns control back to your server-side code. or DELETE statements to modify data in your database. Parameters enable you to pass data to
EXECUTE STORED PROCEDURES
the stored procedure. Stored procedures are a good way to control what types of queries you allow your users to execute.
‚ Add a parameter to the
Command object.ASP.Data. This parameter data can also be used in INSERT. Stored procedures can be allowed or disallowed based on what type of user is accessing the system.

After users complete a form.SelectCommand. a DataGrid control that contains a list of author IDs that meet the stored procedures criteria results. TYPE THIS:
<FORM RUNAT="Server"> <ASP:DATAGRID ID="datagridTitles" RUNAT="Server" SHOWHEADER="False" VISIBLE="False"/> <P/> Enter the royalty percentage <P/> <ASP:TEXTBOX ID="inputPercentage" TEXTMODE="SingleLine" TEXT="" WIDTH="200px" RUNAT="Server"/><BR/> <ASP:BUTTON OnClick="SubmitBtn_Click" TEXT="Submit" RUNAT="Server"/> </FORM> sqldataadapterTitles.
I The authors with a royalty
percentage of 50% appear.
£ Save the file and request it
from the Web server.
™ Set the DataSource and
DataBind properties of the DataGrid on the page.NET
6
You can also read the parameters for your stored procedures from a form control on your ASP.
143
.aspx for the full source.
¡ Populate the DataSet
object.ACCESS DATA WITH ASP.
RESULT: This produces a page that asks for a royalty percentage.Parameters["@Percentage"].NET Web page.
— Set the value for the
command. they can click a Submit button. and the data can be read off the form at that time. The first section of code goes into the body of an HTML page and the second section of code goes into the click event of the button.Value = inputPercentage.
± Create a DataSet object.Text. Please see Chapter06/Code/ASPStoredProcedure_ ai. When the percentage is submitted.

A classic example of this is a customer order system. you work with two pages.
144
.NET
WORK WITH MASTER-DETAIL RELATIONSHIPS
eb developers commonly work with the Master-Detail relationship when creating ASP.
ˇ Specify the title_id
column as an <ASP:HYPERLINKCOLUMN> and set the other properties of the column. You then need to specify the field with the DATANAVIGATEURLFIELD attribute. you have to create the detail page. You must define one of
WORK WITH MASTER-DETAIL RELATIONSHIPS
⁄ Open
DataGridTemplate. After you finish the master page. The Master-Detail relationship usually appears as a column containing a list of items. and the text for the column with the TEXT attribute.ASP. you use the data that was passed via the URL to execute a SQL query against the database.
› Configure a special
column with the <COLUMNS> tag. When a user clicks an item in that column.NET Web pages. the page to be linked to and how to format the URL with the DATANAVIGATEURLFORMATSTRING attribute. The first page contains a DataGrid bound to data from a SQL database.
Á Save the file as the
master file. You can then display the results with another DataGrid or any other bound control that best suits the detail data display.
To create a Master-Detail relationship.
W
the columns in the DataGrid as the column where the user can click by using the <ASP:HYPERLINKCOLUMN> tag. On the detail page. another page with details about that particular item appears. where you have a list of customer orders and for each order you have one or many items that make up an order.
¤ Add the SQL statement to retrieve a couple of columns from the titles table.aspx from the Code Templates directory.
‹ Add the DataGrid to the
page and set properties.

· Save the file as the detail
file.
Example:
<asp:ButtonColumn ButtonType="LinkButton|PushButton" Command="BubbleText" DataTextField="DataSourceField" DataTextFormatString="FormatString" FooterText="FooterText" HeaderImageUrl="url" HeaderText="HeaderText" ReadOnly="True|False" SortField="DataSourceFieldToSortBy" Text="ButtonCaption" Visible="True|False" />
6
<asp:EditCommandColumn ButtonType="LinkButton|PushButton" CancelText="CancelButtonCaption" EditText="EditButtonCaption" FooterText="FooterText" HeaderImageUrl="url" HeaderText="HeaderText" ReadOnly="True|False" SortField="DataSourceFieldToSortBy" UpdateText="UpdateButtonCaption" Visible="True|False" />
‡ Open
DataGridTemplate.ACCESS DATA WITH ASP.aspx from the Code Templates directory. I The full details about the
title are displayed.NET
You can use the Hyperlink column to link an item on a master list to a detail table for the master item selected.
° Add the SQL statement to retrieve the data based on what was passed through the URL.
145
. To have a column represented by a button.
— Click the Details button. Here are the definintions for the ButtonColumn and EditCommandColumn. you could also use the ButtonColumn or the EditCommandColumn.
‚ Request the master file
from the Web server.

org) specified standard that is well accepted in the software development industry for describing data in text files.aspx from the Code Templates directory.
Sometimes you may wish to keep certain data in XML files on your Web server. There are many companies that are adapting XML as a standard for transporting lightweight data.
‡ Create a new DataSet
object. XML is a very convenient way to store and transport data in your applications.Data namespaces. You store XML documents in standard.
Á Add the Page_Load
function to the page. the DataView can be bound to a DataGrid. You can use any text-based viewer to inspect your XML documents.
° Create a FileStream
object and open the XML file on the Web server in Read mode. Finally.w3c.NET makes it easy for you to work with XML Data Sources. To work with the XML file.NET
WORK WITH XML DATA SOURCES
SP.
A
files.
¤ Add a heading for the
page. you need a StreamReader object for reading the byte stream from the FileStream object.
— Close the FileStream
object. This makes it easy to work with the documents. The DataSet object has a ReadXML method that you can use to read the stream. XML is a W3C (www.IO
and the System. Next. you can use a DataView based on the DataSet. XML has become instrumental in having disparate systems to have a way to communicate to each other.
‚ Read the XML into the
DataSet.
· Create a StreamReader
object and read in the file from the FileStream object.
146
. ˇ Import the System.ASP.
› Add a DataGrid control to the page. nonbinary text
WORK WITH XML DATA SOURCES
⁄ Open
GenericTemplate.
‹ Add a message to the user. After it has been read in. you must first work with the FileStream object to open the file.

NET XML framework. you can select data out of Microsoft SQL Server 2000 as XML.
Example:
DataView Source = new DataView(datasetGoals.
™ Bind the DataGrid. The native serialization format of the DataSet in XML is a perfect choice for moving data between tiers (including remote locations.NET and the .
± Create a new DataView
and initialize it with the values read into the dataset.Tables[1]).
XML is a key enabling technology for the .NET XML framework converge in the DataSet object.ACCESS DATA WITH ASP.NET provides disconnected data access by leveraging the simplicity and power of XML.
147
.
£ Save the file and request it
from the Web server. The architecture of ADO.
¡ Set the DataSource for
the DataGrid.NET
6
If you change the index on the DataSet. To create XML for your applications.NET is very tightly bound to the . like the client’s browser).
I The goal category names
and IDs appear. ADO. Microsoft SQL Server 2000 has made enhancements to the OLE DB provider (SQLOLEDB) to allow XML documents to be set as command text and to return result sets as a stream.NET Platform. you get the list of all of the goals as opposed to the goal categories.
ADO.

The first.NET
TRANSFORM AND DISPLAY XML
A
common task when working with XML documents is to transform an XML document with an XSL Transform document (also referred to as a XSLT style sheet or document). you need to create a server form on an ASP. the second.
¤ Open and review the style
sheet that is going to be used for the transformation. The XSLT document is described in XML like syntax.
148
. The XSLT document has information about how to format the data contained in the XML document. TRANSFORMSOURCE.org). The XML server control <ASP:XML> makes performing transformations simple. To work with the XML control. specifies the location of the XML document. Add an ID attribute and give the control a unique name so that you can work with the control in code. DOCUMENTSOURCE. The specification for how to properly write an XSLT document can be found from the World Wide Web Consortium (www.ASP.w3c. indicates the location of the XSLT document. You must set two important attributes on the control. format XML into a
presentation markup language like HTML (HyperText Markup Language) or WML (Wireless Markup Language).
TRANSFORM AND DISPLAY XML
⁄ Open and review the XML
document that you want to transform.NET Web page. or to do both.
The purpose of doing transformations is to either create a new XML data source.

} </SCRIPT> </HEAD> <BODY> <FONT FACE="Verdana"> <FORM RUNAT="Server"> <ASP:XML ID="xmlGoals" RUNAT="Server" /> </FORM> </FONT> </BODY> </HTML>
6
RESULT: This produces an HTML page that is a result of transforming goals in an XML document to HTML.Load(Server.aspx from the Code Templates directory. XslTransform xsltransformGoals = new XslTransform().NET
You can do transformations programmatically. xmlGoals.Document = xmldocumentGoals. xmlGoals.Xsl" %> <HTML> <HEAD> <SCRIPT LANGUAGE="C#" RUNAT="Server"> void Page_Load(Object sender.
ˇ Add an <ASP:XML> tag
and set its document source equal to the filename of the style sheet and the transform source equal to the XML document. xsltransformGoals. xmldocumentGoals. The following code transforms an XML document using a style sheet.
149
.Xml.Transform = xsltransformGoals. This gives you a chance to ensure that the transformation executes without errors.ACCESS DATA WITH ASP.
Á Save the file and request
the file from the Web server.
I The XML document is
transformed and output as HTML to the Web browser.
› Add a server form to the
page.xsl")).Xml" %> <%@ Import Namespace="System.MapPath("goals.MapPath("goals.
‹ Open
GenericTemplate.Load(Server. TYPE THIS:
<%@ Page Language="C#" %> <%@ Import Namespace="System.xml")). EventArgs e) { XmlDocument xmldocumentGoals = new XmlDocument().

Also. Applications can access Web Services through standard protocols and data formats like HTTP.
BENEFITS OF WEB SERVICES
Web Services enable you to expose business logic and data over the internet.NET Web Services can be implemented on any platform in any programming language. For example. The security issues are easier to control than Distributed Component Object Model (DCOM) access. which is over the range of ports that are allocated for Remote Procedure Calls (RPC).NET language. there are many well-established products that can provide control over port access and HTTP commands in packets. The other way is by accessing Web Services through a Web Service Client that has the potential to access one to many Web Services on one to many Web servers. as long as they can create and consume the messages defined for the Web Service interface. You can use ASP. One way is the traditional way via an Active Server Page (ASPX) which
is a presentation layer that can connect to business services that obtain data from a SQL data store. Exposing Web Services over HTTP. This provides new capabilities in distributed computing. ASP. The . A Web Service interface is defined strictly in terms of the messages the Web Service accepts and generates. As seen in the diagram. files for your Web Services.NET
INTRODUCTION TO WEB SERVICES
WEB SERVICE BASICS
Web Services are units of application logic that provide data and services to other applications. One of the large benefits of Web Services is the ability to pull data or apply business logic from many disparate systems and roll them into one application. ASP. Web Services are the next generation for programming Internet-based applications.NET Framework SDK also provides tools to generate proxy classes that client applications can use to access Web Services. where the communication port can be explicitly set. This is advantageous for rolling up several data sources in your organization or for combining Web Services from different companies to create an application that leverages the “best in breed” in services that are provided on the Web. allows for better control over security. and Web Services Discovery. Web Services are implemented with Web Methods that have input parameters and a return value. Web Services combine the best aspects of component-based development and the Web. Another benefit to Web Services is security.NET Web Services to implement a Web Service listener that
accesses a business façade implemented as a managed class using any compliant .
150
. WSDL. and SOAP. The protocols for accessing Web Services are open standards which make them available for consumption or production by any platform.ASP. Consumers of ASP. Disco. for HTTP access over a single port. a user’s browser can access a Web server’s data in one of two ways. you can have a Web Service Client that accesses data from several servers’ Web Services. XML.NET Web Services automatically generate Web Services Description Language.NET Web Services provide the simplest way to implement Web Services.NET. In ASP.

asmx is the Web Services file. you call a Web Service with parameters by providing a URL with a query string that holds the parameters.WORK WITH WEB SERVICES
BENEFITS OF WEB SERVICES (CONTINUED)
7
Web Browser
Internet
Web Server Web Service Client
Web Server ASPX Listener
Business Facade Layer Business Logic Layer Data Access Layer Data Web Service High Level Architecture
WEB SERVICE PROTOCOLS AND STANDARDS
ASP.NET Web Services support service requests using SOAP over HTTP. as well as HTTP GET or POST. For Microsoft-based Web Services. For example.asmx/ WebMethod?name=value.
Although SOAP is the preferred way to access Web Services.
151
. SOAP is a lightweight XML protocol that defines the two way communication that occurs between Web Service Clients and Servers.NET Platform. you can also easily access a Service with an HTTP GET or POST. and Web Services is no exception. and RPC over HTTP. the SOAP specification defines a set of rules for how to use XML to represent data. and ?name=value is the parameter for the Web Method. Where server is the
Web server path to the where the Web Service is located. you can call the Web Service with the following URL. WebService. WebMethod is the desired Web Method on the Web Service. The use of XML is central to the architecture of the . The most feature-rich access is through Simple Object Access Protocol (SOAP). With the HTTP GET.
http://server/ WebService. define message envelops — requests and responses — bindings to the HTTP protocol.

Web Services enable client applications to communicate to server components over the internet using the HTTP protocol. You must add a directive at the top
of the page to specify the Web Service language.asmx. you must apply the WebService attribute to a public method.cs.
152
. The assembly is required if you do not include the Web Service class inside of your ASMX file. For the class that is either embedded in the Web Service file.
› Give the WebService
class a name. or HTTP-SOAP.Web.asmx extension.
¤ Add a WebService
directive to the page.
‹ Set the Language in the
directive. you must determine which methods in your class are exposed to Web Service clients. To write a Web Service. you create a text file with an .
Á Create an alias for the
System. HTTP-POST. *.NET
CREATE A SIMPLE WEB SERVICE
W
eb Services allow your business objects over HTTP.ASP. Web Services are requested over HTTP by HTTP-GET. The SOAP access formats requests and responses from client to server with messages using XML for formatting the message contents.
CREATE A SIMPLE WEB SERVICE
⁄ Open a new document in
your text editor. *. The most functional access method is HTTP-SOAP access. and optionally the assembly containing the implementation. The assembly needs to be in the /bin directory underneath the Web application that contains the Web Service. or in a separate file. To expose methods in a class to Web Service clients. You can create a very simple Web Service in relatively few steps. the class that implements the Web Service.Service namespace.
ˇ Create an alias for the
System namespace.

and HTTP Post request and response for the Web Service. You do not need to create any additional pages for testing out a simple Web Service.
154
.
¤ Click the hyperlink.NET automatically generates pages for testing a Web Service when the Web Service ASMX file is requested with your Web browser.asmx— with your Web browser. ASP. If you have parameters for the Web Method. you can test it.NET
TEST A WEB SERVICE
A
fter you create your Web Service.ASP. see page 152.
TEST A WEB SERVICE
⁄ Open a Web browser and
navigate to the Web Service file. The first page that you see displays the Web Service class name and all of the Web methods that
are available for that Web Service class. You can click the Web Method name that you want to test. HTTP Get. and the XML that is generated from the request displays the results. another instance of Internet Explorer opens. If you do not have a Web Service to test. You can use these pages to see what is returned from the Web Service. you will see a text box for entering each parameter value. The next page displays an Invoke button that you can use to call the Web Method.
I The Web Service class
appears.
‹ Scroll down the page to
view samples of a SOAP.
I The WebMethod appears
as a hyperlink. After you click Invoke. Simply request the Web Service file — *.

TYPE THIS:
<HTML> <HEAD> </HEAD> <BODY> <FONT FACE ="Verdana"> <H3>Test the Simple Web Service</H3>
7
<FORM ACTION='http://localhost/visualaspdotnet/Chapter07/Code/SimpleWebService.
155
.asmx/SayWelcomeStatement'> <INPUT TYPE="Submit" VALUE="Test"> </FORM> </FONT> </BODY> </HTML>
RESULT: A test page that is very similar to the automatically generated test page for a Web Service.
I The HTTP Post response
appears. The response from the Web Service will remain in the same Web browser window.WORK WITH WEB SERVICES
You can create a custom test page if you have special testing needs.
› Click the Invoke button. The following is a Web page that you can use to create a custom testing page.

USING A PARAMETER WITH A WEB SERVICE
⁄ Open the WebServices Template. Parameters that would be useful in this Web Service request are the customer’s ID and the time frame for requesting goals (the next three months).
‹ Create a WebMethod with
a parameter in the function signature. Creating a Web Service that accepts data for a parameter requires the same steps that it takes to create a Web Service without parameters.
156
. you can use the data passed to the Web Service by referencing it by the parameter name. The only difference is that the test page will include labeled text boxes for each parameter that is specified on the Web Service method.
¤ Rename the class to
ParameterWebService. For example.
› Use the parameter the
caller passes to the WebMethod for formatting the welcome statement. you must specify information on the parameter type and parameter name for each parameter needed to invoke the method. After you do this. a Web Service client can make a request for its goals for the next three months.NET
USING A PARAMETER WITH A WEB SERVICE
F
or most of your Web Services. These parameters give the method context to the Web client’s specific needs from the Web Service. However.aspx template from the Code Templates directory.
in the function declaration for the Web Method. you will want to pass parameters when invoking a Web Service method.ASP. Testing a Web Service method that has parameters is very similar to testing a method without parameters.

This Web Service method will utilize other methods in the Web Service class. else if (stringGoalTimeLength == "YEARLY") stringGoal = YearlyGoal(intRandomNumber).ToUpper(). } public string DailyGoal (int intRandomNumber) { string stringGoal = "Daily Goal". if (stringGoalTimeLength != "DAILY" & stringGoalTimeLength != "YEARLY") stringGoalTimeLength = "DAILY".
° Click the Invoke button. string stringGoal = "".WORK WITH WEB SERVICES
You can create a Web Service method by leveraging other methods in the class that implement the Web Service. } }
7
RESULT: A Web Service that will give a goal based on the time frame provided. // Replace this with random number.
157
.
‡ Fill in your name for the
parameter. TYPE THIS:
public class ParameterWebService_ai : WebService { [WebMethod] public string GetRandomGoal(string stringGoalTimeLength) { stringGoalTimeLength = stringGoalTimeLength. return stringGoal. return stringGoal. The following sample demonstrates this concept in a Web Service class (refer to this book’s CD-ROM for an expanded example).
I The parameterized
welcome message appears. } public string YearlyGoal (int intRandomNumber) { string stringGoal = "Yearly Goals". if (stringGoalTimeLength == "DAILY") stringGoal = DailyGoal(intRandomNumber).
Á Click the WebMethod
to test.
ˇ Save the file and request it
from the Web server. return stringGoal. int intRandomNumber = 1.

the return values will all be of the same data type. Therefore. For example.
‹ Create a WebMethod that
returns a string array. the client can work with the returned array to present the data in the client application. the first member of the array will be accessed with arrayName[0]. you can return arrays from a Web Service. Note that arrays are zero based.ASP. integers.
› Create a string array
variable for holding the goals. and each member in the array will be a child element specified by the name of the data type.
¤ Rename the class to
ArrayWebService.
⁄ Open the WebServices Template. Having the ability to return arrays from a Web Service enables you to pass back to the client a dynamic number of return values. The Web Method must define the array for the return type. and so on. In the Web Method. For example. write the code that populates the array and specifies the return as the newly created array. the return that is an array of strings would generate the following XML:
<ArrayOfString> <string>First string member</string> <string>Second string member</string> <string>Third string member</string> </ArrayOfString>
To return an array from a Web Service. such as strings.
158
.NET
RETURN AN ARRAY FROM A WEB SERVICE
ou can return more complex data types from your Web Services. With arrays.asmx template from the Code Templates directory. When you test the Web Service. you need to first create a Web Service file containing a Web Method.
Y
ArrayOfDataType element. the array is designated by the
RETURN AN ARRAY FROM A WEB SERVICE
With this returned array.

using System.Services. } }
RESULT: An array of goals. Note: Nested string elements are used for the string array.
Á Return the string array. public class ArrayWebService_ai : WebService { [WebMethod] public string[] GetGoals(int intNumberOfGoals) { if (intNumberOfGoals > 3) intNumberOfGoals = 3. if (intNumberOfGoals == 3) stringarrayGoals[2] = "Keep in contact with old friends". the following Web Service creates a string array with either one. The number of goals returned is dependent on the number the client provides.WORK WITH WEB SERVICES
7
You can create a Web Service that returns a string array with a variable number of members based on an input parameter. stringarrayGoals[0] = "Regular exercise at the gym (3 days a week)". For example.
ˇ Read the goals into the
array. or three goals returned based on the number of goals requested. if (intNumberOfGoals < 1) intNumberOfGoals = 1. TYPE THIS:
<%@ WebService Language="C#" Class="ArrayWebService_ai" %> using System. return stringarrayGoals.
Note: The array is zero based.Web. two. if (intNumberOfGoals == 2 | intNumberOfGoals ==3) stringarrayGoals[1] = "A patient better driver".
I The Web Service returns
an array. string[] stringarrayGoals = new string[intNumberOfGoals].
‡ Save the file and test the
Web Service.
Note: The ArrayOfString element is used.
159
.

you can return the Travel member from the GoalType enumeration by using return GoalType.
› Create three enumerated
types.Travel. If you work with the enumeration by name. you need to determine if the client application needs to work with the enumeration by its name or value. After creating the enumeration. you can use the enumeration name as the return type for your Web Method. you need to define the enumeration in the client application to be able to access the value for the enumeration. For example. you can set constant values for each enumeration or let the value for the constant be created automatically.
RETURN AN ENUMERATED TYPE FROM A WEB SERVICE
To create an enumeration. To return an enumeration. If the client application is not aware of the enumeration.ASP.NET
RETURN AN ENUMERATED TYPE FROM A WEB SERVICE
eturning enumerations from a Web Service is useful when you have a set of fixed values for a variable.
¤ Rename the class to
EnumeratedTypeWebService.
R
First you must add the definition of the enumeration into your Web Service file. separated by a period.aspx template from the Code Templates directory. For example.
‹ Create a public enumeration for the GoalType. For client applications that use Web Services with enumerations.
160
. you will pass back the enumeration’s value.
⁄ Open the WebServices Template. you can use the name of the enumeration and the desired member to return. you can define an enumeration to classify the types of goals a user can set in your application.

TYPE THIS:
<%@ WebService Language="C#" Class="EnumeratedTypeWebService_ai" %> using System. public enum GoalType{ Career = 1.
I The GoalType element
and value appear.WORK WITH WEB SERVICES
7
Instead of returning the enumeration by name.Services. using System. when you test this with “Travel” for the goaltypeMember.Web. Educational = 2. Travel = 3 } public class EnumeratedTypeWebService_ai : WebService { [WebMethod] public int GetGoalTypeConstantValue(GoalType goaltypeMember) { return (int) goaltypeMember. you can return the constant value for the enumeration.
ˇ Add a WebMethod that
returns the GoalType enumeration.
161
. the response is 3.
‡ Save the file and test the
Web Service. For example.
Á Return the value for a
specific enumeration. } }
RESULT: This Web Service takes in an enumeration member and returns its constant value.

› Create GoalId. The class declaration defines which members are parts of the class.ASP.
‹ Create a public class for goals.
¤ Rename the class to
ObjectWebService. you can define a Goal class and return a Goal object from your Web Service. and Name properties for a goal. see page 44. Type. You can define your own objects and return objects from a Web Service.aspx template from the Code Templates directory. The client uses the returned object to obtain values it needs by accessing the object’s properties. adding a GoalId property to the class and specifying the data type for the property allows for storage of a Goal Identifier.
You can return an object from a Web Service if the Web Service has access to a class declaration. you can use the name of the class as the return type for the Web Method.
162
.NET
RETURN AN OBJECT FROM A WEB SERVICE
eturning objects from a Web Service enables you to pass very complex return information to the Web Service Client. For example. For more information on working with objects and object properties.
R
repeated for other required members of the class. For example. This would be
RETURN AN OBJECT FROM A WEB SERVICE
⁄ Open the WebServices Template. you create a new object as the object type defined in the Web Service file and then populate the properties of the object. In a Web Method that returns a class. This stateful object can then be passed back to the client. With this class.

° Return the object. break. } public class ObjectWebService_ai : WebService { [WebMethod] public Goal GetTravelGoal(int intGoalId) { Goal goalUser = new Goal(). TYPE THIS:
<%@ WebService Language="C#" Class="ObjectWebService_ai" %> using System.GoalId = 2. The return is a stateful Goal object. } }
RESULT: A Web Service that will return an object that has a state that depends on what is passed into the Web Service Method. goalUser.Name = "Travel to Asia".GoalId = 1.
I The Goal object returns from the Web Service. break. goalUser.
Á Create a new Goal
variable. Type.WORK WITH WEB SERVICES
7
You can determine which instance of an object to return based on an input parameter of the Web Services Method.Web.
163
. public class Goal{ public int GoalId.Type = "Travel". public string Name. goalUser.Type = "Travel". } return goalUser.Services. case 2: goalUser. and Name properties. default: goto case 2. public string Type. using System.
· Save the file and test the
Web Service.
‡ Set the GoalId.Name = "Travel to all seven continents". switch(intGoalId){ case 1: goalUser. goalUser.
ˇ Add a WebMethod that
returns the Goal class.

‹ Add an alias for the
System.asmx template from the CD-ROM. but it gives you a good idea of the possibilities. b) from scratch using the System. c) by loading an existing XML document. Your can build XML: a) from scratch by concatenating strings that represent your XML.
R
variety of sources. you can construct your own XML strings or use the XML framework classes to simplify the construction of the XML.XML namespace.Xml namespace.
› Add a WebMethod that
returns the XmlDocument class.ASP. See pages 146 to 149 for more.NET
RETURN XML FROM A WEB SERVICE
eturning XML from a Web Service is useful when passing hierarchical data back to a Web Service Client.
¤ Rename the class to
XMLWebService.
To return XML from a Web Service.
164
. The XML that is built in the Web Service Method can originate from a
RETURN XML FROM A WEB SERVICE
⁄ Open the WebServices Template. This is not an exhaustive list of XML sources. or e) by using Microsoft’s SQL Server’s XML query engine. you can build a list of goals along with any important attributes of those goals in an XML document and return this XML from your Web Service. For example. d) by transforming an XML document with an XSLT document into a new XML document. you need to build XML in the Web Service Method. When passing back XML.

the Web Service below returns all Goals in the goals.
I The XmlDocument
returns from the Web Service.
‡ Return the XmlDocument
variable. } }
RESULT: A Web Service that returns an XML document from the Web server that contains a list of goals.Services. xmldocumentGoals. public class XMLWebService_ai : WebService { [WebMethod] public XmlDocument GetAllGoals(){ XmlDocument xmldocumentGoals = new XmlDocument().WORK WITH WEB SERVICES
7
You can load an external XML document using the System.
165
.Xml. Notice the use of the Server.Web. using System.xml")).
° Save the file and test the
Web Service. using System.xml document.MapPath("goals.
Á Load an XML string into
the XmlDocument.MapPath function that returns the location of the file on the server.
ˇ Create a new
XmlDocument variable.Load(Server. return xmldocumentGoals. For example.XML namespace. TYPE THIS:
<%@ WebService Language="C#" Class="XMLWebService_ai" %> using System.

NET
RETURN SQL DATA FROM A WEB SERVICE
H
aving the ability to access databases from a Web Service enables you to build applications that require data from various sources. primary keys).Data and System.ASP. if you want access to other SQL data stores.asmx template from the Code Templates directory. You can then create a Web Method that will return a DataSet object. When creating Web Services that access data.
‹ Add an alias for the
System.Data.SqlClient namespaces. and return the data that was retrieved.Data and the SQL. Originating data from a SQL data store is one way to provide interoperability between applications. The SQL data can be central data storage for any application that can connect and issue commands against the SQL data store.
⁄ Open the WebServices Template.
ˇ Create a new
SqlConnection object to connect to the database and initialize the connection with the connection string to connect to the Pubs database.Data. In the Web Method. This shared data is one way to enable applications to interact with each other.
› Add a WebMethod that
returns the DataSet class. see page 126. The first is to add the SQL.
166
.OleDb namespace. you need to also consider what parameters you need to return the data (for example. The SQL. you can reference the SQL.Data. ¤ Rename the class to
SQLDataWebService.SQLClient aliases so you can work with the objects in those
RETURN SQL DATA FROM A WEB SERVICE
namespaces. To learn more about working with data access. retrieve the data using a SQL statement.Data. There are a number of steps that you have to take to provide SQL Data from your Web Service.SQLClient is optimized to Microsoft SQL Server databases. you create a connection to the database.

public class SQLDataWebService_ai { [WebMethod] public DataSet GetTitles(string stringTitleType) { stringTitleType = stringTitleType.Data.
167
. notes. price " + "from titles where type='" + stringTitleType + "'".SqlClient.Data. ° Fill the DataSet object
using the SqlDataAdapter object. sqlconnectionPubs).WORK WITH WEB SERVICES
The task returned the business titles as a Web Service. You can also provide a Web Service that takes in the type of book and returns the SQL data for that type of book. string stringSQLStatement = "select title.Services. SqlConnection sqlconnectionPubs = new SqlConnection ("server=(local)\\NetSDK. using System. using System.ToLower().pwd=QSPassword.uid=QSUser. } }
7
RESULT: This produces a Web Service that returns a DataSet for the type of title requested.Web.
‚ Save the file and test the
Web Service. SqlDataAdapter sqldataadapterTitles = new SqlDataAdapter (stringSQLStatement. using System.
I The SQL data returns from
the Web Service. DataSet datasetTitles = new DataSet().
‡ Create a DataSet object. TYPE THIS:
<%@ WebService Language="C#" Class="SQLDataWebService_ai" %> using System.
I Note the SQL data in the
· Return the DataSet
object. sqldataadapterTitles.
Á Create a new
SqlDataAdapter variable that uses the SqlConnection object and a SQL string for retrieving business titles. return datasetTitles. "Titles")." + "database=pubs"). if (stringTitleType != "trad_cook" & stringTitleType != "mod_cook" & stringTitleType != "business") stringTitleType = "business". response.Fill(datasetTitles.

You can use New session when the user does not have an existing valid session. Existing Session. you need to specify that Session is enabled. After enabling the session.
› Add an if statement to initialize the Session variable. You can use Existing Session on subsequent requests to update or access Session variables.asmx template from the Code Templates directory.
168
. WebMethods do not have Session enabled. You do this by adding (EnableSession = true) just after WebMethod. You will need to perform any cleanup necessary that is associated with the Session object.
W
You can use Session to track state from page to page requests for a particular user. see page 226.
‹ Add a WebMethod that
returns a string variable with the Session state enabled. and Abandoned Session.ASP. When you declare the Web Method that uses Session.
¤ Rename the class to
SessionWebService. You can work with the Session object in different states such as New Session. New session enables you to initialize the Session object by setting any Session variables to any initial value.NET
WORK WITH THE SESSION OBJECT IN A WEB SERVICE
orking with the Session object in a Web Service gives your Web Services the capability to have variables that can be used across different requests to Web Services during the same user session. You can use Abandoned Session when the Session times out or you abandon the session. you can access the Session object. By default.
WORK WITH THE SESSION OBJECT IN A WEB SERVICE
⁄ Open the WebServices Template.
The process for using the Session object is simple. For more information on working with the Session object.

ToString().
° Refresh the Web page. you can retain state across requests to a Web Service. string stringCurrentName = "". } }
RESULT: This produces a Web Service that returns information on the current request and preceding request.WORK WITH WEB SERVICES
7
With the session Web Service.".
169
. using System.
I The Web Service returns a
message about the number of times the service has been accessed. TYPE THIS:
<%@ WebService Language="C#" Class="SessionWebService_ai" %> using System.
‡ Save the file and test the
Web Service. if (Session["sessionName"] == null) { stringPreviousName = "Null". public class SessionWebService_ai : WebService { [ WebMethod(EnableSession=true) ] public String RememberName(string stringName) { string stringPreviousName = "". } else { stringPreviousName = Session["sessionName"].
Á Return a formatted
message to the user using the Session variable. I The number of times the
service has been accessed is incremented. return "The previous value for the session variable was " + stringPreviousName + ".Services. } Session["sessionName"] = stringName. The new value for the session variable is " + stringCurrentName + ".
ˇ Add an else statement to increment the Session variable by one. stringCurrentName = stringName.Web.

working with the Application object is similar to working with the Session object.
¤ Rename the class to
ApplicationWebService. You want to be aware that all issues associated with the Application object are applicable when using the Application object in Web Services.ASP. To learn more about working with the Application object.
The Application object does not require Session to be enabled. In many ways. For example.
‹ Add a WebMethod that
returns a string variable with the Session state disabled. Application data is available in your ASP. You also have the ability to clean up objects or other memory when the Application shuts down.NET
WORK WITH THE APPLICATION OBJECT IN A WEB SERVICE
Y
ou can work with the Application object in a Web Service to enable your Web Services to use variables across all requests to Web Services.NET applications. you need to lock Application variables to ensure the serial access to Application variables.
WORK WITH THE APPLICATION OBJECT IN A WEB SERVICE
⁄ Open the WebServices Template. so you can either leave the Web Method definition as the default or add the EnableSession=false statement to explicitly disable Session.
170
.
› Add an if statement to initialize the Application variable. You can access or update Application variables each time a page is requested. You have the ability to initialize Application variables when the Application object is accessed and there
is not an existing Application object. see page 222.aspx template from the Code Templates directory.

WORK WITH WEB SERVICES
7
To prevent corruption of your Application variables. Note that the updating of the Application variable. it is a good idea to lock the Application variable before you update it. using System. is locked during the update. TYPE THIS:
<%@ WebService Language="C#" Class="ApplicationWebService_ai" %> using System. } return "This service has been accessed " + Application["applicationHitCounter"]. public class ApplicationWebService_ai : WebService { [ WebMethod(EnableSession=false)] public String UpdateAppCounter() { if (Application["applicationHitCounter"] == null) { Application.Lock().Services.Lock().Web. which keeps track of the count.ToString() + " times. Application["applicationHitCounter"] = ((int) Application["applicationHitCounter"]) + 1.".
° Refresh the Web page.
‡ Save the file and test the
Web Service. } else { Application.UnLock(). Application. Application.
171
.
I The Web Service returns a
message about the number of times the service has been accessed. I The number of times the
service has been accessed is incremented.UnLock().
ˇ Add an else statement to increment the Application variable by one.
Á Return a formatted
message to the user using the Application variable. } }
RESULT: This produces a Web Service that returns the current hit count of a Web Service. Application["applicationHitCounter"] = 1.

ASP.
T
class for the Web Class.NET object. The first is to create a service definition file.
‹ Run the wsdl command to create a proxy class for the Web Service. This will create a service definition file.
. The result of running this command is a proxy class that you now need to compile to the bin directory as a library.
ˇ Open
GenericTemplate.
¤ Change directories to
where the Web Service is located.
Á Add a form to the page. After you create an instance. › Compile the proxy class to
the /bin directory. you need to create your own client to call Web Services.aspx from the Code Templates directory.
You need to walk through a couple of steps to enable a Client Web Page. ASP.NET
CREATE A CLIENT WEB PAGE FOR A WEB SERVICE
o consume a Web Service. For your custom applications.NET framework creates clients for you automatically if you access the Web Service file (*. you can call methods from the Web Service.
I The proxy class is created
172
and compiled. This can be created using the disco command and passing the URL to the Web Service. You can use the csc command to compile the class. On the client Web page. You then need to use this service definition file to create a proxy
CREATE A CLIENT WEB PAGE FOR A WEB SERVICE
⁄ Open the command
prompt. you can then import the namespace of the Web Service into the Web Page that will consume the Web Service. You use the wsdl command to pass the service definition file name to it.asmx) directly. you can create Web Service Clients. you create an instance of the Web Service just like any other . ‡ Add a Label control to the form. After you compile the class.

}}
RESULT: A Web page displays the greeting.Text). you need to run the ClientWebService_ai.Text = stringMessage. EventArgs E){ if (!Page. If you submit the page with your name.SayWelcomeStatement().Text = stringMessage.
— Update the Label control
with the result. it will call a different Web Service that customizes greeting with your name in it. labelMessage.
‚ Set the result of calling the
SayWelcomingMessage from the SimpleWebService into a string variable. TYPE THIS (IN THE SERVER SCRIPT BLOCK):
protected void Page_Load(Object Src.
I A welcome message from
the Web Service appears.IsPostBack){ SimpleWebService simplewebserviceMessage = new SimpleWebService().
173
.
· Create a new instance of
SimpleWebService.bat that creates and compiles the proxy classes for this code.
° Add the Page_Load
function to the page.
± Save the file and request it
from the Web server. string stringMessage = simplewebserviceMessage. To run this code.SayWelcomeStatement(textboxName. labelMessage.WORK WITH WEB SERVICES
7
You can also pass data to a Web Service from a control on a form on a Web page.} else{ ParameterWebService parameterwebserviceMessage = new ParameterWebService(). string stringMessage = parameterwebserviceMessage.

Accessing a Web service from a console application requires many of the same steps as accessing it from a Web page. You then need to use this service definition file to create a proxy class for the Web Class.
° Format and write the
result to the command line.
‹ Create a new class. › Create the Main function. You can use the wsdl command to pass
CREATE A CLIENT CONSOLE APPLICATION FOR A WEB SERVICE
⁄ Open a new document in
your text editor.
174
. you can call methods from the Web Service and display results to the console.NET
CREATE A CLIENT CONSOLE APPLICATION FOR A WEB SERVICE
ou can use a Console Application as a test harness for a Web Service.ASP.
¤ Import the System namespace. Within the Console Application.
‡ Set the result of calling the
UpdateApplication Counter from the ApplicationWebService into an integer variable. The first step is to create a service definition file by using the disco command and passing the URL to the Web Service. After you have created an instance. you can then import the namespace of the Web Service into the Console Application that will consume the Web Service. After you have compiled the class.
Y
the service definition file name to it. The result of running this command is a proxy class that you now need to compile to the bin directory as a library.
ˇ Create an integer variable
in the Main function. ASP. This will create a service definition file. You can use the csc command to compile the class. you can create an instance of the Web Service.
Á Create a new instance of
ApplicationWebService.NET Web Services can be easily consumed by WinForm Applications or Console Applications.

‚ Change directories to
where the Web Service is located. } } }
RESULT:
C:\>ConsoleWebService_ai. class ConsoleWebService{ public static void Main(string[] args) { int intInitialize = Convert.
¡ Run the created
executable a couple of times. Console.exe 10
This service has been accessed 10 time(s). UpdateApplicationCounter(intInitialize).ToInt32(args[0]).
I A message from the Web
Service appears about the number of times the Web Service has been accessed. if (intInitialize >= 0) { ApplicationWebService_ai applicationwebserviceCounter = new ApplicationWebService_ai().WriteLine(strHitCountMessage).bat that creates and compiles a proxy class and Web Service Client for this code.
· Open the command
prompt.
— Run the wsdl command to create a proxy class for the Web Service. string strHitCountMessage = applicationwebserviceCounter.bat C:\ >ApplicationWebService_ai. you need to run the ConsoleWebService_ai.
175
. To run this code.WORK WITH WEB SERVICES
7
You can also pass data to the Web Service from the Console Application via a command line parameter. TYPE THIS:
using System.
I The proxy class is created
and compiled and the console application is compiled.
± Compile the console class
and the Web Service.

After you have done this.
176
.
‹ Add an alias to the
System namespace. In your C# source file.
The process for creating a simple component starts with creating a C# source file.
¤ Create a new namespace. you need to add functions to hold your business logic.ASP.
› Create a public class. Note as
CREATE A SIMPLE COMPONENT
⁄ Open a new document in
your text editor.
Note: In this example. You use this compiler to create a DLL with your source code. you can create an instance of the class created and call functions in that class. you need to place the compiled DLL in the /bin directory of the Web site.
ˇ Create a public function that returns a string variable. Á Return a message to the
caller.NET compliant language to create your reusable components. You can create managed classes in C# or any other . that returns the same string message to any caller. When you finish creating the code. To reference the component. the file is being saved to the default Web site location at C:\InetPub\wwwroot.
C
well that you create an alias to the System namespace in the C# source file.NET
CREATE A SIMPLE COMPONENT
omponents enable you to encapsulate business logic that can be reused across several applications. called SayWelcomeStatement. you need to compile the program using the csc command at the command prompt. In this source file you first declare the namespace for the classes contained in the source file.
‡ Save the file. in the simple component example you have a function. you need to import the namespace that you specified in the source file. To use the component on Web pages in your site. For instance.

Using aliases can help reduce the length of your code. SimpleComponent.
177
. SimpleComponent) while at the command prompt. Open this file with a text editor and find the following source: csc /t:library /out:bin\SimpleComponent.
¡ Use the csc command to compile the class at the command prompt.cs. xsl. the C# components for this chapter all come with batch files on the CD-ROM that have the csc commands for compiling the component.
· Type cmd in the Open field.
Example:
Using Transformer = system. Look in the Code directory for this chapter and find a batch file with the same name as the component you create in the task (for example.xml.
cmd
Run. You can use these batch files by simply typing in the name of the component (for example.
8
Batch files are very useful to take care of repetitive tasks like compiling a component. making it easier to read. Note: You must navigate to the directory where the batch file and the component source code are located.xsltransform.
° Click Start ➪ Run to open the dialog box. For example.CREATE CUSTOM COMPONENTS
Aliases enable you to reference classes without full qualification of the class. .dll SimpleComponent.
— Change directories to
where you saved the source file by using the cd command.
CONTINUED
± Create a /bin directory
for your compiled libraries.bat is used to create SimpleComponent). . Aliases are set by placing the using keyword before a namespace.
Note: See page 34 for instructions on compiling. ‚ Click OK to open the
command prompt.

178
. and use components. Using private assemblies for your components makes it very simple to deploy ASP. you put yourself in a better situation for addressing application development challenges. you need to decide if the component is part of a private assembly or a global assembly. If the component is registered in the global assembly.
§ Create a new string
variable and read the result of SayWelcomeStatement into that string.ASP.
£ Import the
SimpleComponent namespace. In many cases. stability. If you put your business logic and data access into components.aspx template from the Code Templates directory.NET with managed code. performance. then you do not have the ability to just xcopy the files for moving a Web site. This is the simplest way to create.
¶ Set the label on the
page equal to what was returned from SayWelcomeStatement. You will also need to incorporate a registration process for your global assemblies. Global assemblies entail more detail.
C
putting the compiled DLL in the /bin directory of your Web site. manage.NET applications.
In terms of reusability. All you need to do is xcopy the files to a Web server. you put components into private assemblies. ª Add a label to the server
form. scalability.
∞ Create a new variable of
type SimpleComponent. No special registration process is needed for a private assembly. or reusability. reusable architectures.NET
CREATE A SIMPLE COMPONENT
omponents enable you to create distributed.
¢ Add the Page_Load
function. This is required to register a global assembly. The challenges can be issues with security. except for
CREATE A SIMPLE COMPONENT (CONTINUED)
™ Open the
GenericTemplate.
• Add a server form. when you create components in . A global assembly needs to be put in the Global Assembly Cache (GAC).

There are pros and cons to either choice.
º Save the file and request it
from the Web server. Private assemblies support the xcopy deployment. The main benefit for choosing private assemblies is the ease of use. you will need to create a global assembly. you need to decide on whether you want the assembly to be private or global. When creating an assembly. which is not available for COM components. Typically.NET applications you will create private assemblies and put them into the /bin directory of your Web site. You should share assemblies by installing them into the global assembly cache only when you need to. activation scoping.NET components. and security permissions. Each computer where the common language runtime is installed has a machine-wide code cache called the global assembly cache.
179
.CREATE CUSTOM COMPONENTS
8
You can package up multiple components into deployable units called assemblies. version control.
To support some of the advanced features of . like sharing a component across multiple applications. especially with deployment. Assemblies are how the .
I A welcome message
appears. for ASP. reuse.NET Framework manages components for: deployment.

the process for creating a stateful component starts with creating a C# source file. You first declare the namespace and then add any aliases that you need. Á Initialize the private
string variable when an instance of the class is created. you need to compile the program using the csc command at the command prompt. The state can be provided by setting properties on the class programmatically on your Web page or state can be set in the initialization of the class. if you want to
CREATE A STATEFUL COMPONENT
build strings.NET
CREATE A STATEFUL COMPONENT
F
or most cases. your applications only use components that do not hold any state between calls to the component (stateless components). then you will want to have attributes on your classes to hold this state. If you have an application that makes multiple calls to a component and these calls rely on common state. Finally. After you finish creating the code to create the property. To create a property for the class.
› Create a public class. Next.
ˇ Create a private string variable for holding state.
180
.ASP. you will want to add some code for initializing the variable when the class is created. you need to create the Web page that uses this component. you first create a private variable. you can add an alias for the System. For example.Text namespace.
‹ Add an alias to the
System and System. ° Add a function that
returns a string.Text namespace to get access to the StringBuilder class.
‡ Add a public string variable that has a method to read the value of the private string variable and a method to write to the private string variable. Like a simple component.
¤ Create a new namespace.
⁄ Open a new document in
your text editor. you will need to create a public variable that will be used to read and write to the private variable. Then.

Text = stringMessage.
‚ Use an if statement to customize the message to the user if the Name property is set. ± Return the
StringBuilder variable.
™ Compile the component
using the csc command. } } </SCRIPT></HEAD> <BODY> <FONT FACE ="Verdana"><FORM RUNAT="Server"> <H3><ASP:LABEL ID="labelMessage" RUNAT="Server" /></H3> <P/><ASP:TEXTBOX ID="textboxName" TEXT="Type your name here. labelMessage.Text = stringMessage.Name = textboxName. string stringMessage = statefulcomponentMessage. } else{ StatefulComponent statefulcomponentMessage = new StatefulComponent().
CONTINUED
181
.
¡ Go to the command
prompt.
— Use an else statement to handle the case where the Name property has not been set. string stringMessage = statefulcomponentMessage. TYPE THIS:
<%@ Import Namespace="StatefulComponent" %> <HTML> <HEAD><SCRIPT LANGUAGE="C#" RUNAT="Server"> public void Page_Load(Object sender.CREATE CUSTOM COMPONENTS
You can create a Web page containing a form used for updating the Name property of the stateful component.Text.SayWelcomeStatement(). EventArgs E){ if (!Page. labelMessage.SayWelcomeStatement()." RUNAT="Server" WIDTH="300px"/><P/> <ASP:BUTTON ID="buttonPersonalize" RUNAT="Server" TEXT="Personalize"/> </FORM></FONT></BODY></HTML>
8
RESULT: A Web page allows you to put your name in a text box that is used to give you a personal greeting when the form is posted back to the server. statefulcomponentMessage.
· Create a
StringBuilder variable and initialize with a message.IsPostBack){ StatefulComponent statefulcomponentMessage = new StatefulComponent().

When the request is done.NET
CREATE A STATEFUL COMPONENT
ou need to be cautious when using stateful components on a Web page. You need to understand that Web applications are by default a stateless model.
• Create a new string
variable and read the result of SayWelcomeStatement into that string.
§ Create a new variable of
type StatefulComponent.
182
. The . There are mechanisms built into the .
¢ Import the
StatefulComponent namespace. the state will only be available during the lifetime of the user’s request of the resource (Web page or Web Service).NET Framework’s garbage collector manages the allocation and release of memory for your application. the
components used in the Web page or Web Service are released to .NET framework to enable you to manage state across pages in a site. See page 210 for details on state management. The Session object is one common mechanism that is available to you. you do not put state that needs to be held across pages in the standard components used by your Web application.ASP. This is one of the toughest programming challenges when moving from Win32 applications to Web applications on the Windows platform. Because this is how the Web server operates.
Y
When a component is created for a Web page or Web Service.
¶ Set the Name property for the StatefulComponent.NET’s garbage collection.aspx template from the Code Templates directory.
∞ Add the Page_Load
function.
CREATE A STATEFUL COMPONENT (CONTINUED)
£ Open the
GenericTemplate.

public Goal() { m_strDescription = null. public class Goal { private String m_strDescription. You can also control the assignment of properties with validation code. – Add a label to the server
form.CREATE CUSTOM COMPONENTS
You can control your stateful components that persist data with fields and properties by initializing them with object constructors.Length < 30) m_strDescription = value.
I A welcome message
appears that displays the value set for the Name property. } } }
8
ª Set the label on the page
equal to what was returned from SayWelcomeStatement. } set { if (value.
Example:
using System.
≠ Save the file and request it
from the Web server.
º Add a server form.
183
. } public String Name { get { return m_strDescription.

ASP. System. See page 126 for
CREATE A DATA LAYER
⁄ Open a new document in
your text editor. ˇ Create a
private string variable for holding state. This can be done with SQL Select statements or stored procedures. This separation is useful if you want to have the flexibility of changing the database or data access without having to rewrite your presentation code and HTML.NET (.
Y
detail on how to program with ADO.
¤ Create a new namespace. you need to add functions to retrieve data from the data source. you can compile it to the /bin directory as a library and use it on a Web page. When you are done creating the component.
Á Initialize the
private string variable when an instance of the class is created. To create a data access layer.Data. which work with the private variable.
° Add a function that
returns a string. you add code related to connecting to your data source.NET
CREATE A TWO-TIER WEB FORM
ou can abstract your data access from your Web page by putting the data access code into a component.SqlClient namespaces. and System.
‡ Add a public string
variable that has a method to read the value of its variable and a method to write to the private string variable.Data.NET framework classes that are used for data access).
The first step to creating a Web Application that is split into two tiers is to create a Data Access Layer.
› Create a public class. In this source file. start by creating a C# source file.
184
. After you have a connection to the database.
· Add the Get and Set functions for the public string. ‹ Add an alias to the
System. This gives you separation between presentation and data.

SqlDataAdapter sqldataadapterTitles = new SqlDataAdapter ("select title. } public DataView GetTitlesForType(string stringTitleType) { SqlConnection sqlconnectionPubs = new SqlConnection(_stringConnection). The connection string is used to construct the class.
£ Go to the command
prompt.
¢ Compile the component
using the csc command.Tables["Titles"]. using System. sqldataadapterTitles. } } }
8
‚ Create a function that
returns a DataView.CREATE CUSTOM COMPONENTS
You can create a function in the data layer that takes the title type as a parameter.
± Create a
SQLDataAdapter variable that uses the connection to get all business titles. DataSet datasetTitles = new DataSet(). notes. ™ Return the default view
from the DataSet.
CONTINUED
185
. return datasetTitles. public DataObject(String connStr){ _stringConnection = connStr. The following code shows you how to do this.Data.Data. price from" " titles where type='" + stringTitleType + "'". using System. sqlconnectionPubs). public class DataObject { private string _stringConnection.
— Create a
SqlConnection that uses the stringConnection property. "Titles").
¡ Create a DataSet and fill with the data retrieved with the SQLDataAdapter.
Example:
namespace DataLayer_ex { using System.Fill(datasetTitles.SqlClient.DefaultView.

ª Add an ItemTemplate to the page to describe the output for each item in the result set. You can use the Page_Load function to do this.aspx template from the Code Templates directory. See page 130 for more information on working with the DataList control.
¶ Add a server form to the
page.
• Add a DataList to the page to display the results. Next. Two-tiered Web applications allow for your Web application code to be in separate files. you can place a Server form containing controls on the page to display the data. One way to display data is using a DataList control. you can create the code to populate the control. which makes it beneficial if you want to divide work based on developers’ skill sets.
CREATE A TWO-TIER WEB FORM
∞ Open the
GenericTemplate. Having separate files yields fewer problems with source control and allows for parallel development efforts.NET
CREATE A TWO-TIER WEB FORM
he skill set for a developer that creates presentation layer code and layout is different than for a developer who writes data access code. This is done using the @Import directive at the top of the page. two people can work on the same part of the site together by having separate files for presentation and data. After you have specified what to show in the DataList.
§ Import the DataLayer
namespace.ASP.
186
. That is.NET for accessing data access components need to import the namespace for the data access component.
T
The Web Forms you create in ASP.

ToString().aspx on the CD-ROM.database=pubs").
≠ Set the DataSource of
the DataList on the Web page to the function in the data access Layer that returns the business titles.
I The title.ToLower().uid=QSUser.Text = dropdownlistTitleTypes. datalistTitles.
‘ Bind the DataList. labelTitleType. EventArgs E) { DataObject dataobjectPubs = new DataObject("server=(local)\\NetSDK.SelectedItem. see TwoTierWebForm_ai.bat to have this sample run. EventArgs E) { if (!IsPostBack) { DataObject dataobjectPubs = new DataObject("server=(local) \\NetSDK.CREATE CUSTOM COMPONENTS
You can create a Web page that retrieves different types of titles based on user input by putting the following code into a server-side script block.pwd=QSPassword. } } public void Submit_Click(Object sender.GetTitlesForType("business").
appear for the business titles from the pubs database using the data layer.
“ Save the file and request it
from the Web server.
º Add the Page_Load
function to the page. notes. You need to compile DataObject_ai. datalistTitles. uid=QSUser.Text = "business".Text.pwd=QSPassword. labelTitleType. TYPE THIS:
public void Page_Load(Object sender.ToString()).Value. datalistTitles.GetTitlesForType (dropdownlistTitleTypes.DataBind(). }
8
RESULT: A data-bound list displays a list of books that are dependent on which title type is chosen by the user.DataSource = dataobjectPubs.DataSource = dataobjectPubs.database=pubs").DataBind().
187
.SelectedItem. To see the full source code for this example.cs with DataObject_ai. and price
– Create a new instance of
the DataObject class and set the connection string. datalistTitles.

‹ Add an alias to the
System. all of the code related to business logic into another component.
¤ Create a new namespace. These business tier components enable you to automate business processes that your company uses. With Web applications. and Presentation. In this component. System.NET
CREATE A THREE-TIER WEB FORM
A
business tier enables you to encapsulate business rules or logic into components.Data. the Business Layer will be implemented as a C# component. System.
CREATE A BUSINESS LAYER
⁄ Open a new document in
your text editor. you need to compile the business component to the /bin directory as a library.
ˇ Create a private
DataObject class from the DataLayer namespace.
Á Add the code to initialize
the BusinessObject connection string. you can set the connection string when the class is
created. and all of the code for the user interface in the Web page. This allows you to consolidate all data access code into one component. Using a business component on a Web page is the same as using a data access component.
› Create a public class.ASP.Data. Now that you have put a Business Layer between your Data Access Layer and your Web Page. Business. After all the code necessary for mimicking your business process is put in place. you can change the Presentation Layer without having to rewrite business logic or data access code. 188
. and the DataLayer namespaces. Like the Data Access Layer.SqlClient. you can break your code out into three tiers—Data. You then need to add a function that will call the Data Access Layer to retrieve the data necessary to apply the business logic.

pwd=QSPassword. } public DataView GetBusinessTitles() { return dataobjectPubs. public class BusinessObject { private DataObject dataobjectPubs. using System.Data.GetBusinessTitles(stringTitleType). public BusinessObject() { dataobjectPubs = new DataObject("server=(local)\\NetSDK.database=pubs"). TYPE THIS:
namespace BusinessLayer_ai { using System.SqlClient. } public DataView GetTitlesForType(string stringTitleType) { return dataobjectPubs. using System.
‡ Add the function that calls
GetBusinessTitles from the Data Layer.
° Go to the command
prompt.CREATE CUSTOM COMPONENTS
8
You can extend the Business Layer by adding the GetTitlesForType function. } } }
RESULT: A business layer that is between the user interface layer and the data access layer. using DataLayer_ex.
· Compile the component
using the csc command. This Business Layer uses the Extra Data Access Layer.Data.GetBusinessTitles().
CONTINUED
189
.uid=QSUser.

190
.aspx template from the Code Templates directory. If you are pulling data back from your business component. This gives you the flexibility of having multiple user interfaces for your application without having to rewrite business and data access code. One way to display data is using a DataList control.
± Add a server form to the
page.
To write code that uses your business component.
¡ Add a DataList to the
page to display the results. See page 130 for more information on working with the DataList control.
CREATE A THREE-TIER WEB FORM
‚ Open the
GenericTemplate.NET
CREATE A THREE-TIER WEB FORM
I
mplementing a Business Layer into a tiered application allows for clean separation between business logic and the user interface.
™ Add an ItemTemplate to the page to describe the output for each item in the result set. you need to import the namespace for the business component.ASP. After you have specified what to show in the DataList. you can place a Server form on the page with a control to display the data. you can then create the code to populate the control. Sometimes these practices need to ensure that you interact with the database without compromising data integrity. This is done using the @Import directive at the top of the page. The business layer is a critical part of your application and is where you need to truly understand the rules that enforce good business practices. The business layer is traditionally the location for where transactional code is placed to ensure integrity of your data stores.
— Import the
BusinessLayer namespace. You can use the Page_Load function to do this. This can be done with transactional code.

£ Add the Page_Load
function to the page. }
8
RESULT: A data bound list that displays a list of books that are dependent on which title type is chosen by the user.cs to the /bin directory as a library (using the DataObject_ai. " + "pwd=QSPassword.GetTitlesForType (dropdownlistTitleTypes.Value. you need to compile DataObject_ai. Then place the following code into a server-side script block. respectively). notes. " + "pwd=QSPassword. datalistBusinessTitles.
∞ Set the DataSource of
the DataList on the Web page to the function in the Data Access Layer that returns the business titles. To see the full source code for this example. EventArgs E) { BusinessObject businessobjectPubs = new BusinessObject("server=(local)\\NetSDK. datalistTitles.aspx on the CD-ROM.ToString()).bat and BusinessObject_ai. datalistBusinessTitles. and price
¢ Create a new instance of
the DataObject class and set the connection string.ToString(). labelTitleType.cs and BusinessObject_ai.DataSource = businessobjectPubs.Text = "business".DataBind().uid=QSUser. To run this sample. datalistTitles. see ThreeTierWebForm_ai.database=pubs").
I The title.CREATE CUSTOM COMPONENTS
You can use a business layer to control access to data. EventArgs E) { if (!IsPostBack) { BusinessObject businessobjectPubs = new BusinessObject("server=(local)\\NetSDK. 191
.
appear for the business titles from the pubs database using the business and data layers.SelectedItem. labelTitleType.Text.database=pubs"). } } public void Submit_Click(Object sender.
§ Bind the DataList.ToLower.SelectedItem.DataSource = businessobjectPubs.Text = dropdownlistTitleTypes.GetBusinessTitles().
¶ Save the file and request it
from the Web server.uid=QSUser.DataBind(). TYPE THIS:
public void Page_Load(Object sender.bat batch files.

‡ Cut the Page_Load event
handler from the file.
ˇ Open the
ThreeTierWebForm. The next attribute. All the code in the Code-behind is server-side code that may require round trips to the Web server. For example.
Y
use to specify the class which you want to use in your Code-behind.NET page. To avoid this.NET PAGE
ou can store your code in a separate file.Web Controls. System. and System. System.ASP.
Á Add a Page directive at
the top of the page and an Inherits attribute with a value of the class name and a Src attribute with the value of the filename.
To utilize a Code-behind in your ASP.0.
192
. which allows for you to clearly separate the code from presentation.
° Save the file as the class
name to the Default Web site. you need to use client-side code in the Web form. you add two attributes to the page directive. One of the attributes is the Inherits attribute. specifies the location of the file that contains the Code-behind code.UI. which you can
USE A CODE-BEHIND FOR YOUR ASP. In the Code-behind file.NET PAGE
⁄ Open your text editor. This is a big advantage in the ASP. ¤ Create an alias to the
BusinessLayer.NET framework and was not available in ASP 3.
‹ Create a public class of type Page. In ASP 3.Web.NET
USE A CODE-BEHIND FOR YOUR ASP. called a Code-behind. a common event handler is the Page_Load event. you can implement event handlers as if they were on the page that uses the Code-behind.Web. your server-side code had to be inline with your HTML (on the same page).aspx template from the Code Templates directory. the Src attribute. › Create a public variable of type DataList. This enables people with Web design skills to work on pages separately from the Web programmers.0.UI.

Web.CREATE CUSTOM COMPONENTS
8
You can use an event handler fired from a control as well.
I The title.cs" %>
RESULT: The Web page calls the Codebehind when the button is clicked. The first section of code is to associate the Code-behind page with the aspx page.UI. System.". and price
appear for the business titles from the pubs database using the business and data layers in a Code-behind.WebControls.
public class CodeBehind_ai : Page { public Label labelMessage.
‚ Save the file and request it
from the Web server. This code example calls the Button_OnClick event handler on the Code-behind page..{ labelMessage. TYPE THIS AT THE TOP OF THE WEB FORM:
<%@ Page Inherits="CodeBehind_ai" Src="CodeBehind_ai..
193
.Web. System.UI. notes. EventArgs e)". The second section of code goes into the Code-behind page. } }
· Paste the Page_Load
event handler into the CodeBehind page. System. public void Button_OnClick(object Source.
TYPE THIS IN THE CODE-BEHIND PAGE:
using using using using BusinessLayer. this goes at the top of the aspx page.Text="You are going to Step 2.

ASP.NET

READ FORM DATA WITH REQUEST.FORM
he HTTPRequest object enables you to read the HTTP values sent by a user during a Web request. This way of working with user input is how you typically access user input with ASP 3.0, giving you a backward compatibility. There is no true backward compatibility using C# as the language; but if you are using VB, it is compatible.

T

value of this control, you can use Request. Form["dropdownlistSuggestions"]. The configuration of your HTML form determines if you use the Form or QueryString to retrieve form data. The HTML form has a METHOD attribute. If this attribute is set to POST, then you need to use Request.Form to obtain user input from the HTML form. If set to METHOD="GET", then you need to use Request.QueryString. Both of the properties on the Request object (Form and QueryString) contain a NameValueCollection collection class. The NameValueCollection class represents a sorted collection of associated String keys and String values that can be accessed either with the key or index.

You can use Request.Form and Request. QueryString methods to read data that is submitted from another Web page. In order to specify which control you want to access, you need to know the control’s name or ID. For example, you can use the drop-down list box in the task that has an ID of dropdownlistSuggestions. To read the

READ FORM DATA WITH REQUEST.FORM

⁄ Open the
GenericTemplate.aspx template from the Code Templates directory.

‹ Add a message to
the user.

ˇ Place a drop-down list box
on the page with suggestions for choosing the suggested number of goals.

RESULT: A Web page that, when a selection is made and the form is submitted, places the form values into the query string.

° Add the Page_Load
function.

‚ Add the Request.Form
method to retrieve the value that was selected in the drop-down list box.

— Save the file and request it
from the Web server.

¡ Click the Submit button.
I The suggestion you chose
appears.

· Add an if statement to
make sure that the code will only run when posting to the page.

± Click
suggestion.

and select a

195

ASP.NET

DISPLAY DATA WITH REQUEST.PARAMS
ou can use the Request object’s Params method to obtain a combined collection of QueryString, Form, ServerVariables, and Cookies items. This will give you most of the data that is in a Web request. Before ASP.NET, this combined collection of the QueryString, Form, ServerVariables, and Cookies items was the default collection of the Request object. This information is still available directly from the Request object, but to be more explicit, you can access through Params.

Y

can pull form data from an HTML form on a simple html page. To do this, you will need to have the HTML form post to the Web page that will process the HTTP request. On this processing page you can use the Request.Params collection to obtain any form data. If you are not sure of the requesting page’s form method, then the Params collection is very useful. The method you use determines if the form data is available in the Form collection (METHOD="POST") or the QueryString collection (METHOD="GET"). Because the Params collection has both of these collections combined, you can just pull the value from Params.

You can pull request information from any page that requests a Web page and allows server-side code. Therefore, a simple HTML page can be the source for the Request.Params collection. For example, you

DISPLAY DATA WITH REQUEST.PARAMS

⁄ Open the
Suggestions.htm template from the Code Templates directory.

I The contents of the page

› Open the
GenericTemplate.aspx template from the Code Templates directory.

· Add the GetRequestParams function and code from the file GetRequestParams.aspx located in the Code Templates directory.

‚ Save the file and request it
from the Web server.

¡ Click the Submit button.
I Request data displays
from looping through the Request.Params collection.

— Request the first Web page
that you created in this task.

± Click
suggestion.

and select a

197

ASP.NET

WRITE OUTPUT USING RESPONSE.WRITE
ou can use the HTTPResponse class to interact with the responses given to Web requests. One common task for the HTTPResponse is to write custom HTML in the response to a user’s page request. Writing custom HTML can be accomplished with the Write method of the Response object. Note that the methods and properties of the HTTPResponse class are exposed through ASP.NET’s intrinsic Response object.

Y

Response.Write to customize the HTML markup of a page, you need to know where you want to have the tag(s) placed. You can place in a placeholder tag in which you can insert HTML SPAN or DIV tags), or you can use the script delimiters inline to the HTML. If you are posting a page back to itself, you can check the IsPostBack property of the page to determine if it is the first time you are displaying the page or if you have posted back to the same page. In some cases, you will only want to run certain server-side code after a page is posted back to itself.

To get user input to display in a new HTML element, you can programmatically add HTML elements/ tags with Response.Write. When using the

WRITE OUTPUT USING RESPONSE.WRITE

⁄ Open the
GenericTemplate.aspx template from the Code Templates directory.

‹ Add a message to
the user.

ˇ Place a drop-down list box
on the page with suggestions for choosing the suggested number of goals.

Á Add a button control to
the page.

› Add a form to the page.

¤ Add a heading for
the page.

198

USING ASP.NET COMPONENTS

9

If you were passing this information via the query string, the code would look a little different compared to posting through a form. See ASPResponse_ai.aspx for the full example on the CD.
Example:
<% @ PAGE LANGUAGE="C#" %> <H3>Welcome to mylifetimegoals.com</H3> What suggestions do you have for improving our site? <FORM RUNAT="Server" METHOD="GET"> <P/> <ASP:DROPDOWNLIST ID="dropdownlistSuggestions" RUNAT="Server"> <ASP:LISTITEM>Fewer Goals</ASP:LISTITEM> <ASP:LISTITEM>More Goals</ASP:LISTITEM> <ASP:LISTITEM>Same Number of Goals</ASP:LISTITEM> </ASP:DROPDOWNLIST> <ASP:BUTTON ID="buttonExample" RUNAT="Server" TEXT="Submit"/><P/> <% if (IsPostBack) { Response.Write(Request.QueryString["dropdownlistSuggestions"]); } %> </FORM>

‡ Add a set of script
delimiters after the button.

· Add the Request.Form
method to retrieve the value that was selected in the dropdown list box.

— Save the file and request it
from the Web server.

± Click
suggestion.

and select a

° Add an if statement to make sure that the code will only run when posting to the page.

I The Web page for

¡ Click the Submit button.
I The suggestion you chose
appears.

‚ Add the
Response.Write method to write the value selected in the drop-down list box.

submitting suggestions appears.

199

Á Add a pair of script
delimiters.NET
REDIRECT USING RESPONSE. set
the language to C#. To avoid getting this server error. and buffer the page. When performing redirects. you can keep the old pages on the site with a redirect to the replacement page.ASP.
200
.REDIRECT
ou can use the HTTPResponse class to redirect users to other pages besides the page they originally requested. you need to make sure that no HTTP response packets have been sent to the user requesting the page.
‹ Save the file. if you come up with a new naming convention for pages on your site. If any HTTP packets have been sent and you perform a redirect. To redirect a user’s request. you will generate a server error.
‡ Request the data from
the drop-down list box and read it into a string variable. For example.REDIRECT
⁄ Open the
Suggestions. you can redirect them to a standard error page. you can buffer the response by adding the page directive at the top of the file and setting Buffer=True. Another common use of redirects is on a page
Y
that processes the user’s request and redirects the user based on what is in the user’s Request object. You can also use a redirect to handle an error on a Web page.
contains a suggestions form. One situation where you can use a redirect is when you delete an existing page off of your Web site.
ˇ Add the page directive. When the error occurs.
REDIRECT USING RESPONSE.htm template from the Code Templates directory.
¤ Add the ACTION value to
the form. Redirect.
I The contents of the page
› Open a new document in
your text editor. you can use Response.

NET COMPONENTS
9
You can create a page that accepts a page name from the QueryString and redirects the user to that page.
201
.aspx from the CD-ROM to your working directory.aspx. Response. then you are redirected to ie.QueryString["pageName"] .aspx will redirect the request to the request.ToString().aspx.
I You are redirected to a
page according to the option you have selected. · Add a case for each of
the options that redirects to the appropriate page.
¡ Click the Submit button. and ErrorGoals. } %>
RESULT: A request to this page with a query string equal to pageName=request.USING ASP.
± Click
suggestion.
— Copy the files
FewerGoals.
I The page with suggestions
appears.
° Create a switch statement using the string variable. MoreGoals.aspx. TYPE THIS:
<% @ PAGE LANGUAGE="C#" Buffer="True"%> <% if (Request.aspx"). } else { Response. If the page is not specified.Url.aspx page.aspx.
and select a
‚ Save the file and request
from the Web server.Redirect(stringPageName).Redirect(Request.QueryString["pageName"] != null) { string stringPageName = Request.ToString() + "?pageName=ie. SameGoals.

Browser property to return all of the information about the user’s Web browser. After you have this information.
‹ Add a pair of script
delimiters.
set the language for the page to C#. the Browser property is used to determine where to send the user.
202
. Before sending the ActiveX control
CHECK FOR WEB BROWSER TYPES
⁄ Open a new document in
your text editor. You can then use this information in your code to determine what the proper response to your client should be. you might have a few pages on your site that can be enhanced with ActiveX controls.
¤ Add the page directive. and buffer the page. Perhaps you might redirect the user to another page based on the browser type. For example. If they do not.ASP.Browser property.NET
CHECK FOR WEB BROWSER TYPES
ou can use the HttpBrowserCapabilities class to find out the properties of a user’s Web browser. you can redirect them to a page that is implemented without an ActiveX control. For example.
ˇ Create a new variable
of type string and read the Web browser type property into the string.
Some sites that you build with depend on browser capabilities for making decisions on what is sent to the user of the site. you can use the property of interest. You could also use the HttpBrowserCapabilities class for information to do custom logging that tracks what types of browsers are accessing your site. you want to check to see whether the users support ActiveX controls. you can use the Request. With this variable. To use the HttpBrowserCapabilities class. you need to create a variable of type HttpBrowserCapabilities.
Y
in the response.
› Create a new variable of type
HttpBrowserCapabilities and initialize the variable by using the Request.

To send the e-mail message.NET
ou can send e-mail from your ASP.NET
⁄ Open the Suggestions Template template from the Code Templates directory. first import the System.NET Web pages with the System.
‡ Set the To property for the MailMessage. and other information that a user likes to have for future reference.NET
SEND AN E-MAIL USING ASP.ASP.
‹ In the SubmitBtn_Click
function. To. you can work with a couple of objects.
Á Set the From property for the MailMessage. mail is queued by default on a Windows 2000 system. SMTP mail service is built into Microsoft Windows 2000. To send the prepared mail message. you need to work with the SMTPMail object. Subject. an encrypted e-mail containing order information can be sent from your Web site to another system for processing. Body. create a string variable for creating your message.Mail namespace. such as receipts.
Y
The most important is the MailMessage object that has many of the properties that you need to send an e-mail. In this namespace. You can also use e-mail to work with other systems.NET Web page. You can set the message From. E-mail gives you a convenient means to send users feedback.Mail namespace.Mail namespace to respond to a request that a user makes on your site.
204
. and BodyFormat properties when creating the e-mail.
SEND AN E-MAIL USING ASP.Web. confirmation notes. To ensure that your Web server is not blocked. you need an SMTP server.
To send e-mail from an ASP.
ˇ Create a new variable
of MailMessage type. using the selected value from the drop-down list box. ° Set the Subject property for the MailMessage.Web. for example. ¤ Import the
System.
› Set the message contents
in HTML.Web.

SelectedItem.
£ Click the Submit button.aspx on the CD for an example of using this in a full aspx page.USING ASP.Normal.Priority break. using the string variable in which you have placed the message. case "Low": mailmessageSuggestion.
205
. }
= MailPriority. See ASPMail_ai. = MailPriority.
I The page with suggestions
appears.Low. default: mailmessageSuggestion.Normal.Html.Text. You can let the user select the priority of the e-mail message with a drop-down list box.
notifying you of the e-mail's status. case "Normal": mailmessageSuggestion.
™ Click
suggestion. you may wish to send e-mail in Text format. ± Update the Text property
for the label on the page to reflect that the mail has been sent.
· Set the Body property for the MailMessage. = MailPriority. ‚ Set the BodyFormat
property for the MailMessage to MailFormat. = MailPriority.High.
and select a
¡ Save the file and request
from the Web server.Priority break.NET COMPONENTS
9
The e-mail format can either be HTML format or Text format.
— Add the SMTPMail’s Send method to send the message. Many sites allow the user to specify whether they wish to receive e-mail in HTML or Text format.
Example:
String stringMailPriority = dropdownlistMailPriority. switch(stringMailPriority) { case "High": mailmessageSuggestion.
I The message appears.Priority break.Priority break. Because some e-mail clients will not format HTML files.

aspx template from the Code Templates directory. ASP. When using a page cache.NET Web pages is to cache pages on the Web server.
O
cases when you may want a page generated based on the request made. When caching pages. There will be
USE THE ASP. you may want to have another version of the page generated when something varies in the request’s query string. The next time the page is requested.NET PAGE CACHE
ne way of increasing performance for your ASP. ASP.
206
. For example. it will check to see whether that version of the page is cached before reprocessing the page. The Duration will specify how long to cache the page in seconds.NET is smart about sending cached pages.NET
USE THE ASP.NET does not generate a new response for a Web page every time it is requested.NET PAGE CACHE
⁄ Open the
DatagridTemplate.
The process for setting up page caching is simple. if a page is requested with a query string that is different from the cached page.
‹ Add a message to the page
by updating the label with the current time. On the page you wish to cache.NET will regenerate the page and cache this new page (keeping the original page cached). For example.
¤ Add the OutputCache
directive to set the duration of the page cache to 60 seconds.
Note: The page-generation message will update only when the code in the Page_Load function is run.ASP.
› Save the file and request it
from the Web server. add an OutputCache directive at the top of the page and add a Duration attribute for the directive. This performance optimization can be used on pages that are accessed frequently and or have little to no personalization on them. then ASP.

NET COMPONENTS
9
If you want to cache the page per user session. Open two instances of Internet Explorer and note the generated times for each instance and note they are not sharing the same cached page.
Example:
<%@ OutputCache Duration="60" VaryByHeader="Cookie" %>
You can bypass a cached page each time the user submits different Form or QueryString data to a page.aspx on the CD for a page that demonstrates this directive.
I You can observe the
Á Wait for more than 60
seconds and refresh the Web page. you can cache based on the users cookie.aspx on the CD for a page that demonstrates this directive. Authentication cookies are used to map a user to a session.
ˇ Press F5 to refresh
generated time is the same as before (9:31:40 AM).USING ASP.
207
.
I The generated time
updates. indicating that the cached page was not used. indicating you are viewing a cached page.
Example:
<%@ OutputCache Duration="60" VaryByParam="*" %>
I You can observe that the
generated time is 9:31:40 AM. the page. See ASPPageCache_ex2. See ASPPageCache_ex1.

Á Cache the DataView.
‹ Try to read the DataView
out of the page cache.NET Web pages by placing data for your Web pages in a cache on the Web server.ASP. you can set memory and duration by respectively setting the length of the cache and setting a sliding expiration for the cache.
¤ Create a new DataView
variable. it expires— then you execute the code necessary to retrieve the data from the database again. When caching data on your Web pages. Note that for storing data into
USE THE ASP. where name is the name you want to access the information by in code and value is the value for the name.
Y
cache.NET DATA CACHE
⁄ Open the
DatagridTemplate.
› If there was nothing in the
cache to retrieve.NET DATA CACHE
ou can increase performance on your ASP. To read the data out of the cache. ‡ Update the label on the
page to show that the DataSet was created explicitly. With the cache. · Update the
DataSource to be dataviewTitles.
208
.
To place data into the cache. If it does not exist —for instance. you cast the data in the cache to a DataView data type. you can use variable = Cache["name"]. you can cache a dataset on the Web server so that you do not have to go back to the database when the page is refreshed.
° Add an else message to indicate that the data cache was used.aspx template from the Code Templates directory.NET
USE THE ASP. get a new DataView. you need to check to see if the cache exists before using it. you can use Cache["name"] = value.
ˇ Create the new
DataView. One way of checking to see if the cache exists is by checking to see if the cache is null. When using a data cache.

Zero ).NET COMPONENTS
9
You can specify how long the data is in the cache.DateTime. TimeSpan.MaxValue.
— Scroll down to see the
message about the DataSet being created explicitly. dataviewTitles.
¡ Scroll down to see the
message about the DataSet being retrieved from the cache.
You can base expiration on the last time the cache was accessed by using a sliding expiration.Insert("cacheTitles". dataviewTitles.DateTime. 25
‚ Save the file and request it
from the Web server.
I The business titles from the
pubs database appear.
± Press F5 to refresh the
page. The following code will expire the data cache after one minute. TimeSpan.
Example:
Cache.AddMinutes(1). null.Insert("cacheTitles".Now.
Example:
Cache.
209
.USING ASP. null.FromMinutes(1) ).

you exhaust server resources (primarily memory). process isolation. An ASP. This is second in performance compared to low isolation and will not bring down IIS when it crashes. but will bring down all other pooled applications. This is the most stable option. You have three options to choose from on a Web site for what process isolation you need. or one main application for your entire site. When you start storing state into global locations. All resources under the Web site or virtual directory are part of the application. add a simple file with an . the . or even down to file level through the IIS MMC’s Directory/File Security tab in the Properties dialog box. If you find that you are storing large amounts of data in global storage and this data can be separated into logical independent domains.NET application will have its own set of resources to manage global data in your application.ASP. you will share the COM+ Application with IIS. After your Web site or virtual directory is set up as an application. you can independently control security. unless the resource is in a subdirectory that has been configured as another application. Having one or more Web applications on your Web site depends on several factors. directory level.NET APPLICATIONS AND STATE MANAGEMENT
ASP. then it is time to segment into one or more separate ASP. but its performance is not as good as low isolation (due to interprocess communication between the Web application and IIS).
Within an ASP. you will have to share the COM+ Application with other Web applications. The setting that you choose for Application Protection will determine which COM+ Application will contain your application. With the high protection level. This means that if your Web application crashes. the whole Web server comes down. Some of the more important factors that you should be aware of are: Security Model All applications have several security options that can be set across the site. With low and medium protection levels. you can have more or less control on security for your entire application.NET
INTRODUCTION TO ASP.NET application context.NET runtime creates the ASP.NET APPLICATIONS
An ASP.NET Application.aspx extension to it. and shared data. Process Isolation is determined by the Application Protection setting in the IIS MMC (Microsoft Management Console for IIS).NET applications. Medium (Pooled) Runs in a central process where all ‘’pooled” applications run. The levels of Application Protection are: Low (IIS Process) This provides the best performance but is the least stable.
210
. Shared Information Each ASP. your application will have its own COM+ Application. In the case of low protection. The Web sites you build can include multiple Web applications as part of the Web site.NET Application is how you can separate one application domain from another. When you request this file through your Web server. This process is the management of threads that are allocated to running processing instructions for your application. Depending on which option you choose for Application Protection. See the section on application state management on page 211 for global storage options with Application and Session objects.NET Application is set up as a Web site or a virtual directory that has been configured as an application in Internet Information Server (IIS). Application Protection One benefit of separate Web applications is the control of where your Web application’s process runs. High (Isolated) Runs in its own process.

You can also specify the scope to be at the application or session level. Application Directives Application directives give you the ability to specify additional information about your application. With the Global. as well as code for custom events.asax file to execute more that just the standard events. Be careful with this scope. The Application will look for this file in the root directory of the site. You can write code to overwrite what happens by default when each of these application objects are created or destroyed.
Custom Modules You can extend the Global.NET application.asax Each ASP.asax file for use in your application. For this. you can also configure settings for your application. Cookies Cookies enable you to store information on the user’s browser.asax file.asax file.asax file contains code for certain events that are used during the lifetime of your ASP.
211
. and Assembly. you will declare server-side objects at the page level.
Session Object You may wish to have variables that are specific to a user for the life of their visit to your application. You can work with three application directives in ASP. including a server-side object. You can create your own event-handling code for when specific events occur in your application. you can use the Session object.NET creates your application. it will create multiple instances of an application object. You can specify the scope of the object based upon how often your application uses the object. causing inefficient use of memory. because you will be keeping the object in memory for an infinite amount of time. including code that executes when the application starts and finishes.NET APPLICATIONS AND STATE MANAGEMENT
10
WORKING WITH AND EXTENDING ASP. You can initialize the Session variables in the Session_Start event handle in the Global.
Application Object You may wish to have certain variables available from any page on your site.NET Application you create will only use one Global. for any user.NET: Application. Most of the time. you can later access the cookie and take appropriate action. A cookie can be either a single piece of information or an entire collection. The Global. and at any time.
Server-side Objects You can declare server-side objects in the Global. These variables can then be easily read and updated for each individual user.asax file.
APPLICATION STATE MANAGEMENT
HTTP Application When ASP. After you store the cookie on the user’s browser.NET APPLICATIONS
Global. You will use the Application object to store these variables for the life of the application. including declaring namespaces and server-side objects for use throughout the application. These variables can be any Common Type System complaint data type.ASP. Import.

and press Enter.ASAX FILE
⁄ Start your text editor
to create a Global.
¤ Type <SCRIPT LANUAGE="C#" RUNAT="Server"> and press Enter
twice. or to execute any other functionality required when shutting down the application. to write application information to a log file. or d) deploy the application
CREATE A GLOBAL.
Note: This code will create an Application variable.
Y
for the first time.asax file. called event handlers.NET
CREATE A GLOBAL. and press Enter.asax tells the Web server that it is a Global Application file. The Application_End event is fired when the Web server is being shut down.0.ASP.
‹ Type </SCRIPT>. b) stop and restart the World Wide Web service. type 212
the code you want to execute when the application starts.asax file to create special subroutines.
.
The Application_Start event fires when a user accesses the first . type void Application_Start() {. You should place this file in the root directory of the application. which are executed by the Web server when specific events occur. click between the <SCRIPT> and </SCRIPT> tags.aspx page served requires a little extra time because the code in the Application_Start event is being executed. You can use this event to set variables using the Application object. Note: Indent the code so that it is easier to read. Getting the first . The extension of .asax file in ASP. An application can only have one Global.The purpose of the Global. You can use this event to clean up variables created in the Application_Start event.
ˇ Press Tab to indent. or to do anything else that is required when the application starts.NET is similar to its purpose in ASP 3.
Á Type } to finish the event handler and press Enter. to log any additional Application information.asax file.aspx page after you do one of the following things: a) reboot the Web server.ASAX FILE
ou can use the Global. c) update the global.asax file.
› To create the event handler
for when the application starts.

NET then restarts the application. ASP. type
the code you want to execute when the application ends.NET automatically detects that you have changed the file.asax file.ASP.NET finds no Global.
The Global. and press Enter.
Save
Ctrl+S
‡ To create the event handler
for when the application ends. You should set up permissions on the file so that unauthorized users cannot read or update the file.
° Press Tab to indent. ASP. and press Enter.asax file. You will always want to specify the RUNAT attribute to run at the server because that is where the Application and Session objects are located. the assumption is that there is no need to code for the application and session events. This could include C# or VB.asax file is an optional file.
· Type } to finish the event
handler and press Enter. When you save changes to the Global.asax file. click between the <SCRIPT> and </SCRIPT> tags. especially if you have any sensitive configuration information in the file.
‚ Click File ➪ Save to open the dialog box. When ASP. You do not need to stop the Web server when updating the Global.asax file is configured so that you cannot request it as a URL. CONTINUED
213
. Here is what the <SCRIPT> tag would look like when using C# as the language: <SCRIPT LANGUAGE="C#" RUNAT="Server"> The Global. type void Application_End() {.NET APPLICATIONS AND STATE MANAGEMENT
10
You can specify the language you want to use in the <SCRIPT> tag by setting the language attribute.

Note: This code will write a message when the session starts and create a session variable. The Session_Start event fires when a new user accesses his or her first ASP page from your ASP.
± Type a name for the Web
the C:\Inetpub\wwwroot\ directory with the filename of Global.ASAX FILE (CONTINUED)
— Click
to select the folder where you want to store your file.ASAX FILE
Y
ou can insert event handlers to indicate when a user’s session starts and ends. see page 226.
I You can save the file to
™ To create the event handler
for when the session starts. and press Enter. The Session_End event fires when the user’s session times out. ASP. page. Web page. and press Enter.NET application. For more information about sessions and the Session object. or using any other code that you want to run when a user first shows up to your Web site.asax. or when the session is abandoned programmatically. type
the code you want to execute when the application starts. When ASP. which happens when the time between requesting pages is greater than the timeout period set for the application.ASP. click between the <SCRIPT> and </SCRIPT> tags.NET takes care of the details of determining whether the user is new.
214
.NET
CREATE A GLOBAL. This code is run before any of the code on the ASP page that was requested. You can use this event for many
purposes. redirecting the user to a login page. including setting variables for the user. the code in the Session_Start event is executed for the user.NET determines that the user is new.
¡ Click Save to save the
I The Default Web site now
has a Global.
£ Press Tab to indent.
CREATE A GLOBAL.
¢ Type } to finish the event handler and press Enter. type void Session_Start() {. You can use this event to clean up variables created in the Session_Start event or execute any other cleanup code required when users leave your site.asax file.

FileMode.
• Save the file.
215
.WriteLine("{0}".Write ). streamwriterLog.
§ Press Tab to indent.
I This example is saving the
Global.NET Web page is requested.
¶ Type } to finish the event
handler and press Enter.Concat("The application started at" . type
the code you want to execute when the application ends.IO" %> <SCRIPT LANGUAGE="C#" RUNAT="Server"> void Application_Start() { FileStream filestreamLog = new FileStream("applogging.aspx ASP. streamwriterLog. type void Session_End() {.ASP. FileAccess.Close(). In the example. String. you can log information from Global.
I The message about the
session event handler appears. StreamWriter streamwriterLog = new StreamWriter(filestreamLog).NET Web page in the default Web site.
Example:
<% @ Import Namespace="System.Now)).NET Web
Note: You can request any ASP.NET APPLICATIONS AND STATE MANAGEMENT
If you want to track statistics on your site.Append.Close(). streamwriterLog. click between the <SCRIPT> and </SCRIPT> tags. } </SCRIPT>
10
∞ To create the event handler
for when the session ends.txt". the Comments.
ª Request an ASP.asax to the default Web site. page from the default Web site. and press Enter.asax to a file.DateTime. and press Enter.

you can reference classes in the namespace without giving the full qualification to the class. The Import directive assumes that the assembly that contains the namespace is already available.
Á Position the insertion
point after the first ASP.asax file that you want to use as an import directive.NET application compiler uses this information to compile a new application that extends the specified class.asax file uses for all instances of global.ASAX FILE
ou can use processing directives in the Global. As with page-level directives. This makes classes in the assembly available to your application.NET base class the global.. ‹ Click to select the Code
Templates directory and open the UsingImportDirective GlobalTemplate.NET
USING PROCESSING DIRECTIVES IN THE GLOBAL.asax file to specify settings used in your application. You should also place the directive name/value pair within the ASP.
› Click Open to open the
template.NET namespaces.
Note: You can open another Global.asax file. With the Application directive. Another directive that appears similar to the Assembly directive is the Import directive.
ˇ Type the ASP. This directive links an assembly to the application. The Inherits attribute is used to set which . The three classifications of directives are Application. Inherits and Description. You can use the Import directive to import .NET script delimiter (<%) and type a space followed by @ Import Namespace="".asax file. You can place both attributes in the same directive.
¤ Click File ➪ Open.ASP. you should place the application-level directives at the top of the Global.. The ASP.asax file.asax.
Ctrl+O
⁄ Start the text editor to edit
the Global. Assembly.
USING THE IMPORT DIRECTIVE
Open.
216
. The Description attribute gives a short description of your application. you can set two attributes.NET script delimiters.
Y
The next directive that you could use is the Assembly directive. After you import a namespace. and Import directives.NET script
delimiters (<% %>) and press Enter.

asax file is the Application directive.Object" Description= "Sample Description"%>
Save As.. page..
‚ Type a name for the Web
I The namespace is now
declared for all pages on the site.
217
. This will need to be a compiled .ASP. The Inherits attribute defines the new application base class.
— Click Save to save the
Web page.dll" %>
Another directive you can use in your Global.NET APPLICATIONS AND STATE MANAGEMENT
10
The Assembly directive lets you link components to namespaces that have been imported with the Import directive.
Example:
<%@ Assembly Name="MyAssembly. You can also specify a friendly name for the application with the Description attribute.
Note: Click the Yes button if you are prompted about replacing the file.
° Click File ➪ Save As to open the dialog box.
Example
<%@ Application Inherits=" MySampleApp.
‡ Position the insertion point
between the quotation marks (" ") and type the namespace you want to import.NET class on your server. · Click
to select the folder where you want to store your file.

You can set this using the scope attribute.
¤ Click File ➪ Open. When the scope attribute is set to application. which is available to all users.
Note: Objects must be declared outside the <SCRIPT> tags. there is a single object that is
USING SERVER-SIDE OBJECTS IN THE GLOBAL.
Ctrl+O
⁄ Start the text editor to edit
the Global. See pages 222 to 229 to see other issues associated with using the Application object and Session objects.asax file that you want to use as a server-side object..asax file to declare an object for use throughout your ASP. you should use caution when deciding what you place into memory.
ˇ Click where you want to
declare a server-side object and type <OBJECT RUNAT="Server".NET
USING SERVER-SIDE OBJECTS IN THE GLOBAL.NET application.
Note: The scope of an object can be Session.ASP. There is one for each application instance. each user session manages a unique copy of the object. or AppInstance. Therefore. or per user session. ‹ Click to select the Code
Templates directory and open the DeclareServer SideObjectGlobal Template. Application.asax file.
Y
available for all users. on every page.
The scope of the server-side objects are either for the entire application. but not before any processing directives (<%@ Directive %>).ASAX FILE
ou can use the <OBJECT> tag in the Global.
Á Type SCOPE= and the
scope of the object. at any time. there are multiple objects. You should place the <OBJECT> tag outside the code declaration blocks. at any time. per application instance.asax file. see page 216.
‡ Type ID= and the name
you want to reference the object by within your ASP pages.ASAX FILE
Open. you can place the <OBJECT> tag before or after the <SCRIPT> tags.
Note: You can open another Global.
218
. For more about processing directives. on every page. When set to session. Use Session and Application level scope with caution..
› Click Open to open
the template. When the scope is set to appinstance. Because of the scope of these variables.

ArrayList"/>
RESULT: After this object is placed in the Global. · Between the quotation
marks ("").Collections.
Note: Click the Yes button if you are prompted about replacing the file. You reference the object by its ID.ArrayList variable with a name of Items will be available for each session created for the default Web site. you can then work with the Items array list on any page. Web page. you can access the object from any ASP page in your application. if a System..Collections. Note: A System.ArrayList object has been declared in the Global.
¡ Type a name for the
219
.
Save As.
™ Click Save to save the
Web page. you can use the object on any ASP page.
— Click File ➪ Save As to open the dialog box. type the kind of object you want to declare. TYPE THIS:
<OBJECT RUNAT="Server" ID="Items" CLASS="System.
‚ Click where you want to
close the <OBJECT> tag and type </OBJECT>. For example.asax file with an ID of Items.asax properly.asax file. ± Click
to select the folder where you want to store your file.NET APPLICATIONS AND STATE MANAGEMENT
10
After a server-side object has been declared in the Global..ASP.
° Type CLASS= "">.Collections.

you can also use the BeginRequest and EndRequest events for code that you want to execute each time a user makes a request. and press Enter. EventArgs e). This is done in the Global. Typically.. The sender tells you who raised this event and the EventArgs gives you further context about why the event was raised. type
void Application_EndRequest() { . Place this in the Global. For example.
Note: You can open another Global. You can use any of these built-in events by implementing the event handlers for these events in the Global. type } to finish the event handler. but it is good practice to include these parameters.
and press Enter.
Ctrl+O
⁄ Start the text editor to edit
the Global. ‹ Navigate to the Code
Templates directory and open the DeclareServer SideObjectGlobal Template. click between the <SCRIPT> and </SCRIPT> tags. type void
Application_BeginRequest() { .ASAX FILE
ou have eighteen supported application events in ASP.NET Applications for writing applicationspecific code. click between the <SCRIPT> and </SCRIPT> tags.asax file if you want.asax file between the <SCRIPT> tags.
Usually.
220
. You also have the capability to create you own custom application level events.
Á Type } to finish the event handler and press Enter.NET
USING APPLICATION EVENT HANDLERS IN THE GLOBAL.asax file. Some applications’ events are raised for each request to the application.
¤ Click File ➪ Open. The sender and EventArgs are not required parameters of the event handler. you will add parameters to get more contextual information on the event.asax file.
ˇ To create the event
handler for request.asax file with the following naming convention Application_EventName(appropriateevent argumentsignature).ASP.
Y
Application_EventName (Object sender. you will use the built-in events. and others just occur under special conditions.
‡ To create the event
handler to end the request. This is a typical event handler signature that includes parameters —
USING THE BEGINREQUEST AND ENDREQUEST METHODS
Open.
° Press Tab to indent.
› Click Open to open
the template. and press Enter.asax file..

The Init method executes for each HttpApplication instance that is created. Note: The Web browser is in full-screen mode in this screenshot so you can see all of the event messages.NET uses a pool of HttpApplication instances to service requests made by your application.
221
.
Note: Click the Yes button if you are prompted about replacing the file.
Note: In this example. the Init.ASP. you can write code that will run when HttpApplication instances are created and destroyed.
¡ Request an ASP.
Example:
<% public void Init(){ "Init override code goes here } public void Dispose() " Dispose override code goes here } %>
Save As.aspx file was requested.NET. ‚ Click
to select the folder where you want to store your file.
You can write code in the Global.
— Type a name for the Web
page.asax file to override the creation and destruction methods for the HttpApplication instance. whereas the Dispose method executes when the HttpApplication instance is destroyed...
I The BeginRequest and
EndRequest methods are called on the page.
± Click Save to save the
Web page.
· Click File ➪ Save As to open the dialog box.NET Web
page from your site to initiate the creation of a new application. These managed instances handle their requests for the lifetime of the request.NET APPLICATIONS AND STATE MANAGEMENT
10
ASP. and the Dispose methods. With ASP. the Comments.

you can access the information stored in the Application variable.aspx to the Default Web site and display the ASP. and type Application[""]=. You will also find it beneficial to place objects that take a long time to instantiate and are used frequently in Application variables. due to the constraint of available memory on your server. you still need to limit the number of objects and other variable types stored in the application. you want to keep the object around after the client is done using the object.
› Save the page as
CreateApplication. This class stores state in Application variables that are available to all users of the site.
222
.NET application. An instance of the HttpApplicationState class is created the first time any user requests a URL resource from within your ASP. If the instantiation is expensive. type a value for the Application variable in quotes. click where you want to create application information.
I The Application
variable is set.
USING APPLICATION STATE
Application variables should only hold information that is necessary for all users of the site. you need to weigh the benefits of simplicity against the cost of memory. However. The memory allocated for these application level variables is not released until the Web application is shut down or the variable is removed or replaced programmatically. This being said.
‹ After the equal sign
(=).
¤ Between the quotation
marks ("").NET page in a Web browser.
⁄ Open CreateApplication
Template.NET
USING APPLICATION STATE
ou can share global information throughout your application by using the HttpApplicationState class. so the next client does not pay the same instantiation penalty.ASP.
Y
Creating and using Application variables is very simple.
Note: After the page is executed. and a message appears. type the name of the Application variable you want to create.aspx from the Code Templates directory.

Lock Application["applicationSiteName"] = "My Sample Site". you should lock the object when updating.
Example:
<% Application. and type Application[""].NET page in a Web browser. click where you want to access application information.
‡ Use the ToString() function to convert the variable to a string and place a Response.
° Save the page as
ReadApplication. you can unlock the variable to free it for further updating.aspx from the Code Templates directory.
Á Between the quotation
marks (""). but it is good to explicitly unlock.ASP.NET APPLICATIONS AND STATE MANAGEMENT
10
Because everyone can access the Application object. It is not required to unlock (it will be automatically unlocked when the page goes out of scope).
I The Application
variable’s value appears. type the name of the Application variable you want to read. Application.aspx and display the ASP. When you finish updating the variable.UnLock %>
ˇ Open ReadApplication
Template. around code that accesses the Application variable.
CONTINUED
223
.Write ().

Note that you can also update and delete Application variables from any page on your Web site at any time..
224
. For example.aspx to the default Web site and display the ASP. Note that this can impact scalability by blocking other requests to the Application when you are updating or reading a value with a lock in place. you can store state codes in an
USING APPLICATION STATE (CONTINUED)
· Open UpdateApplication
Template. Because of the scope of Application variables. However. you can read them from any page on the site.
After you create the variables. You must explicitly use the Lock and Unlock methods provided by the HttpApplicationState class in order to synchronize requests in a multi-user environment.
Application variable.
— Between the quotation
marks (""). Application settings and common lookup values are good candidates for Application variables.aspx from the Code Templates directory.ASP.
± Save the page as
UpdateApplication. type the updated value.NET page in a Web browser.
‚ Click where you want to
update the Application variable and type Application ["applicationSiteMotto"] = "". You can create Application variables on any ASP. programmers often use the Application_Start event handler to create your Application variables.NET
USING APPLICATION STATE
A
ll users of your site share Application variables. Synchronization support is not built into Application variables. you should generally practice using Application variables for read-only data that is accessed often across the entire site.
I The Web browser displays
the result of updating the application information. Another scalability issue of using the Application object is that its state can not be shared across multiple servers.NET page on your site.

type the name of the variable you want to delete. %> The Application variables have been set. i < intCount.ASP. Application["applicationSiteMotto"] = "Out goal is to help you reach yours".Write(Application.
I The Web browser displays
the result of deleting the application information.Count. Contents. TYPE THIS:
<%
Application["applicationSiteName"] = "My Lifetime Goals". The application variables are: applicationSiteName = My Lifetime Goals applicationSiteMotto = Our goal is to help you reach yours
¡ Open DeleteApplication
Template.Remove("").GetKey(i). i++ ) { Response.Write(" = "). Response.aspx from the Code Templates directory.
225
.
£ Between the quotation
marks (""). } %>
RESULT:
The application variables have been set.
¢ Save the page as
DeleteApplication.Write(Application.ToInt32()..ToString()).aspx to the default Web site and display the ASP. Response.Write("<BR/>"). for ( int i= 0. This enables you to access all of the variables in your application in a looping structure.Get(i).ToString()).
™ Click where you want to
delete the Application variable and type Application. Response.<BR/><BR/> The Application variables are:<BR/><BR/> <% int intCount = Application.NET page in a Web browser.NET APPLICATIONS AND STATE MANAGEMENT
10
You can treat the Application variables as a collection.

asax file or any page in the Web application.
› Save the page as
CreateSession. Session state management is critical to building Web applications that rely on information that crosses from one page to the next.
Note: After this page has been executed.NET application or when the client requests a URL resource after the session has expired or has been programmatically abandoned.
¤ Between the quotation
marks ("").aspx to the Default Web site and display the ASP. you might load a user’s
USING SESSION STATE
preferences at the beginning of his session and access the Session variables on each page request to customize the user’s page presentation.). An instance of the HttpApplicationState class is created the first time the client requests a URL resource from within your ASP. but they are one of the easiest ways. The Session_Start event handler is the most common location for initializing Session variables (Session["sessionvariable"]="some value". you can read this data from any page in the Web application (string strStorage = Session["sessionvariable"].). Starting the session will initiate the Session_Start event handler. For personalization. After a Session variable has been initialized in the Global. type the session variable you want to create.NET
USING SESSION STATE
Y
ou can manage user-specific information from page to page in your application by using the HttpSessionState class.ASP. Using Session variables are not the only way to manage session data.
type a value for the session variable in quotes.NET page in a Web browser. you can access the information stored in the session variable. This class stores state in Session variables that are tied back to the requesting client. Page personalization demonstrates the benefits of using Session variables.
‹ After the equal sign (=).
226
.aspx from the Code Templates directory and type Session[""] = .
⁄ Open CreateSession
Template.

TYPE THIS:
<% Session.
I The Web browser displays
the result of reading the application information.Timeout = 5.
Á Between the quotation
marks (""). This value determines the amount of time that a user can go idle on your site without having to obtain a new session.NET APPLICATIONS AND STATE MANAGEMENT
10
The Session object has many properties that you can configure.
ˇ Open ReadSession
Template. use the ToString() function to convert the variable to a string and place a Response.Timeout. around code that accesses the Application variable.aspx from the Code Templates directory and click where you want to access application information and type Session[""].").
° Save the page as
ReadSession.Timeout + " minutes. You can set this property and read from this property.ASP.
‡ For the value to appear
as output on the Web page.Write ().
CONTINUED
227
. type the session variable you want to read. Response. %>
RESULT: The Session Timeout is currently 5 minutes.NET page in a Web browser.Write("The Session Timeout is currently " + Session.aspx to the Default Web site and display the ASP. One of the important properties is the Session.

NET gives you three options for session state
USING SESSION STATE (CONTINUED)
management.0 could not be shared across Web forms.
± Save the page as
UpdateSession. This falls between inprocess and SQL Server in terms of performance. This is a persistent storage mechanism that has the slowest performance of all the options.NET page in a Web browser. do not retain state as the user goes from page to page on the site. many developers would avoid the use of Session in their applications.
‚ Click where you want to
update the session variable and type Session["sessionUser FavoriteColor"] = "".aspx to the Default Web site and display the ASP. This gives the best performance if you are only going to deploy to one Web server. and therefore. Therefore.
— Between the quotation
marks (""). Session objects in ASP 3. Using the Session object is one of the easiest ways to manage user-specific information. To overcome the session state issues in ASP 3.
228
.NET). but it is the most resilient to Web site failures (for example.ASP..NET
USING SESSION STATE
eb applications on IIS. The first option is in-process (runs in the same memory space as ASP. This option holds session data in volatile memory.
I The Web browser displays
the result of updating the session information. so it is not as resilient as the SQL Server option. you must have some mechanism of tracking information from page to page.aspx from the Code Templates directory. and it can also be configured for Web forms. The third option is out-of-process. ASP.0. The second option is SQL Server.
W
Session state management has improved with ASP. type the updated value. power outage) and can be used in Web forms.
· Open UpdateSession
Template.NET Applications. by design.

229
.NET APPLICATIONS AND STATE MANAGEMENT
You can treat the session variables as a collection. This enables you to access all of the variables in your application in a looping structure.
10
RESULT:
The User Favorite Color Session variables have been set.
¢ Save the page as
DeleteSession. Response.Collections.aspx to the default Web site and display the ASP.. Response. } %>
¡ Open DeleteSession
Template. while ( SessionEnumerator. Session["sessionUserThirdFavoriteColor"] = "Red". ToString()].Current.MoveNext() ) { Response. Session["sessionUserSecondFavoriteColor"] = "Green".Write(" = ").Write(SessionEnumerator.<BR/><BR/> The User Favorite Color Session variables are:<BR/><BR/> <% System.Remove("").GetEnumerator().ToString()).
I The Web browser displays
the result of deleting the session information.ASP.Contents.Write(Session[SessionEnumerator.NET page in a Web browser.ToString()).
™ Click where you want
to delete the Application variable and type
Session.IEnumerator SessionEnumerator = Session.Current. The User Favorite Color Session variables are: sessionUserFavorite Color = Blue sessionUserSecond FavoriteColor = Green sessionUserThird FavoriteColor = Red
" %>
The User Favorite Color Session variables have been set. type the name of the variable you want to delete.
£ Between the quotation
marks (""). TYPE THIS:
<% Session["sessionUserFavoriteColor"] = "Blue”.Write("<BR/>"). Response.aspx from the Code Templates directory.

Y
cookies they receive in one folder.NET to create cookies from an ASP. buffering is turned on by default.0.NET
WORK WITH COOKIES
ou can use ASP. which is the information stored in the cookie.NET page in a Web browser.
230
. the cookie is stored as a small text file on the user’s computer. type
Response.ASP. When the user views the page.
› Save the page as
CreateCookie.
Note: The cookie remains available until the Web browser is closed. The storage location depends on the Web browser installed on the computer.NET page. click where you want to create a cookie. which indicates the name of the cookie.
¤ Set the cookie value by
typing cookieUserInfo.aspx from the Code Templates directory. Typically. you should specify when the cookie will expire.. a cookie is usually deleted as soon as the user closes his or her Web browser. If you write a cookie midway through sending back a response. Most Web browsers store all the
WORK WITH COOKIES
⁄ Open CreateCookie
Template. you may get an error. and press Enter.Value = "Yes". For IIS 5.AppendCookie (cookieUserInfo). you will write the cookie to the user’s browser before you begin sending any HTML in the response to the client. A cookie consists of a key. By default.
I The Web browser displays
a message about creating a cookie.. Buffering the response for the entire application can be set in the IIS MMC.aspx to the Default Web site and display the ASP. This depends on whether you have buffering of responses enabled on your page or for the application.
‹ To write the cookie
to the Web browser. and type
HttpCookie cookieUserInfo = newHttpCookie("cookieUser HasVisited"). and a value. Setting an expiration date for a cookie enables the cookie to store information for longer periods of time.
When you create a cookie.

AddMonths(1). along with some convenient functions that add time to the current date and time.NET APPLICATIONS AND STATE MANAGEMENT
If you do not set an expiration date for a cookie.aspx from the Code Templates directory. cookieUserInfo. Cookies["cookieUserHas Visited"].Expires = DateTime. %>
10
TYPE THIS:
<% HttpCookie cookieUserInfo = new HttpCookie("cookieUserHasVisited").Write(Request.Value = "Yes". you can use the Expires property of your cookie.Expires = DateTime.aspx from the Code Templates directory.Now.
° Open CreatCookie
CollectionTemplate.
ˇ Open ReadCookie
Template. %>
RESULT:
The cookie is set for a week. the Web browser stores the cookie only until the user closes the Web browser. cookieUserInfo. TYPE THIS:
<% HttpCookie cookieUserInfo = new HttpCookie("cookieUserHasVisited"). cookieUserInfo. CONTINUED
231
.
RESULT:
The cookie is set for a month. cookieUserInfo.ToString().Value = "Yes".NET page in a Web browser.Value). Response. To do this.
Á Read and display the
cookie contents by typing
Response.ToString().ASP.AppendCookie(cookieUserInfo).AppendCookie(cookieUserInfo). you should keep this information for a longer period of time.AddDays(7). In most cases.
‡ Save the page as
ReadCookie.aspx to the default Web site and display the ASP.Now.. You can use the DateTime object’s Now property. Response.
I The Web browser displays a
message about the contents of the cookie.

Values."8pt"). With subkeys.
‚ Set the cookie subkey
by typing cookieUserInfo. use the Values. the value of the cookie will be null.NET
WORK WITH COOKIES
ookies are an alternative to using Session objects if you want to share data from page to page.
¡ Save the page as
CreateCookie. you can then access the cookie from another page. A Request.
— Set another the
cookie subkey by typing
cookieUserInfo. You must
WORK WITH COOKIES (CONTINUED)
· Click where you want
to create a cookie and type
HttpCookie cookieUserInfo = new HttpCookie("cookie UserFontPreferences").NET page in a Web browser.
Note: The cookie remains available until the Web browser is closed..Add method for the HTTPCookie object.aspx to the Default Web site and display the ASP.
C
know the name of the cookie you want to read.ASP. you could store both the preference for the font size and for the font name. To add a subkey to the cookie.. cookies are not a good option. If this data is very sensitive and you do not want your user to see this data. For this cookie. For example.Values. you can do this using one cookie."Verdana"). Cookies are stored in plain text on the user’s local machine.. you could create a cookie that stores the user’s font preferences. If the cookie you want to read does not exist on the user’s computer. Add("FontName". you can have the page perform an action depending on the value..AppendCookie (cookieUserInfo).Cookies statement enables you to read a cookie.
After you have created the cookie on the user’s machine.
232
.NET page finds the value of the cookie.
± To write the cookie
to the Web browser.
I The Web browser displays
a message about creating a cookie.Add("FontSize". A cookie can use subkeys to store several related values. After the ASP. type
Response.

Values["cookieFontSize"].NET page in a Web browser.HasKeys) {NameValueCollection namevaluecollection = new NameValueCollection(cookie.. Values["FontName"]. and type HttpCookie cookieUserInfo
= Request.All.All Keys.
¢ To read the second
subkey. click where you want to read a cookie.. If (cookie.
£ Read the contents of the
subkey in the cookie into a variable that will style the page by typing stringFont
Size = cookieUserInfo.[] StringValueNames = namevaluecollection..
233
. perhaps displaying the names and values of the subkeys in the cookie. String.aspx to the Default Web site and display the ASP. type stringFont Name = cookieUserInfo. loop ++) {HttpCookie cookie = cokkie collectionAll(loop).Cookies["cookieUser FontPreferences"].Values).
I The Web browser displays
a message about the contents of the cookie. TYPE THIS:
<% HttpCookieCollection cookie collectionAll For (int loop=0: loop <cookie collectionAll.NET APPLICATIONS AND STATE MANAGEMENT
10
You can loop through the subkeys of a cookie.aspx from the Code Templates directory. String {} StringValues = namevaluecollection. } } %> %>
RESULT:
FontSize = 8pt FontName = Verdana
™ Open ReadCookie
CollectionTemplate.Count. which enables you to work with the subkeys as a collection.
∞ Save the page as Read
CookieCollection.ASP.

By storing a value in the page’s state bag. This is appropriate for persisting data on a single page that is used across multiple requests of the same page. use the syntax Variable = ViewState['Name'].
234
. use the syntax ViewState['Name'] = Value. you automatically preserve it between round trips. ¤ Type a heading to the page. To read the variable out of Page State.
Á Type a button control
to the page that calls the Button_OnClick when clicked.
› Type a panel to the
page with an ID of panelStep1. Page class and all Web controls are derived from the Control class and.
WORK WITH PAGE STATE
⁄ Open the Template. therefore. see page 112.
The state bag is a data structure maintained by the page for retaining values between round trips to the server.
ˇ Type a message about
which step the user is on and output the value from the view state. For more information about panels.
‹ Type a form control to
the page. This section illustrates how to use page state to store the current step.
To place a variable into Page State. ViewState is inherited by the Control class. This code will only execute the first time the page is loaded because each subsequent request of the page is doing a postback to the page. Note the use of the (IsPostBack!) in the Page_Load event handler in the code. have the ability to retain state for multiple requests of the same page.
‡ Add another panel to
the page with an ID of panelStep2 and set the visible property to False.aspx template from the directory.NET
WORK WITH PAGE STATE
Y
ou can use Page State to store information that does not span multiple pages.ASP. The panel’s visible property hides and displays the two panels on the page.
° Add a message about
which step the user is on and output the value from the view state.

I The Web browser displays
a message about being on step 2. Are you ready to set your goals? Click the Continue button to go to Step 2.
¡ Save the file as
PageState. Also.
I Note that you stay on the
235
. } void Button_OnClick(object Source. EventArgs e) { Response.Write(ViewState[ "viewstateStep"]).%>. </FORM> </FONT> </BODY> </HTML>
· Set the language for the
page to C# using the Page directive.
I The Web browser displays
a message about being on step 1. TYPE THIS:
<%@Page Language="C#" %> <HTML><HEAD> <SCRIPT LANGUAGE="C#" RUNAT="Server"> void Page_Load(Object Src.aspx""). this section features panels to display the page state information. You can test what happens when you use page state on two pages.Redirect("PageState_ai2.ASP. same page.com</H3> <FORM RUNAT='Server"> You are on Step <% Response.
± Add the Button_OnClick
event handler and set the first panel’s visible property to false and the second panel’s visible property to true.aspx to the default Web site and request it from the Web server.
™ Click the Continue
button. } </SCRIPT></HEAD> <BODY><FONT FACE="Verdana"> <H3>Welcome to mylifetimegoals.
— Add the Page_Load
event handler and initialize the view state variable.
‚ Add the <Script> tag
to set up some server-side code.Write(ViewState["viewstateStep"]). <P/> <ASP:BUTTON ID="buttonContinue" RUNAT="Server" onClick="Button_OnClick" TEXT="Continue"/> <P/> </ASP:PANEL> </FORM></FONT></BODY> </HTML>
10
RESULT:
<%@Page Language="C#" %> <HTML> <HEAD> <SCRIPT LANGUAGE="C#" RUNAT= "Server"> </SCRIPT> </HEAD> <BODY> <FONT FACE="Verdana"> <H3>Welcome to mylifetimegoals. EventArgs E ) { if (!IsPostBack) ViewState["viewstateStep"] = 1.NET APPLICATIONS AND STATE MANAGEMENT
Page State information does not work across pages.com</H3> <FORM RUNAT="Server"> <ASP:PANEL ID="panelStep1" RUNAT="SERVER"> You are on Step <% Response.%>. increment the view state variable by 1.

The web.config file is not found in the parent directory.
236
.uid=sa.config file needs to be located in the parent directory of the ASP.
T
site and when a Web page accesses configuration information it will look in the parent directory. You do not have to place the file in the root directory of your ASP.config file in any directory of the Web
ADD APPLICATION SETTINGS
⁄ Open a new document
in your text editor.NET
ADD APPLICATION SETTINGS
he web. When you have done this. <add key="pubs" value="server=(local).ASP.
The web. Á Open the
DatagridTemplate.NET site. and secure means to store configuration information.config. If the web. you could store a connection string to a database.config file is an XML file that stores information used to customize application level settings across your entire ASP.Configuration namespace.aspx template from the Code Templates directory. To put your own custom application settings in the web.config file you need to add the <appSettings> tag to the root <configuration> tag.
‡ Import the
System.
¤ Add a pair of
<configuration> tags.
‹ Add a pair of
<appSettings> tags. you can add settings by using the <add> tags and specifying the name and value of the setting (for example. You can place a web.NET application.
ˇ Save the file as web.NET Web site for the pages that use the application configuration information.
› Add an <add> tag and set the key attribute pubs to the SQL connection string for connecting to the pubs database. convenient.pwd=. it will work its way up the directory structure until it hits the root of the Web site.config file gives you a maintainable.databa se=pubs" />). For example.

AppSettings["pubs"]. web.config files can contain very sensitive information that you do not want a user of your site to see.
° Create a string variable and initialize the variable using the Configuration.
‚ Save the file and request it
from the Web server.AppSettings ["pubs"] property. they receive an HTTP access error. and so on.
· Modify the creation
of the SQL Connection to use the connection string read from the configuration file.NET does not allow this file to be requested from the Web server. authorization information.
237
.Configuration namespace and running the following example code.
Example:
string stringPubsConnectionString = ConfigurationSettings.”
You can access configuration information by importing the System. “This type of page is not served.NET APPLICATIONS
11
Making changes to the web. ASP.config file causes it to be reloaded the next time a resource is requested.config file. These settings could be connection strings.CONFIGURE YOUR ASP.
I The page appears using the
SQL connection setting from the web. By default. If users attempt to request a web. This will slow down your next request. but subsequent requests are not affected because the file is cached. MSMQ (Microsoft Messsage Queue) settings.config file.

You are also not required to have a web. and SQLServer. you can configure how the Session state can be persisted on your Web site using the <sessionState> tag under the <system. You are not required to stub in all the configuration settings.aspx template from the Code Templates directory.
The MODE attribute can be set to determine where a user’s session is stored (mode="Inproc"). you will get a Web server error.config file in your ASP. For example.config file.
238
. Conversely.
I The error page appears
because the code on the page was written in C# and C# is not set as the default language.
Y
state in the memory of the Web server process. Inproc is the fastest and least durable mode that holds Session
SET STANDARD CONFIGURATION
⁄ Open the
GenericTemplate.config file does not exist.ASP.
ˇ Save the file and request it
from the Web server. SQLServer is the slowest and most durable storage due to storage on a central SQL database store. There are three modes that you can choose from: Inproc.NET site.
› Write the
HTTP_USER_AGENT server variable to the Web browser. If your site accesses application settings and the web. The web. you can place as many configuration settings as you desire.config file is a central storage location for information that can apply to the entire site or just a section of the site.NET
SET STANDARD CONFIGURATION
ou can use the standard configuration settings to specify how to configure your ASP.
¤ Add a heading for
the page.
‹ Add a message to
the user. In the web. StateServer. web> section.NET Web application.

first add the <configuration> tags.
° Add the
<compilation> tag and set the defaultLanguage attribute to C#.web> <compilation defaultLanguage="C#" debug="true"/> <httpRuntime executionTimeout="30"/> </system.NET should execute running an ASP.NET APPLICATIONS
11
In the <configuration> tag.NET Web page before it times out and sends an error message about the timeout with the <executionTimeout> section.
Example:
<configuration> <system.NET debugging.web>
tags.
I The page appears without
problems because the default language is set to C#.web> </configuration>
Á Create a web. ‡ Add the <system.
‚ Request the file from the
Web server.config file.
239
. you can use debug="true" to enable ASP.
Note: If you are creating a new web.CONFIGURE YOUR ASP. You can specify the amount of time in seconds that ASP.config file.
· Save the file.

config file with new sections. and section <section> tags for defining the structure of your custom configuration information.web.config file. <sectionGroup>.ASP.NET
ADD CUSTOM SETTINGS
Y
ou can customize the web. The custom configuration section information is placed into two main areas in the configuration file. Now that the sections and section groups are defined. you will add the custom information in the <section> tag attributes. The type attribute is the name of the class that reads the information. groups.
¤ Add the
<configSections> tags.
Note: If you are creating a new web. The <section>
tags in your declaration have two properties.
The first area is for declaring names.config
file. first add the <configuration> tags.
240
.
ADD CUSTOM SETTINGS
⁄ Create a web. and handles for the custom sections.
Á Add the <add> tag and set the key attribute to maxnumber and the value attribute to 10. for example. The name attribute is the name of the tag that contains the information the section handler will read.web> tags. type and name.NameValue SectionHandler class is a structure for name value pairs. you can store the custom configuration information by placing the <sectionGroup> and <section> tags under the <configuration> root node.
‹ Add the <sectionGroup>
tag and set the name attribute to system.
ˇ Add the <goalsetup> tag
within the <system. The <sectionGroup> is used to give hierarchy to your <section> tags. With these tags.
› Add the <section> tag
and set the type attribute to System. You will have select groups. This makes the web.Configuration. System. NameValueSectionHandler. System. Place configuration section declarations in the <configSections> container tags.Configuration.config file flexible enough to contain all of your configuration information in a structured way.

you could update the value of the Session variable. These are classes defined for reading the configuration information. You need to specify the path to the node that you wish to work with.
You can put this configuration information into a Session variable. You can access custom configuration information you use the HTTPContext class in the System. Notice the use of (String) and (NameValueCollection).GetConfig("system. "system.CONFIGURE YOUR ASP.config file.web/goals setup").aspx template from the Code Templates directory.web/goalssetup". Based on the actions of the user.config file.
° Add a heading for
the page.
— Save the file and request it
from the Web server. This would make sense if you were modifying the value of the configuration information. The GetConfig gives you access to the web.
· Add a message to
the user. the value retrieved from Context.
‡ Open the
GenericTemplate. For example.Web namespace (Context. the maxnumber could be read into a Session variable when the user logs into the Web site.web/goalss etup") is cast into a NameValueCollection type variable and then the value for the “maxnumber” is cast into a string.NET APPLICATIONS
11
You may have noticed a couple of peculiar things about the source code for retrieving the value in the web.
241
.config file. in this case.
‚ Write the value of the
maxnumber configuration.
I A message appears that
displays the maxnumber custom setting from the web. For example.GetConfig("system.

ENABLE PAGE-LEVEL DEBUGGING
⁄ Open the
DatagridTemplate. you can turn page-level debugging on for the page to get more detailed error information. Running applications in debug mode does incur a memory/performance overhead.
242
. For most cases you should not enable this in production.
I A message appears from
‹ Save the page and request
it from the Web server.config file. including the line number and the source code associated with the error.NET
ENABLE PAGE-LEVEL DEBUGGING
I
f you are having problems with a page during development. To enable page debugging application-wide. The next time the page is requested and an error occurs on the page. If you want all pages in the site to run in debug mode. no details are given as to on which line the error occurred.NET can configure debugging at the page level. add a <@ Page debug="true" > directive to the top of the page. you need to update the web.aspx template from the Code Templates directory.
I The page displays and an
error message appears. you need to add the compilation element under the <system. ASP. Without this directive. Make sure that you only turn on page debugging when necessary.web> tag and set the debug attribute equal to true.ASP.
the server with a description of the error. you will get an error page that does not have any relative error information that can assist you in understanding why the error occurred.
¤ Create an error on the
page by changing the SQL statement to an invalid SQL statement. however.
Only pages that have the debug attribute set on the @Page directive are compiled into debug mode. detailed error information is displayed. On the page you want to debug.

Displays the Runtime Build and the ASP.
› Return to the page you
were creating and add the @Page Debug trace directive.NET Build.
ˇ Save the page and request
it from the Web server. Specifies the path and filename of the source file that generated the error.
243
. Displays a couple of lines of the source code before and after the line that generated the error.NET APPLICATIONS
12
When page-level debugging is set. Indicates which exception was raised and describes exception. Indicates the line number of the error. you may receive several pieces of information to help you play detective when an error occurs.DEBUG YOUR ASP.
I A message appears from
the server with a description of the error and the line number and the source code where the error occurred. Here are the elements of the error message: ELEMENT
Description Exception Details Source Error Source File Line Stack Trace Version Information
DESCRIPTION
A brief description of the error. Displays the call stack for the error.
I The page displays and an
error message appears.

Off. The first two settings are self explanatory.
Á Open the
GenericTemplate.config file to specify a common error handling page(s) for your ASP. you can use the <error> child node to redirect users to a page depending on the status code. Another useful attribute of the customErrors element is the mode.
‡ Add a heading to
the page.ASP. If you want to redirect users on a specified error code. and RemoteOnly).NET
ENABLE CUSTOM ERROR HANDLING
ou can use the web. For example.web> node.web> tags.
¤ Start a web.config
to the Web site. If this is the only <error> child node. and Stack Trace.config file is declared in the <customErrors> tag under the <system.NET Web application.config
file by adding <configuration> tags.
244
. This enables an administrator to troubleshoot a problem without turning off the custom errors for outside users.
Y
missing pages to an error-handling page that is only for missing pages.aspx template from the Code Templates directory. The latter of these is for turning on custom error pages for remote users only. <error statusCode="404" redirect="PageMissing.
ˇ Save the file as web. Locally logged-on users see the standard page debugging details like Source Error.aspx"/> nested under the <customErrors> tag will redirect requests for
ENABLE CUSTOM ERROR HANDLING
⁄ Open a new document
in your text editor. There are three modes that can be set (On. then all errors except for 404 will be redirected to the page defined in the <customErrors> tag. › Add a <customErrors> tag
and set the defaultRedirect attribute and the mode attribute. Line. you can specify the Web page to direct users to when an error occurs with the defaultRedirect attribute.
In the <customErrors> tag.
° Add an error message
for the page.
‹ Add <system.
· Save the page to the
Web site. The error handler in the web.

DEBUG YOUR ASP.Write(Request.QueryString ["aspxerrorpath"].
— Save the page and request
it from the Web server.
‚ Create an error on the
page by changing the SQL statement to an invalid SQL statement.
I The error-handling page
appears because of the error on the page.aspx. TYPE THIS:
<% @Page Language="C#" %> <HTML> <HEAD> </HEAD> <BODY> <FONT FACE ="Verdana"> <H3>Custom Error Handling</H3> You had an error on <% Response.ToString()).<P/> </FONT> </BODY> </HTML>
RESULT: Custom Error Handling You had an error on /PageWithError.NET APPLICATIONS
12
You can use the QueryString in the Response object to create an error page that gives more detail to the user.
245
. %>.

‹ Add a string variable to
create an HTML message for informing the user that an error has occurred on the page.
⁄ Open
DatagridTemplate.config file).ClearError method.ASP. This is done to ensure the error is not bubbled up to any other error handling mechanisms on the site (like the custom error handling in the web.NET pages. The error details are available through the Server. you need to then clear the error by using the Server. you can use the Page_Error event handler to trap errors on a page and run code to properly respond to the error.
ˇ Clear the error using
the Server. For example.
246
. and the Exception.Source property contains the name of the application or the object that causes the error.Message property gives you error message text. The Exception. The Exception
HANDLE ERRORS PROGRAMMATICALLY
object is a rich structure that contains detailed information about the trapped error. You can use the Page_Error event to send an error message to the user or to check for a specific error to handle that error.ClearError method. the Exception. On each ASP.
› Write the string to the
Web browser using the Response object.aspx from the Code Templates directory.StackTrace property helps you identify the location in the code where the error occurs.NET
HANDLE ERRORS PROGRAMMATICALLY
ou can use the Page_Error event along with enabling custom handling to handle errors on your individual ASP.
¤ Add the Page_Error
event handler to the page. When you are done responding to the error.
Y
Handling errors programmatically on a page starts with putting an event handler in the server-side code for the page.NET page.GetLastError method. This method returns the Exception object that was created for the error.

ToString() + "</PRE></FONT></HTML>".
I You remain on the same
page and an error message appears. Server.ClearError().
‡ Save the page and request
it from the Web server." + "<P/>Here is the error information:<P/><PRE>" + Server.GetLastError().
Example:
<SCRIPT LANGUAGE="C#" RUNAT="Server"> void Page_Error(Object sender.Write(stringMessage).DEBUG YOUR ASP. Response.NET APPLICATIONS
12
Because you are on the same page in which the error occurred.
247
. you can print out a number of details about the error. EventArgs e) { String stringMessage = "<HTML><FONT FACE =\"Verdana\">" + "<H3>Handle Errors Programmatically</H3>" + "There was an error processing this page. } </SCRIPT>
Á Create an error on the
page by changing the SQL statement to an invalid SQL statement.

The Trace Information section displays the different functions and their associated execution times.
I The page contents appear. This object can be accessed by using the Trace property of a Page or through the HttpContext.
. When the page is requested.NET pages to get information about the page request when attempting to debug your site. you need to add <%@ Page Trace="true" %> to the top of the page.
› Scroll down the page
until you get to the Request Details.aspx from the Code Templates directory. the trace information appears.
With traces you can inspect the common collection of the HttpRequest and execution flow (timing and call stack).
‹ Save the page and request 248
it from the Web server. including security and configuration information. The Server Variables section displays information about the server. The trace information for a page appears at the bottom of the page.
Y
hierarchy for the page. You can add your own trace information to page level traces. The Control Tree section shows detailed information about the use of controls and control
USE A PAGE-LEVEL TRACE
⁄ Open
DatagridTemplate.
¤ Turn on tracing for
the page by setting the Trace="true" attribute for the @Page directive.NET
USE A PAGE-LEVEL TRACE
ou can use page tracing on your individual ASP. Tracing can be set on the page level with the @Page directive.ASP. The Cookies Collection section displays all the cookies sent in the request. The Headers Collection section shows the name value pairs sent in the header section of the request. To trace an ASP. The trace information is available to you through the TraceContext object.NET Web page.

DEBUG YOUR ASP.NET APPLICATIONS
You can write to the Trace Information from within your ASP.NET Web page to track significant sections of code. This is useful not only for outputting values at certain times, but also for seeing how long it takes for something to execute. For the full version of the code refer to PageLevelTrace_ai.aspx. TYPE THIS:
protected void Page_Load(Object sender, EventArgs e) { SqlConnection sqlconnectionPubs = new SqlConnection ("server=(local)\\NetSDK;uid=QSUser;pwd=QSPassword;database=pubs"); SqlDataAdapter sqldataadapterTitles = new SqlDataAdapter ("select title, notes, price from titles " + "where type='business'", sqlconnectionPubs); DataSet datasetTitles = new DataSet(); sqldataadapterTitles.Fill(datasetTitles, "titles"); datagridTitles.DataSource=datasetTitles.Tables["titles"].DefaultView; Trace.Write("DataBind","About to bind the datagrid."); datagridTitles.DataBind(); Trace.Write("DataBind","Done binding the datagrid."); }

12

RESULTS:

Trace information that includes details on the start and completion of the datagrid binding.

I The Request Details
appear.

I The Control Tree appears.

I The Cookies Collection
appears. appears.

I The Server Variables
appear.

I The Trace Information
appears.

ˇ Scroll down the page
until you get to the Cookies Collection.

I The Headers Collection

249

ASP.NET

USE AN APPLICATION-LEVEL TRACE
ou can use application-level tracing to view details on a series of requests made to your ASP.NET Web application. Application-level tracing is part of your Web configuration file (web.config).

Y

To enable application-level traces, you need to add the trace element under the <system.web> tag. For application traces to work properly, you need the web.config file at the root directory of your ASP.NET application. Therefore, the web.config file must be either in its own Web site or virtual directory that is configured as an application (see page 10 for further information on setting up Web sites and virtual directories).
USE AN APPLICATION-LEVEL TRACE

After your site is configured for application tracing, all subsequent requests will be collected in a trace log. When you are ready to view these traces, you request a special file called trace.axd from the root directory. The trace.axd is not a physical file on your hard drive. When the trace.axd is requested in a URL, it will have the Web server generate a page that displays a master list of all the captured traces. From this master list, you can click the “View Details” hyperlink on the last column to see the details of the request. The details are very similar to what you would find on a page-level trace.

⁄ Open a new document
in your text editor.

‹ Add <system.web>
tags.

Á Request the Trace.axd
page in the root directory for the application.

‡ Click the View Details
link to see the details for a specific request.

¤ Start a web.config
file by adding <configuration> tags.

› Add a <trace> tag and set the enabled attribute. ˇ Save the file as web.config
to the Web site.

I Recent requests are

250

displayed. You may need to open another instance of your Web browser and request some of the other files in the directory to see requests in the trace.

DEBUG YOUR ASP.NET APPLICATIONS

12

You can fine tune the storage of your trace information with the attributes on the trace element. The requestLimit is the number of requests to trace. The default for this is 10 requests. You can specify whether to have individual pages output trace information by setting the pageOutput = "true". You can also sort the trace information by category, instead of time, by specifying traceMode="SortByCategory".
Example:
<configuration> <system.web> <customErrors defaultRedirect="error.aspx" mode="on" /> <trace enabled="true" requestLimit="50" pageOutput="true" traceMode="SortByCategory" /> </system.web> </configuration>

I Details appear for the

° Scroll down the page
until you get to the Cookies Collection.

request selected, including the Trace Information.

I The Cookies Collection
appears. appears.

I The Server Variables
appear.

I The Headers Collection

251

ASP.NET

USING WINDOWS AUTHENTICATION
ou can use Windows Authentication for securing access to your ASP.NET application. To secure your applications, you can use Windows Authentication in conjunction with the IIS Integrated Windows Authentication feature so that ASP.NET will attempt to use the browser’s security context to authenticate the user.

Y

should only use Basic Authentication over a Secured Sockets Layer (SSL) via HTTPS. To set up Windows Authentication, you need to add a section to the web.config file. In the <system.web> section of the web.config file, you can add an <authentication> section and set the mode attribute to Windows. Additional, the directory where you have code that uses Windows Authentication needs to be run as an application. You can accomplish this by setting directory properties in Internet Services Manager. Also, to force Windows Authentication, be sure to turn off anonymous access to the application.

Alternatively, you can use Windows Authentication with Basic Authentication if you want to support a wider range of browser types. IIS’s Integrated Windows Authentication works only with Microsoft Internet Explorer. If you are using Basic Authentication, you need to be aware that passwords are sent over the wire in clear text. Consequently, you

USING WINDOWS AUTHENTICATION

Properties

⁄ Open a new document in
your text editor.

‹ Add the <system.web>
start and end tags.

Á Open the Internet Services
Manager and expand the tree until you get to the directory where you want to save your code for this task.

‡ Right-click the directory
and choose Properties.

¤ Add the
<configuration> start and end tags.

› Add an
<authentication> tag and set an attribute named mode equal to Windows.

RESULT: Welcome to www.mylifetimegoals.com You are authenticated as TAR-DEV-LAPTOP\Administrator. You are authenticated using NTLM.

I The Properties dialog box
opens.

· Click the Edit button to
open the Authentication Methods dialog box.

‚ Click the Anonymous
access check box to turn off access for the application.

± Click OK to close the
Properties dialog box.

° Click the Directory
Security tab.

— Click OK to accept the
changes and close the Authentication Methods dialog box. CONTINUED

253

ASP.NET

USING WINDOWS AUTHENTICATION
ou can use Windows Authentication to manage authentication with user accounts that are stored in your Windows 2000 domain. Using Windows Authentication assumes that the user accessing your site has a user account on the Windows 2000 Server domain that is running the Web server.

Y

Administrators do this by enabling anonymous access. Anonymous access will map all users that access a Web server to one account that you specify in the Internet Services Manager. Administrators must also manage another security concept — impersonation. After a user has access to the Web server, he or she has to make requests on behalf of the user that requested a URL. You have the ability to impersonate another user if your Web application needs to run under one account for all users. You can configure impersonation in the web.config file with the identity element under the <system.web> tag.

For users to request a resource on a Web site, they must be mapped to a valid user account on that Web server. Most publicly available sites on the World Wide Web do not want to create a Windows 2000 account for every user of the site. This would be an administrative nightmare, so sites are typically configured to run all users under the same account.
USING WINDOWS AUTHENTICATION (CONTINUED)

¡ Open the
GenericTemplate.aspx template from the Code Templates directory.

£ Add a message to the user
about their authentication and use a label control to hold the value.

∞ Add the Page_Load
event handler to the page by using the <SCRIPT> tags.

™ Add a heading for the
page.

¢ Add a message to the user
about how they are authenticated as and use a label control to hold the value.

254

After you have authenticated a user. This is called impersonation and is used for setting up anonymous access to a Web application in IIS 5.NET
13
When securing Web applications.)
§ Set the values for the
labels including the username and the authentication type. authorization. and impersonation. Authentication occurs after the user provides a name/password pair that they enter when logging on to the site.config file.
Sometimes the user is mapped over to an account that is shared by multiple users.
255
. modify. This name/password pair is also called the user credentials. This is known as user authorization. delete. Authentication is the process of identifying if you are a configured user of the system.
I A message appears
showing the username and authentication type. because configuration requires you to insert the password in the text of the web. Be cautious when configuring impersonation. you deal with authentication.
¶ Save the file and request it
from the Web server. you need a way to determine the appropriate access rights of the user to read. (Passwords in a text file are not very secure. and so on.SECURITY AND ASP.0. resources on your Web site.

NET Forms Authentication is not the most secure option.config file. After you have set up the authentication section. it is the best alternative. You also need to set up the directory to run as an application using the Internet Services Manager. you need to add an <authentication> section to your web.
› Add an
<authentication> tag and set the mode attribute equal to Forms.
256
ˇ Add a <forms> tag and set the name equal attribute to a unique name. they are redirected to a predetermined custom login page that collects authentication information.
Á Add a set of
<authorization> start and end tags. and a timeout attribute equal to 60.NET
USING FORMS AUTHENTICATION
ou can build a custom login page with Forms Authentication for securing your ASP. you can use an <authorization> section to give specific rights to users (note that ? represents all anonymous identities.
° Save the file as
web.ASP.
‹ Add the <system. the Web server sends back an
USING FORMS AUTHENTICATION
⁄ Open a new document in
your text editor. a protection attribute equal to the value of all.config.NET applications.
Forms Authentication uses cookies to indicate whether the user is authenticated. but if you cannot use Integrated Windows Authentication or do not want to use the Windows Logon dialog box. and * represents all identities).
‡ Add a <deny/> tag with
the users attribute set to ?. If authenticated. To set up Forms Authentication. a loginURL attribute equal to the name of your login page. This cookie is passed in the request header in future requests to allow users to bypass the login page on subsequent page request.
¤ Add the
<configuration> start and end tags. When users access a resource without the cookie present.
Y
authentication cookie in the header. When users submit their user credentials.
. The user will have this cookie until the specified timeout occurs. the page authenticates the user. ASP.web>
start and end tags.

a login page must collect user credentials and authenticate (maybe checking a database against the supplied credentials). To get the full code sample. } else { labelMessage. } } </SCRIPT>
13
RESULT: If you request another page in the site (test with FormsAuthenicationDefault.Text.
— Create the Page_Load
event handler to set the user name for the label control. EventArgs e) { if (inputPassword. you will be sent to the original page that you requested.". If the users pass authentication.aspx) file on the companion CD-ROM. see FormsAuthenicationLogin_ai. you will get this custom login page.NET
When working with Forms-based authentication.aspx page).aspx. you can redirect them back to the originally requested page.Text == "goals") { FormsAuthentication.Text="That password is not correct. false).aspx template from the Code Templates directory.SECURITY AND ASP. TYPE THIS:
<SCRIPT LANGUAGE="C#" RUNAT="Server"> void SubmitBtn_Click(object Source. After you supply credentials (where password = "goals").RedirectFromLoginPage(inputName.
CONTINUED
257
.
‚ Add a heading for the
page that contains a label control for displaying the user name.
· Open the
GenericTemplate.
± Save the file as
FormsAuthentication Default.

• If the user did not enter
correct input. After users log into this page with your credentials.aspx template from the Code Templates directory. Active Directory.ASP. set an appropriate message for the user.
¢ Add a text box for the user
name and password. RedirectFromLoginPage method.
258
.
∞ Add an alias to the
System.
¶ Check the password field
for the correct input and use the RedirectFromLoginPage to forward on the user.NET uses the page specified in the loginUrl attribute of the forms element found under the <authentication> section. This could be a SQL database. After you retreive all necessary credentials. This will send this page over HTTPS instead of HTTP. this page requires a place for the user to enter a user name and password. To protect you user credentials. you want to put this form in a protected directory where Secured Sockets Layer (SSL) is configured. they are redirected to the original page.NET
USING FORMS AUTHENTICATION
I
f you use Forms Authentication.
§ Create the
SubmitBtn_Click event handler. you can use user data stores other than Windows 2000 domain accounts for determining valid users.
£ Add a form control to the
page. you need to create a login page that authenticates the user. such as the company name. The form used to collect the user credentials contains sensitive information and should not be sent over an unencrypted line. You could include some other special credentials that are part of identifying a user.
USING FORMS AUTHENTICATION (CONTINUED)
¡ Open the
GenericTemplate.
™ Add a heading for the
page and a message about login. To set up Forms Authentication. At a minimum. or some
other user data store. This redirection is not automatic. along with a submit button and a label for displaying messages.Security namespace using @Import. ASP.Web. It is programmed into the function that handles the submit of the login page with the use of the FormsAuthentication. you can check them against the store of your user data.

ª Save the file as
FormsAuthenication Login.aspx and request the
º Type a name and goal for
the password. you can validate server controls to ensure that the user enters all required fields before the validation check is performed.SECURITY AND ASP.
I The
FormsAuthenication Login.
I The
FormsAuthenication Default.aspx page appears. you will get this custom login page. <FORM RUNAT="Server"> Enter Name: <ASP:TEXTBOX ID="inputName" TEXTMODE="SingleLine" TEXT="" WIDTH="200px" RUNAT="Server"/> <ASP:REQUIREDFIELDVALIDATOR CONTROLTOVALIDATE="inputName" DISPLAY="Static" ERRORMESSAGE="Please enter your name. You can use "goals" as a guest password. TYPE THIS:
<BODY> <FONT FACE ="Verdana"><H3>Welcome to mylifetimegoals.aspx file from the Web server.NET
When collecting user credentials.com</H3> Please login to the secured area.aspx page appears.
FormsAuthenication Default. and the message is personalized by using your user name. you will be sent to the original page that you requested." RUNAT="Server"/> <P/> <ASP:BUTTON OnClick="SubmitBtn_Click" TEXT="Submit" RUNAT="Server"/> <P/> <ASP:LABEL ID="labelMessage" style="color:red" RUNAT="Server"/> </FORM> </FONT> </BODY>
13
RESULT: If you request another page in the site (test with FormsAuthenication Default. After you supply credentials (where password = "goals").
– Click the Submit button.
259
.aspx page)." RUNAT="Server"/> <BR/> Enter Password: <ASP:TEXTBOX ID="inputPassword" TEXTMODE="Password" TEXT="" WIDTH="200px" RUNAT="Server"/> <ASP:REQUIREDFIELDVALIDATOR CONTROLTOVALIDATE="inputPassword" DISPLAY="Static" ERRORMESSAGE="Please enter a password.

Deanna. Domain\UserName). You can also specify users in specific domains if you are using IIS’s Integrated Windows Authentication by prefixing the domain name (for example. which is used to represent anonymous identities. You can use the <deny/> tag to deny specific users access and use the <allow/> tag to authorize specific users. set users attribute to Danny. and POST. This can be done with the roles attribute of the allow element.
260
.config
template file from the Code Templates directory. › Save the web. you can allow or deny Windows 2000 domain groups.
Á Type an unauthorized
user’s name and goals for the password. The verbs that we can control are GET.config
file.config file.
ˇ Copy the files
UserAuthorization Default. which represents all entities. Bobby.aspx and UserAuthorization Login. you can specify the following: <allow verb="GET" users="*" /> <deny verb="POST" users="Linda" />
AUTHORIZE USERS
⁄ Open the web. You set up authorization in the <authorization> section of the web.
¤ Add another <deny/> tag
between the <authorization> tags.aspx from the CDROM to the Web site and request UserAuthorization Default. If you do not want a specific user to post data to the Web server but only request Web pages for viewing. This is done with the verb attribute on the allow element.NET application. HEAD.NET
AUTHORIZE USERS
SP. You can use commas to delimit users when you wish to specify multiple users in a single tag.ASP. Note the use of ?.NET gives you a convenient means to authorize and deny access to resources in your ASP.
A
If you want to be less granular with authorization. You can also control the actions that a user is allowed to perform.aspx from the Web server.
‡ Click the Submit button.
‹ Add an <allow/> tag and set the users attribute to Tommy. and the use of *.

Certain languages. File encoding pertains to how files are stored on the Web server.config file for the entire application.
¤ Add the @Page directive to the page and set the ResponseEncoding attribute to UTF-8.aspx template from the Code Templates directory.
262
.
‹ Add an English heading
for the page. which allow for support of most modern character sets.
› Add a Spanish heading for
the page.ASP.
Y
UCS Transformation Format (UTF-8) is an encoding format that supports 8-bit form. as well as the Language attribute to C#. whereas request encoding refers to the way the Web server handles sent requests. you can specify this in your web. Rather than specifying encoding for each page in your application. such as Japanese.
Encoding is important because it determines how the data from your Web server is sent to and from the Web browser. Response encoding refers to the way the responses are sent to the Web browser. have large character sets and therefore require an encoding type that would support all of the characters in the language. This encoding supports all Unicode character values. You can then add multiple languages to the page to accommodate users that speak different languages.NET
SET UP ENCODING
ou can use encoding to create a site that supports multiple languages.
SET UP ENCODING
⁄ Open the
GenericTemplate. Encoding refers to the way that the data within your file is stored. You can specify the response encoding type on a page to be UTF-8 using the @Page directive. along with how the files are stored on your Web server.
Note: You will need to install support for languages not currently installed on your computer.

. and . Sets the content encoding of responses.
263
.LOCALIZATION AND ASP. Designates the default encoding for . The default is us-ascii.asmx.
Á Save the file and request it
from the Web server.web> </configuration>
ˇ Add a Japanese heading
for the page.config file with the <globalization> tag.
Example:
<configuration> <system.asax files.
I The messages in the
various languages appear.NET
14
You can set up encoding for the entire application in the web.aspx.web> <globalization " requestEncoding="utf-8" responseEncoding="utf-8" fileEncoding="utf-8" /> </system. The options for the attributes for encoding are as follows:
requestEncoding responseEncoding fileEncoding Specifies the assumed encoding of each incoming request. The default is iso-8859-1.

as well as the Language attribute to C#. ˇ Create a drop-down list
that has several languages from which to choose. One way to do this is to simply have the user select the culture. You can either do this at the Page level or the Application level. Begin by ensuring that the response’s encoding type is appropriate. you can display the date in multiple formats based on the user’s preferences. After you
Y
determine the culture. You need to have some way to determine which culture to use.
Á Add a submit button
control. For example. You can also use the CultureInfo class to display the calendar preferences and the native name of the culture.
› Add a form control.
· Add an alias to the
System.Globalization
‹ Add a message to the user. you can use CultureInfo and a label control to display the localized time. you can set the current thread’s culture and then access the appropriate property.aspx template from the Code Templates directory. After the user selects a culture.
¤ Add a heading to the
page.ASP.NET
USING CULTUREINFO
ou can use the CultureInfo class to display localized settings. 264
.
‡ Add a span control on the
form to display messages. Another way is to read this information from the user’s Web browser.
° Add the @Page directive
to the page and set the ResponseEncoding attribute to UTF-8. You can create a drop-down list of cultures so the user can specify a culture. See page 262 for more information on setting up encoding.
USING CULTUREINFO
⁄ Open the
GenericTemplate.Threading and System.

CultureInfo. TYPE THIS:
<SCRIPT LANGUAGE="C#" RUNAT="Server"> void SubmitBtn_Click(object Source.
I The message appears
according to the culture selected.".CurrentCulture. The calendar to use for this culture is System.CurrentThread.Now.InnerHtml = "The localized date is " + DateTime.Value). you can also display a culturespecific calendar that uses the native language for the culture. EventArgs e) { CultureInfo cultureinfoLanguage = new CultureInfo(dropdownlistCultures.CurrentCulture) + ". The native name for this culture is español (España).ToString("D".GregorianCalendar.CurrentCulture = cultureinfoLanguage.
¢ Click the Submit button.
to select a
265
.Globalization. ¡ Set the InnerHtml
property of the span control to the date based on the current culture.
£ Click
culture. } </SCRIPT>
RESULT:
The localized date is domingo.
‚ Add the
SubmitBtn_Click function.SelectedItem.CurrentCulture." + "<BR/> The calendar to use for this culture is " + CultureInfo.
— Create a new
CultureInfo variable based on the item selected in the drop-down list box.NET
14
In addition to displaying the date and time in local format. 05 de agosto de 2001.Calendar + ". spanMessage. Thread.LOCALIZATION AND ASP.
± Set the current culture.
™ Save the file and request it
from the Web server." + "<BR/> The native name for this culture is " + CultureInfo.NativeName + ".

you can use the RegionInfo class and a label control to display the regional currency for the user.Threading and System.
‹ Add a message to
the user.
· Add an alias to the System. you can then access the property with which you want to work.ASP. or you can try to determine it from the information sent from the
USING REGIONINFO
⁄ Open the
GenericTemplate. You can either do this at the Page level or the Application level. You can create a drop-down list of regions for the user to choose from on a Web page. See page 262 for more information on setting up encoding. See the Apply It! section for the code necessary to do this. For example.
¤ Add a heading to the
page. You can also use the RegionInfo class to determine whether the region uses the metric system and what the Windows Region Name is. you can display the local currency based on the user’s preferences. After you determine the region.Globalization namespaces.NET
USING REGIONINFO
Y
ou can use the RegionInfo class to show regionalized settings.
.
266
° Add the @Page directive to the page and set the ResponseEncoding attribute to UTF-8. ˇ Create a drop-down list
that has several languages from which to choose.
Working with the RegionInfo class is similar to working with the CultureInfo class.
user’s Web browser. you must ensure that the response’s encoding type is set up appropriately. You can simply have the user select the culture. as well as the Language attribute to C#.
Á Add a submit button
control. After the user selects a region. You need to determine which region to use for the user.aspx template from the Code Templates directory.
‡ Add a span control on the
form to display messages.
› Add a form control.

spanMessage. else stringMetric = "does not use".
¡ Save the file and request it
from the Web server." + "<BR/> The Windows region name for this region is " + regioninfoLanguage. String stringMetric = "".
‚ Add the
SubmitBtn_Click function.NET
14
In addition to determing the local date and time.
£ Click the Submit button." + "<BR/> This region " + stringMetric + " the metric system.
™ Click
a culture.ThreeLetterWindowsRegionName + ". The Windows region name for this region is USA.
to select
267
. This region does not use the metric system.Value).
I The message appears
according to the region selected. TYPE THIS:
<SCRIPT LANGUAGE="C#" RUNAT="Server"> void SubmitBtn_Click(object Source.
— Create a new
RegionInfo variable based on the item selected in the drop-down list.SelectedItem.CurrencySymbol + ".IsMetric == true) stringMetric = "uses".InnerHtml = "The local currency for " + regioninfoLanguage. EventArgs e) { RegionInfo regioninfoLanguage = new RegionInfo(dropdownlistRegions.". if (regioninfoLanguage.EnglishName + " is " + regioninfoLanguage.
± Set the InnerHtml
property of the span control to the date based on the current culture. } </SCRIPT>
RESULT:
The local currency for United States is $. you can also determine whether the region uses the metric system and what the three-letter Windows Region Name is.LOCALIZATION AND ASP.

° Add the @Page directive to the page and set the ResponseEncoding attribute to UTF-8. When using the Page control to localize.CurrentCulture to ensure the date is formatted properly. you can use the @Page directive’s Culture attribute to set the culture. · Add an alias to the
System. as well as the Language attribute to C#.
The Page control can be used for setting properties for a Web page.aspx from the Code Templates directory.
› Add a form control. You must have a method of determining which culture to
LOCALIZE WITH THE PAGE CONTROL
use. you can use the CultureInfo. You can create a separate page for each culture.
‡ Add a span control on the
form to display messages. This enables different team members to work on various parts of your Web application without affecting each other.
‹ Add a message to the
user. Based on this selection. You can have the user select a culture from a dropdown list of cultures and redirect them to an appropriate page based on the culture. ˇ Create a drop-down list
that has several languages from which to choose.ASP. You can allow the user to select a culture from a drop-down list. On these pages. each culture that you support must have a separate Web page for that culture. you can use a case statement to redirect the user to the appropriate page.
¤ Add a heading to the
page.Threading and System. When displaying the date on the page.NET application.
268
.Globalization namespaces. Culture is one of the properties that you can set for a page.
Á Add a submit
button control. Each page will be set up for different cultures and display the localized date.
⁄ Open
GenericTemplate.NET
LOCALIZE WITH THE PAGE CONTROL
Y
ou can use the Page control to specify a certain culture for individual pages in your ASP.

aspx.
I The appropriate page for
the culture appears with a message.
± Add a switch statement to redirect the user to the appropriate page.aspx. 05 de agosto de 2001
Spanish
‚ Add the
SubmitBtn_Click function.
¡ Save the file and request it
from the Web server.LOCALIZATION AND ASP.aspx files from the CD-ROM to the current directory.
to select
¢ Click the Submit button.ToString("D".NET
14
The @Page directive has a Culture attribute that you can set to the culture.
Note: These files are used for the different cultures you can select. CultureInfo. Search MSDN for the CultureInfo class for more information on possible values for the Culture attribute.
— Create a new string
variable and read the value of the selected item in the dropdown list. TYPE THIS:
<%@Page CULTURE="es" LANGUAGE="C#" %> <%@Import Namespace="System.Globalization"%> <HTML> <HEAD> </HEAD> <BODY> <FONT FACE ="Verdana"> <H3></H3> The local date is: <%=DateTime.
£ Click
a culture.Now. Welcome_es_es.
269
. and Welcome_ja_jp.CurrentCulture) %> </FONT> </BODY> </HTML>
RESULT:
The local date is: domingo.
™ Copy the
Welcomeen_us.

I Repeat steps 2 to 4 for each
culture. You can then create a Global.
I Repeat step 6 for each
resource file.txt extension.MapPath function in the Global. ‹ Add the welcome
statement=Welcome! name/value pair. which enables you to separate all of the information that is specific to a language or a locale from the application functions.NET
CREATE AND USE RESOURCES
ou can use resource files to store localization information for your ASP.
Note: The resource files are saved in a subdirectory called resources. You can save the resource files in a subdirectory to organize you files. You can expand to other cultures. If you want to do this.NET Web application.ASP. ¤ Type [strings]. Spanish. You can load the
CREATE AND USE RESOURCES
⁄ Open your text editor.asax file that that will load the resources into a Resource Manager. Note: This task works with three cultures (English.
ˇ Open the command
prompt and go to the directory where your resource files are located. This capability makes it easier to add more languages to the application. Once you have created the resource file.
Resource files are composed of name/value pairs.
270
. you can use the Server.asax. you need to convert the file to a binary output by using the resgen command at the command line. You can create a resource file and compile the resource file using the resgen command utility. and Japanese).asax to map to the subdirectory.
Á Type the resgen command to create the resource file from the text file. you can use a class utility called a Resource Manager.
› Save the file with a
. To access the information in the resource file.
Y
Resource Manager into an application variable by using the Application_OnStart event handler in the Global.

° Add aliases to
System.NET
14
You can try and read the user language from the Web browser.IO.asax file to set the culture for all requests.CurrentThread. System.
I You can now use the
Application variable to access the information in the resource files.Resources.asax to the Web site.CurrentCulture = new CultureInfo(Request.asax file. You can put the following function in your Global.Globalization.CurrentUICulture = Thread.CurrentThread.
‚ Create a Resource
Manager application variable and initialize it. EventArgs args) { try { Thread.CurrentCulture.
‡ Open your text editor to
create a Global. } Thread.CurrentThread.
— Save the file as Global.CurrentCulture = new CultureInfo("en-us"). TYPE THIS:
void Application_BeginRequest(Object sender. It attempts to read the user language if possible and sets the language to en-us for a default value.UserLanguages[0]). } catch(Exception) { Thread. System.
· Create the
Application_OnStart event handler. and System.
271
.Threading. }
RESULT: The culture is set based on information that was sent from the user’s Web browser.CurrentThread.LOCALIZATION AND ASP.

you can pull the appropriate string out of the Resource Manager according to the culture.
‡ Add a span control on the
form to display messages.
USE RESOURCE MANAGER INFORMATION
You can use the Page_Init function for reading the Resource Manager variable out of the application variable. — Create a new
ResourceManager variable. as well as the Language attribute to C#.ASP. › Add a form control. Once you have the string.Resources. You need to make sure the response encoding is appropriate for the languages you are working with in your application.Threading namespaces. 272
Á Add a submit button
control. When you have access to the Resource Manager object. System. The Resource Manager is a class utility that you can use to access the information stored in your resource files. ‹ Add a message to the user.
. You can build the ASP.
‚ Add the <script> tags.
⁄ Open the
GenericTemplate. You can use UTF-8 to support multiple languages.
· Add an alias to the
System.
ˇ Create a drop-down list
that has several languages from which to choose.Globalization. One way you can determine this is to have the user select their culture from drop-down list.
¤ Add a heading to the page.NET Web page that will be used to access the data in the resource file and display a statement based on the culture selected.NET
USE RESOURCE MANAGER INFORMATION
ou can create ASP. you can then update the <span> on the page to display the localized statement.
Y
The culture for a user must be determined.aspx template from the Code Templates directory.NET Web pages that use the information stored in the Resource Manager. and System.
° Add the @Page directive to the page and set the ResponseEncoding attribute to UTF-8. You can add aliases to any namespaces for convenience.

NET
14
You can convert your resource files from their binary format into XML-formatted files.
Example:
resgen text.
Example:
resgen text.
™ Set the
CurrentCulture and CurrentUICulture based on the selection in the dropdown list. you can use resgen at the command line to convert the text.resx file into an XML file named newtext.resx
You can convert from XML back to text as well.
§ Click the Submit button.en-us.
¢ Save the file and request it
from the Web server.en-us.
£ Set the message using the
Resource Manager.
I The message is localized
according to the culture selected.txt. you can use the resgen at the command line to convert the text.en-us.resx.
to select a
¡ Create the
SubmitBtn_Click function.
∞ Click
culture. For example.resx
± Add the Page_Init
event handler that reads the Resource Manager from the application variable.LOCALIZATION AND ASP.en-us.en-us. For example.en-us.
273
.enus.resources newtext.resources text.en-us.resources file into an XML file named text.

but the Web pages only support
WORK WITH MULTIPLE SERVER-SIDE LANGUAGES
⁄ Open
MultipleLanguages.NET applications that use multiple server-side languages. Client-side language support is handled by the browser.
¤ Save the file and request it
from the Web server.NET platform supports several languages and is architected to support any mainstream language that can supply a compiler that will generate IL (Intermediate Language) that is compatible with the CLR (Common Language Runtime). ASP. Also.NET assumes that the language is VB.aspx from the Code Templates directory. you can set it with the Language attribute on the @Page directive.
I The page displays two
server-side script blocks using two different languages. To indicate what language you want to run on a page for server-side code processing. it must be CLS (Common Language Specification) compliant.0 applications. ASP. The one language per Web page applies only to code processed on the server.
274
.
Y
one server-side language per page.NET languages. You can still have multiple client-side languages.NET platform does support multiple languages. If the language is not specified.
I The JScript code and the
VBScript code execute. and ASP. if the language is to interoperate with other .
The .ASP.NET treats the client-side language just like normal HTML markup and lets the user’s browser interpret the script. The .NET
WORK WITH MULTIPLE SERVER-SIDE LANGUAGES
ou can implement ASP.NET applications can use these CLR complaint languages. just as with ASP 3.

This is why there is support for only one language per page.MIGRATE FROM ASP TO ASP.NET compliant language can interoperate.
› Save the file and request it
from the Web server. which are normally interpreted each time they are requested. This is different than traditional ASP pages. a Web Service.NET Web pages are compiled on the Web server.
275
. a Mobile application. or a distributed application).NET
15
ASP.
I The page displays two
server-side script blocks using two different languages. then you could set the Language attribute for the script element.
I An error message appears
because more than two languages cannot be used on the same page. you can leverage this knowledge by creating other applications that run on the CLR (like a Windows Forms application.aspx from the Code Templates directory.
When you know how to program in a language that is CLS compliant. The . CLS-compliant languages enable you to do such things as inherit classes from other CLScompliant classes and pass data types without having to do any special preparation (like buffering a string). If the language is not specified in the @Page directive and you only have server-side code in a <script> tag.
‹ Open
MultipleLanguages.NET Framework provides the Common Language Specification (CLS) to ensure that . CLS describes a fundamental set of language features and defines rules for how those features are used.

you need to (at a minimum) put in the runat="Server" attribute.NET.aspx from the Code Templates directory. To include a server-side <script> block.
WORK WITH SCRIPT BLOCKS
⁄ Open
ScriptBlocks.
I The ASP code executes
without issues. this is not allowed. See page 192 for a cleaner way to implement server-side code. if you desire to use C#.
276
. however.NET page.asp from the Web server. The default is VB. You also should be explicit with the language you are implementing inside of the <script> block.NET and ASP applications with <script> blocks. In ASP. What is new is the concept of using code-behind pages in ASP. What you need to be aware of with <script> blocks is that they are necessary for procedures that are placed inside of the ASP. Before.
¤ Save the file and request
ScriptBlocks. So. Server-side <script> blocks were available and configured the same way.ASP.NET
WORK WITH SCRIPT BLOCKS
Y
ou can embed server-side code in ASP. you will need to put the Language="C#" attribute inside the script element.NET pages. This feature has not changed from ASP applications to ASP.
I The page displays the
SayWelcomeStatement that outputs the header for the page.NET applications. you could put procedures within code delimiters (<% and %>) without issues. with ASP
pages.

Because this is the case. you must declare global variables within <script runat=server> blocks and not between code delimiters (<% and %>). You can do this with the <script> element by specifying an external script file using the src attribute.
I An error message appears
because parentheses were not used when calling the subprocedure.
› Save the file and request it
from the Web server.MIGRATE FROM ASP TO ASP.NET
15
You can put scripts into files that are external to your ASP.aspx from the Code Templates directory.NET. <script runat="server" src="scrStandard. For example.
I The page displays the
SayWelcomeStatement that outputs the header for the page.cs" />.
With ASP.NET page. When you define the src attribute. it is best to define the <script> element as an empty tag.
277
. all content between the opening and closing tags of the <script> element is ignored.
‹ Open
ScriptBlocks.

the subroutine would be closed with code
R
deliminators (<% End Sub %>).mylifetimegoals. it was embedded inside of the function. HTML can not be embedded in a function.ASP.NET. procedures cannot reside inside of code delimiters (<% and %>).
¤ Save the file and request it
from the Web server. Finally. This was done by starting the subroutine (<% Sub RenderHeader() %>) with an open code deliminator and ending with a close code deliminator.NET.Write.aspx from the Code Templates directory. This render function could be called conditionally after the subroutine or function definition (<% Call RenderHeader %>). Traditional render functions that were available in ASP applications are no longer available in ASP.
I The ASP code is able to
use the render function. There are two issues with render functions that violate ASP.NET
USING RENDER FUNCTIONS
ender functions that were in your ASP applications can be replaced with global functions in ASP.NET syntax rules.com</H1>). To resolve this issue.
USING RENDER FUNCTIONS
⁄ Open
RenderFunctions. use Response. This ASP trick is no longer available in ASP.NET applications.
I The page displays the
SayWelcomeStatement that outputs the header for the page. Then the HTML would be written as though it were outside of the function (<H1>Welcome to www. This is resolved by putting the function or subroutine in the serverside <script> blocks. This HTML was not written with the Response.
278
. Render functions were functions that embedded HTML inside of the function. First. Second.Write.

NET framework. This gives you the ability to populate a table with much less code that is easier to follow. but it created very messy code that was hard to troubleshoot.
279
.NET.MIGRATE FROM ASP TO ASP.Write ("html goes in here") method. or you can use the data
binding capabilities that come with the ASP. Because rendering functions are not allowed in ASP. Using rendering functions to build tables from recordsets was very convenient. Refer to Chapter 6 for data binding to server-side controls.aspx from the Code Templates directory.
› Save the file and request it
from the Web server.
‹ Open
RenderFunctions1.
I The page displays the
SayWelcomeStatement that outputs the header for the page. you can either put the functions in a script block using the
Response.NET
15
Rendering functions were commonplace in ASP applications.
I An error message appears
because a render function was used.

NET Web pages are all directives that must be placed on the first line of a page within the same delimiting block. if you wanted to specify the server-side language.NET Web page.ASP.NET Web page. you must use the Language attribute that is available via the @Page directive. LCID and
USING PAGE DIRECTIVES
⁄ Open
PageDirective.NET Web pages. you need to update your pages to use the @Page directive to let ASP.NET page has changed dramatically from what was available with ASP.NET
USING PAGE DIRECTIVES
he standard set of processing directives for an ASP. With ASP. ASP.aspx from the Code Templates directory. For example. for example. Now.
¤ Save the file and request it
from the Web server. you used the @Language directive. you can have as many lines of directives as you need. It uses the @Language directive without the @Page.
280
. but you are able to put them anywhere in your ASP. Standard practice is to put directives at the top of the page.
I The page does not use the
@Page directive.NET know certain processing requirements for an ASP. with ASP.
I The ASP code executes
displaying the header that is contained in a subroutine.
T
CodePage attributes on the @Page directive for ASP.NET Web pages. When migrating from ASP to ASP.NET.
The @Page directive contains many of the directives that were available for ASP Applications.NET <%@Page Language="VB" CodePage="932"%> versus ASP <%@ LANGUAGE="VBSCRIPT" CODEPAGE="932"%>. in ASP pages.

or Server Browser client where the request originated A server downstream from the Web server that processed the request N/A Web server where the request was processed. Downstream. This can give you excellent performance gains.
I The page uses the @Page
› Save the file and request it
from the Web server. The Location attribute has the following options: OPTION
Any Client Downstream None Server
15
LOCATION
Client.
using the @Page directive to determine the server-side language. especially when the page generation involves calls to other machines (like database servers). you can use the @OutputCache directive to control how a page is cached on the server.aspx page are held in memory at the server.NET
When migrating ASP applications to ASP. you have other directives besides the @Page directive. The next time the page is requested. For example. results of a processed .MIGRATE FROM ASP TO ASP. With page caching on the server.
‹ Open
PageDirective.aspx from the Code Templates directory.
I The ASP code executes
281
. You can control the location of where the page is cached via the Location attribute.
directive to set the server-side language. the cached page can be sent as the response instead of regenerating the page.NET applications.

NET applications.aspx from the Web server. you can migrate VBScript code to VB.NET SYNTAX
you want to make.NET in your ASP. At a high level. you will have to make some decisions on how far you want to take your conversion process.
¤ Scroll down the file to
view the code. › Copy the file from the CD-ROM to the working directory. treating you ASP application as a prototype.NET application. keeping the extension as asp. This has the most cost initially.NET
MIGRATE VBSCRIPT TO VB.asp) to ASP. Most likely.
I The ASP code executes
without issues and displays data from the database of the author. but it may be the cheapest option in the long run. If you migrate an existing ASP application to an ASP.ASP.
‹ Save the file and request
SimpleQuery_VBScript.aspx from the Code Templates directory. is to leave the file as an ASP page. The first path is to rewrite your entire application. initially the cheapest cost of migration.aspx) — making the minimal amount of changes required to give the file an aspx extension. The second option is to just convert the ASP pages (*. The third option.NET pages (*. you can take one of three paths depending on the number of changes
MIGRATE VBSCRIPT TO VB. you can make some minor modifications to VBScript to turn it into VB code that will run in the Common Language Runtime (CLR).NET SYNTAX
F
or your server-side code. you will treat this on a page-by-page basis. A migration project can involve one or more of these paths. If you decide to migrate an ASP application that used VBScript for server-side code. VBScript is the most common language used for ASP Applications.
⁄ Open
SimpleQuery_VBScript.
282
.

• Simplifying the language: redesigning those features which made Visual Basic anything less than “basic. the On Error Resume Next and On Error Goto error handling is still available. CONTINUED
283
. Even though this is still available. and remove the Option Explicit code.
I An error message appears
because the Let and Set statements are no longer supported.NET.aspx
extension and then request it from the Web server. keeping the following in mind: • Making the language more consistent: bringing together features of the language with similar purpose.
I An error message
Á Change the language
in the source file from VBScript to VB. add the keyword Page to the directive at the top of the file. Catch.MIGRATE FROM ASP TO ASP. and Finally keywords.” • Improving readability and maintainability: redesigning features that hide too many important details from the programmer. you should take advantage of structured error handling that is available for all CLS (Common Language Specification) compatible languages.NET
15
Microsoft has made VB a first class language.
In VB.
appears because the Option Explicit is not allowed.
‡ Request
SimpleQuery_VBScript. such as type-safe programming.
ˇ Save the file with an . This uses the Try.aspx from the Web server. • Improving robustness: enforcing better practices.

In VBScript.Jet. Language=VBScript will change to @Page Language=VB.
appears because VB requires the argument list to be enclosed in parentheses. which is Single Threaded Apartment (STA).NET.NET pages. you need to be aware that ASP.
. If you mistyped a variable name and did not use Option Explicit. for the ASP pages that you will convert to ASP.NET is the removal of the variant type.
I An error message
— Save the file and request
SimpleQuery_VBScript. but you would use Option Explicit to avoid using variables that were not declared.
284
appears because you cannot create apartment threaded COM components without the aspcompat=true statement in the @Page directive. However.NET
MIGRATE VBSCRIPT TO VB. you have to first change the extension from asp to aspx.NET SYNTAX
N
ot all ASP pages need to be changed when converting to an ASP.aspx from the Web server. A big change from VBScript to VB. Option Explicit is no longer needed because it is the default for ASP. for example. you did not have the
ability to strongly type variables.aspx from the Web server.NET’s threading model is the Multiple Threaded Apartment (MTA).ASP. See page 280 for further details on the @Page directive).
· Save the file and request
SimpleQuery_VBScript.NET page will not be able to use a normal COM object created by VB6.NET SYNTAX (CONTINUED)
° Remove the two Set statements
from the source file. you could generate some interesting bugs.NET application. you must change the processing directives on the ASP page. If you decide to interoperate with COM objects. After the extension is changed. OLEDB.Data Source=" & filePath. Most of the directives on an ASP page will migrate to the @Page directive. To correct this you can set AspCompat="true" for the @Page directive.0. This means that a standard ASP.4.
I An error message
‚ Place parentheses around the
statement "Provider=Microsoft.
MIGRATE VBSCRIPT TO VB.

I The page displays
properly as an ASP. you could have issues with your code. To account for this. ¡ Save the file and request
SimpleQuery_VBScript.Value)
All of your server-side code method calls will require parentheses. This has changed to by value (ByVal) in VB.Write (oRS("FirstName").Write "An error has occurred.Write("An error has occurred. If your code relied on ByRef parameters.Value to the end of the oRs(Index) statement.
I The page renders
without issues but does not display the data because the default properties are not supported in VB.NET page.
Example:
Response. by default." 'Changes to: Response. £ Save the file and request
SimpleQuery_VBScript.MIGRATE FROM ASP TO ASP. VB. In VB6.
285
.")
± Add aspcompat=true to the @Page directive at the top of the page. parameters were.aspx from the Web server. you need to explicitly call the property from the object.NET no longer provides support for default properties.NET
15
If you are not explicit in how parameters are passed.
™ Add .
Example:
Response. passed by reference (ByRef). then you could introduced bugs with this change.NET.Write oRS("FirstName") 'Changes to: Response.aspx from the Web server.

Text. As with VB.
MIGRATE JSCRIPT TO JSCRIPT.
When converting an ASP page (*.
I The ASPCOMPAT=true
attribute is set in the @Page directive.
then you need to set ASPCOMPAT=true for the @Page directive. you have to find the explicit property that retrieves the default property and program using that explicit property.
‹ Scroll down the file. if you have a label on a form. Note that the String is explicitly declared when intitializing the variable.NET SYNTAX
J
Script. you can not access default properties on COM objects.NET.NET
MIGRATE JSCRIPT TO JSCRIPT.
I The filePath statement appears in parentheses. I The set statement is not required in JScript. the first thing you will do is change the file extension to aspx. so you do not have to change it.NET is to VBScript.NET page (*.aspx from the Code Templates directory.
286
. If you are going to access STA (Single Threaded Apartment) COM components.var s : String = lblFirstName. so there are no changes with initializing the object variable.. For example. Jscript will resemble to the C# syntax that is used in this book than the VB syntax. To access the Text property.asp) to an ASP.NET SYNTAX
⁄ Open
SimpleQuery_JScript. you have to give an explicit reference to that property’s data type — JScript. you can not access the Text property by the default property of the label. Because JScript was more of an ObjectOriented language than VBScript. If default properties are used. versus JScript var s = lblFirstName.
¤ Scroll down the file.ASP.aspx) that has JScript in the server-side code.NET . The big difference that you will notice is in the variable declaration.NET code implementation is much closer to the JScript implementation than VB.

property accessors. and more).MIGRATE FROM ASP TO ASP. If you are looking for features and support. There are more books and sample code for these languages.NET Framework. Even though JScript. Improvements in JScript.NET page.
ECMAScript has strong roots with Netscape.NET is a true object-oriented scripting language. you will find more of this with the C# and VB languages.aspx from the Web server. types.
I The page appears properly
as an ASP. packages.
oRs(Index) was changed to oRs(Index).NET
15
JScript. function overloading.NET is Microsoft’s implementation of the ECMA 262 language.Value. it still keeps its “scripting” feel.
I The statement
› Request the
SimpleQuery_JScript.NET can now use classes. classes (with inheritance. crosslanguage support.NET — which is being developed in conjunction with ECMAScript Edition 4 — include true compiled code. Having JScript is beneficial for those who are inline with the standards body that defines ECMAScript. and other “industrial strength” language features for writing robust applications. typed and typeless variables. and access to the . JScript.
287
.

<input type= submit>.
288
. working with the HTML <img> tag on the server.HTMLCONTROLS:
working with the HTML <a> tag on the server.WEB. working with the HTML <form> tag on the server. working with the HTML <table> tag on the server. working with a collection of HTML <td> and <th> tags on the server. working with the HTML <input type= radio> tag on the server.UI. working with the HTML <button> tag on the server. working with the HTML <select > tag on the server. working with the HTML <tr> tag on the server. working with the HTML <td> and <th> tags on the server. working with a collection of HTML <tr> tags on the server. working with the HTML <input type= image> tag on the server.APPENDIX
HTML SERVER CONTROLS
BASIC HTML CONTROLS
NAMESPACE:
HtmlAnchor HtmlButton HtmlForm HtmlGenericControl HtmlImage HtmlInputButton HtmlInputCheckBox HtmlInputFile HtmlInputHidden HtmlInputImage HtmlInputRadioButton HtmlInputText HtmlSelect HtmlTable HtmlTableCell HtmlTableCellCollection HtmlTableRow HtmlTableRowCollection HtmlTextArea
SYSTEM. working with the HTML <input type= file> tag on the server. working with tags not represented by . working with the HTML <input type= checkbox> tag on the server. and <input type= reset> tags on the server. working with the HTML <input type= text> and <input type= password> tags on the server. working with the HTML <input type= hidden> tag on the server. working with the HTML <textarea> tag on the server.NET classes (eg. working with the HTML <input type= button>. <span> and <div> tags).

creating an image to handle user click events. creating a data bound list.UI.
289
. creating a check box.WEB. creating a radio button. creating a multi-column data bound grid. displaying a one-month calendar. creating a multi-selection check box group.ASP. creating single and multi-line text boxes. creating a table cell and manipulating it programmatically. posting data back to the server. creating a drop-down list that contains a single selection. creating and manipulating static text.NET QUICK REFERENCE
A
WEB SERVER CONTROLS
NAMESPACE:
AdRotator Button Calendar CheckBox CheckBoxList DataGrid DataList DropDownList HyperLink Image ImageButton Label LinkButton ListBox Panel RadioButton RadioButtonList Repeater Table Web TableCell TableRow TextBox
SYSTEM. creating a link for navigating to pages. creating a data-bound list that renders a row for every row in the specified data source.WEBCONTROLS:
displaying an advertisement banner. creating a radio button group. displaying a single-selection or multi-selection list box. providing a container for other controls. creating a table and manipulating it programmatically. creating a Web-compatible image. creating a table row and manipulating it programmatically. creating hyperlink-style buttons that post back to the same page on which they originated.

. } // Calling the method: ABC(i). but the object to which the variable refers to cannot be changed in the caller). the changes are made to the value of x. Properties and methods change 0d in the callee are visible to the caller. /* Reference parameters are supported for external objects.
C#
// The method: void ABC(ref int x) { .j). but not internal JScript functions */ comPlusObject.
294
. regardless of how they are declared. End Sub ABC(x) ' Call the procedure
JScript
N/A (objects (including arrays) are passed by reference.APPENDIX
BASICS EXAMPLES
PARAMETER PASSING BY VALUE
Visual Basic
Public Sub ABC(ByVal y As Long) ' The argument Y is passed by value.
JScript
ABC(i. ' If ABC changes y. the changes do not affect x. End Sub ABC(x) ' Call the procedure You can force parameters to be passed by value. } // Calling the method: ABC(ref i). ABC((x))
C#
// The method: void ABC(int x) { .
PARAMETER PASSING BY REFERENCE
Visual Basic
Public Sub ABC(ByRef y As Long) ' The parameter of ABC is declared by reference: ' If ABC changes y.. by enclosing the parameters in extra parentheses..SomeMethod(&foo)..

Windows NT 4. You can copy them to as many computers as you like. Before installing any of the programs on the disc.EXE. You can download updates to the software and important links related to the source code at http://www. Freeware programs are free. * A monitor capable of displaying at least 256 colors or grayscale. You can browse these files directly from the CD-ROM. you can access the files from the START menu. For information on installing different versions of the same program. See Chapter 1. An evaluation version of Adobe Acrobat Reader is also included on the disc. To copy the files to your hard drive. the computer will prompt you to install the software. * A double-speed (8x) or faster CD-ROM drive. "Install the . but they have no techical support. If you do not currently have Adobe Acrobat Reader 5 installed. After installing.
ACROBAT VERSION
The CD-ROM contains an e-version of this book that you can view and search using Adobe Acrobat Reader. your computer must be equipped with the following hardware and software: * A PC with a Pentium III or faster processor.0 Service Pack 6. and utilities. contact the program’s manufacturer. The CD provides files that contain all the sample code used throughout this book. You cannot print the pages or copy text from the Acrobat files. or you can copy them to your hard drive and use them as the basis for your own projects. You will need the .com/authoring/.
INSTALLING AND USING THE SOFTWARE
For your convenience.
300
. or Windows XP Beta 2. and technical support. To find the files on the CD-ROM.
AUTHOR’S SOURCE CODE
For Windows 2000. copyrighted games. * At least 128MB of total RAM installed on your computer." for more information. open the D:\RESOURCES\CODE folder.NET Framework. The files will be placed on your hard drive at C:\ProgramFiles\ASPNET.
PROGRAM VERSIONS
Shareware programs are fully functional. applications. you can register with its author for a nominal fee and receive licenses. the software titles appearing on the CD-ROM are listed alphabetically. You can also use the hyperlinks provided in the text to access all Web pages and Internet references in the book. enhanced versions.threewill.NET framework installed on the machine in order to run the samples. just run the installation program D:\RESOURCES\CODE. free trial versions of copyrighted programs. If you like a particular program. * A network card. make sure that a newer version of the program is not already
T
installed on your computer. * Microsoft Windows 2000.APPENDIX
WHAT’S ON THE CD-ROM
he CD-ROM disc included in this book contains many useful files and programs.
SYSTEM REQUIREMENTS
To use the contents of the CD-ROM.

com.textpad. www. The Antechinus C# Programming Editor from C Point Pty.com.S. Your computer. or you have other programs running that are affecting installation or running of a program. demo. This includes editing and validating XML documents. you may not be able to save projects using these versions.
TROUBLESHOOTING
We tried our best to compile programs that work on most computers with the minimum system requirements. For more information on using Adobe Acrobat Reader.vmware. close the CD-ROM interface and run demos or installations directly from Windows Explorer.
TextPad
Shareware.
Acrobat Reader
Freeware.xmlspy. the software titles on the CD are listed in alphabetical order. c-point. * In Windows. please call the Hungry Minds Customer Service phone number: 800-762-2974 (outside the U. or evaluation versions are usually limited either by time or functionality. Acrobat Reader lets you view the online version of this book. The two most likely problems are that you don’t have enough memory (RAM) for the programs you want to use. see pg.
Antechinus C# Programming Editor
Shareware.com. and editing and transforming stylesheets.5 is a development environment that supports working with XML. From Helios Software Solutions. www. VMWare Workstation lets you create virtual desktop environments on one computer so you can test how your C# programs run in different operating systems. is an alternate graphic programming environment for creating and testing C# programs. 302. For your convenience. If you get error messages like Not enough memory or Setup cannot continue.
XML Spy IDE
Evaluation version. which is included inside the folder of the GNU software.
VMWare Workstation
Trial version. Trial. * Have your local computer store add more RAM to your computer. Ltd.
301
. For example. You can find more information at www. From VMWare. If you still have trouble installing the items from the CD-ROM. From ALTOVA.: 317-572-3994). There are no restrictions on distribution of this software.C
GNU software is governed by its own license. www. however. * Close all running programs. XML Spy IDE v3. editing and validating using Schemas or DTDs.com. try one or more of these methods and then try using the software again: * Turn off any anti-virus software. TextPad is a general-purpose text editor for many different text files including C# code and HTML code. may differ and some programs may not work properly for some reason. See the GNU license for more details.

Acrobat Reader allows you to view Portable Document Format (PDF) files.APPENDIX
USING THE E-VERSION OF THE BOOK
ou can view ASP. Doubleclick the PDFs folder to display the contents of the folder.
Y
CD-ROM disc. This program is provided on the disc.
⁄ Click
to magnify an area of the page. which can display books and magazines on your screen exactly as they appear in printed form.NET: Your visual blueprint for creating Web applications on the .
I Click one of these options to display the page at 100% magnification ( ) or to fit the entire page inside the window ( ).
⁄ Click one of these
options to flip through the pages of a section. double-click the icon for the chapter of the book you want to review. In the window that appears.
302
. The CD-ROM disc allows you to search the contents of each chapter of the book for a specific word or phrase. The CD-ROM disc also provides a convenient way of keeping the book handy while traveling. display the contents of the disc. To view the contents of the book using Acrobat Reader.NET framework on your screen using the CDROM disc included at the back of this book.
You must install Adobe Acrobat Reader on your computer before you can view the book on the
USING THE E-VERSION OF THE BOOK
+
FLIP THROUGH PAGES
First page Previous page Next page Last page
ZOOM IN
¤ Click the area of the
page you want to magnify.

I Repeat Steps 1 and 3 to find the next instance of the text. Look for files with the . visit the Web site at www. You can make searching the book more convenient by copying the .
‹ Click Find to start
the search.
⁄ Click
appears. Click Acrobat Reader and then click Install at the bottom of the screen.html. click Software.adobe.
I The Find dialog box
303
. For more information about Acrobat Reader.
Acrobat Reader is a popular and useful program.
FIND TEXT
¤ Type the text you
want to find.
I The first instance of the text is highlighted.pdf extension. In the screen that appears.
to search for text in the section. Display the contents of the CD-ROM disc and then copy the PDFs folder from the CD to your hard drive. There are many files available on the Web that are designed to be viewed using Acrobat Reader.pdf files to your own computer. Then follow the instructions on your screen to install the program. insert the CDROM disc into a drive.com/products/ acrobat/readermain.C
To install Acrobat Reader. This allows you to easily access the contents of the book at any time.

the user must pay a registration fee or discontinue use. title. By opening the accompanying software packet(s). or create derivative works based on the Software. These limitations may include a requirement that after using the program for a specified period of time.HUNGRY MINDS. You may transfer the Software and user documentation on a permanent basis. Limited Warranty. If the Software is an update or has been updated. Copyright to the individual programs recorded on the Software Media is owned by the author or other authorized copyright owner of each program. including copyright. any transfer must include the most recent update and all prior versions. HMI reserves all rights not expressly granted herein. If you do not agree and do not want to be bound by such terms and conditions. By opening the Software packet(s). This is a license agreement ("Agreement") between you and Hungry Minds. Restrictions On Use and Transfer. (a) HMI warrants that the Software and Software Media are free from defects in materials and workmanship under normal use for a period of sixty (60) days from the date of purchase of this Book. adapt. 2. You must follow the individual requirements and restrictions detailed for each individual program in the What’s on the CD-ROM appendix of this Book. License Grant.
(a) You may only (i) make one copy of the Software for backup or archival purposes. Restrictions on Use of Individual Programs. promptly return the Book and the unopened software packet(s) to the place you obtained them for a full refund. These limitations are also contained in the individual license agreements recorded on the Software Media.
the original for backup or archival purposes. Ownership of the Software and all proprietary rights relating thereto remain with HMI and its licensers. CD-ROM. Inc. and interest. provided that you keep
304
. HMI is the owner of all right. you acknowledge that you have read and accept the following terms and conditions. (ii) copy or reproduce the Software through a LAN or other network system or through any computer subscriber system or bulletin-board system. HMI grants to you (either an individual or entity) a nonexclusive license to use one copy of the enclosed software program(s) (collectively. END-USER LICENSE AGREEMENT
READ THIS. in and to the compilation of the Software recorded on the disk(s) or CD-ROM ("Software Media"). in original or modified form. Ownership. If HMI receives notification within the warranty period of defects in materials or workmanship. decompile. None of the material on this Software Media or listed in this Book may ever be redistributed. (b) You may not reverse engineer. You should carefully read these terms and conditions before opening the software packet(s) included with this book ("Book"). or disassemble the Software. you will be agreeing to abide by the licenses and restrictions for these individual programs that are detailed in the What’s on the CD-ROM appendix and on the Software Media. or other storage device). 3. You may not (i) rent or lease the Software. The Software is in use on a computer when it is loaded into temporary memory (RAM) or installed into permanent memory (hard disk. 5. provided that the transferee agrees to accept the terms and conditions of this Agreement and you retain no copies. 1. 4. or (ii) transfer the Software to a single hard disk. for commercial purposes. ("HMI"). the "Software") solely for your own personal or business purposes on a single computer (whether a standard computer or a workstation component of a multi-user network). HMI will replace the defective Software Media. INC. or (iii) modify.

or disclosure of the Software for or on behalf of the United States of America. Attn. HMI DOES NOT WARRANT THAT THE FUNCTIONS CONTAINED IN THE SOFTWARE WILL MEET YOUR REQUIREMENTS OR THAT THE OPERATION OF THE SOFTWARE WILL BE ERROR FREE. INCLUDING WITHOUT LIMITATION IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. (a) HMI’s entire liability and your exclusive remedy for defects in materials and workmanship shall be limited to replacement of the Software Media. each and every other provision shall remain in full force and effect. loss of business information. or any other
pecuniary loss) arising from the use of or inability to use the Book or the Software. between them and may not be modified or amended except in a writing signed by both parties hereto that specifically refers to this Agreement. EXPRESS OR IMPLIED. Any replacement Software Media will be warranted for the remainder of the original warranty period or thirty (30) days. Indianapolis.S. which may be returned to HMI with a copy of your receipt at the following address: Software Media Fulfillment Department.(b) HMI AND THE AUTHOR OF THE BOOK DISCLAIM ALL OTHER WARRANTIES. 10475 Crosspoint Blvd. or call 1-800-762-2974.. or otherwise unenforceable.
305
. This Agreement constitutes the entire understanding of the parties and revokes and supersedes all prior agreements. or misapplication.227-7013. (b) In no event shall HMI or the author be liable for any damages whatsoever (including without limitation damages for loss of business profits.227-19. whichever is longer.NET: Your visual blueprint for creating Web applications on the . AND/OR THE TECHNIQUES DESCRIBED IN THIS BOOK.Restricted Rights clause at FAR 52. This Agreement shall take precedence over any other documents that may be in conflict herewith. and in similar clauses in the NASA FAR supplement. Hungry Minds. abuse. U. 6. 7. duplication.NET framework. If any one or more provisions contained in this Agreement are held by any court or tribunal to be invalid. THE PROGRAMS. THE SOURCE CODE CONTAINED THEREIN.S. (c) Because some jurisdictions do not allow the exclusion or limitation of liability for consequential or incidental damages. oral or written. Use. the above limitation or exclusion may not apply to you. and you may have other rights that vary from jurisdiction to jurisdiction. Government Restricted Rights. 8. This Limited Warranty is void if failure of the Software Media has resulted from accident. Please allow four to six weeks for delivery. illegal.: ASP. General. its agencies and/or instrumentalities (the "U. WITH RESPECT TO THE SOFTWARE. business interruption. IN 46256. even if HMI has been advised of the possibility of such damages. as applicable. (c) This limited warranty gives you specific legal rights. Inc. or subparagraphs (c) (1) and (2) of the Commercial Computer Software .. Government") is subject to restrictions as stated in paragraph (c)(1)(ii) of the Rights in Technical Data and Computer Software clause of DFARS 252. Remedies.