Tuesday, May 15, 2007

ASP DOT NET

Build Your Own ASP.NET Website
Using C# & VB.NET
(Chapters 1, 2, 3 and 4)
Thank you for downloading the sample chapters of Zak
Ruvalcaba’s book, Build Your Own ASP.NET Website Using C# &
VB.NET, published by SitePoint.
This excerpt includes the Summary of Contents, Information
about the Author, Editors and SitePoint, Table of Contents,
Preface, 4 chapters of the book and the index.
We hope you find this information useful in evaluating this book.
For more information, visit sitepoint.com
Summary of Contents of this Excerpt
Preface ..........................................................................................xi
1. Introduction to .NET and ASP.NET ...................................... 1
2. ASP.NET Basics..................................................................... 31
3. VB.NET and C# Programming Basics .................................. 47
4. Web Forms and Web Controls ............................................. 85
Index......................................................................................... 721
Summary of Additional Book Contents
5. Validation Controls ............................................................. 131
6. Database Design and Development .................................... 161
7. Structured Query Language................................................. 197
8. ADO.NET ............................................................................ 243
9. The DataGrid and DataList Controls ................................. 305
10. DataSets............................................................................. 363
11. Web Applications .............................................................. 421
12. Building an ASP.NET Shopping Cart............................... 451
13. Error Handling................................................................... 497
14. Security and User Authentication..................................... 531
15. Working with Files and Email........................................... 559
16. Rich Controls and User Controls ...................................... 597
17. XML Web Services ............................................................ 645
A. HTML Control Reference ................................................... 683
B. Web Control Reference....................................................... 699
C. Validation Control Reference ............................................. 715
Build Your Own ASP.NET
Website Using C# & VB.NET
by Zak Ruvalcaba
Build Your Own ASP.NET Website Using C# & VB.NET
by Zak Ruvalcaba
Copyright © 2004 SitePoint Pty. Ltd.
Expert Reviewer: Kevin Yank Editor: Georgina Laidlaw
Technical Editor: Rich Deeson Managing Editor: Simon Mackie
Index Editor: Bill Johncocks Cover Design: Julian Carroll
Printing History:
First Edition: April 2004
Notice of Rights
All rights reserved. No part of this book may be reproduced, stored in a retrieval system or transmitted
in any form or by any means, without the prior written permission of the publisher, except in the
case of brief quotations embodied in critical articles or reviews.
Notice of Liability
The author and publisher have made every effort to ensure the accuracy of the information herein.
However, the information contained in this book is sold without warranty, either express or implied.
Neither the authors and SitePoint Pty. Ltd., nor its dealers or distributors will be held liable for any
damages to be caused either directly or indirectly by the instructions contained in this book, or by
the software or hardware products described herein.
Trademark Notice
Rather than indicating every occurrence of a trademarked name as such, this book uses the names
only in an editorial fashion and to the benefit of the trademark owner with no intention of infringement
of the trademark.
Published by SitePoint Pty. Ltd.
424 Smith Street Collingwood
VIC Australia 3066.
Web: www.sitepoint.com
Email: business@sitepoint.com
ISBN 0–9579218–6–1
Printed and bound in the United States of America
About The Author
Zak Ruvalcaba has been designing, developing and researching for the Web since 1995.
He holds a Bachelor’s Degree from San Diego State University and a Master of Science
in Instructional Technology from National University in San Diego.
In the course of his career, Zak has developed Web applications for such companies as
Gateway, HP, Toshiba, and IBM. More recently, he’s worked as a wireless software engineer
developing .NET solutions for Goldman Sachs, TV Guide, The Gartner Group, Microsoft
and Qualcomm. Currently, Zak holds a programming position with ADCS Inc. in San
Diego supporting internal .NET applications.
Previous books by Zak Ruvalcaba include The 10 Minute Guide to Dreamweaver 4 (Que
Publishing) and Dreamweaver MX Unleashed (Sams Publishing). He also lectures on various
technologies and tools including Dreamweaver and ASP.NET for the San Diego Community
College District.
About The Expert Reviewer
As Technical Director for SitePoint, Kevin Yank oversees all of its technical publications—
books, articles, newsletters and blogs. He has written over 50 articles for SitePoint
on technologies including PHP, XML, ASP.NET, Java, JavaScript and CSS, but is perhaps
best known for his book, Build Your Own Database Driven Website Using PHP & MySQL,
also from SitePoint.
Having graduated from McGill University in Montreal with a Bachelor of Computer Engineering,
Kevin now lives in Melbourne, Australia. In his spare time he enjoys flying light
aircraft and learning the fine art of improvised acting. Go you big red fire engine!
About The Technical Editor
Rich Deeson wrote his first programs at the age of 10 on his father’s work machine, a
380Z with 256k RAM. Since then, his career has taken him around Europe, and has
taught him the ins and outs of many languages, from C++ to Java, from QuickBasic (the
precursor to Visual Basic) to VB.NET, from Perl and CGI to JSP and ASP.NET. Currently,
he is lead JSP developer at ICTI in the UK, and most of his free time is taken up at University,
having returned to study last year.
About SitePoint
SitePoint specializes in publishing fun, practical and easy-to-understand content for Web
Professionals. Visit http://www.sitepoint.com/ to access our books, newsletters, articles
and community forums.
For my wife Jessica.
ii
Table of Contents
Preface ..................................................................................................... xi
Who Should Read This Book? ............................................................ xii
What’s Covered In This Book? ........................................................... xii
The Book’s Website ............................................................................ xv
The Code Archive ....................................................................... xv
Updates and Errata .................................................................... xvi
The SitePoint Forums ........................................................................ xvi
The SitePoint Newsletters .................................................................. xvi
Your Feedback ................................................................................... xvi
Acknowledgements ........................................................................... xvii
1. Introduction to .NET and ASP.NET ......................................................... 1
What is .NET? ..................................................................................... 1
What is ASP.NET? .............................................................................. 2
What Do I Need? ................................................................................ 5
Installing the Required Software ........................................................... 5
Installing Internet Information Services (IIS) ................................ 6
Installing Internet Explorer .......................................................... 7
Installing the .NET Framework and SDK ..................................... 8
Configuring IIS ............................................................................ 9
Installing Microsoft Access ......................................................... 18
Installing SQL Server Desktop Engine (MSDE) .......................... 19
Installing and Configuring Web Data Administrator ................... 22
Your First ASP.NET Page ................................................................... 23
The ASP.NET Support Site ................................................................ 29
Summary ........................................................................................... 29
2. ASP.NET Basics .................................................................................... 31
ASP.NET Page Structure .................................................................... 32
Directives .................................................................................. 33
Code Declaration Blocks ............................................................ 34
Code Render Blocks ................................................................... 36
ASP.NET Server Controls .......................................................... 37
Server-Side Comments ............................................................... 38
Server-Side Include Directives .................................................... 39
Literal Text and HTML Tags ...................................................... 39
View State ......................................................................................... 40
Working With Directives ................................................................... 43
ASP.NET Languages .......................................................................... 44
VB.NET .................................................................................... 44
C# ............................................................................................. 45
Summary .......................................................................................... 45
3. VB.NET and C# Programming Basics ..................................................... 47
Programming Basics ........................................................................... 47
Control Events and Subroutines ................................................. 48
Page Events ............................................................................... 52
Variables and Variable Declaration ............................................. 54
Arrays ........................................................................................ 57
Functions ................................................................................... 59
Operators ................................................................................... 63
Conditional Logic ...................................................................... 65
Loops ........................................................................................ 66
Understanding Namespaces ............................................................... 70
Object Oriented Programming Concepts ............................................ 72
Objects ...................................................................................... 73
Properties .................................................................................. 74
Methods .................................................................................... 75
Classes ....................................................................................... 76
Scope ......................................................................................... 78
Events ........................................................................................ 78
Understanding Inheritance ......................................................... 79
Separating Code From Content With Code-Behind ............................ 79
Summary ........................................................................................... 84
4. Web Forms and Web Controls .............................................................. 85
Working with HTML Controls ........................................................... 86
HtmlAnchor .............................................................................. 87
HtmlButton ............................................................................... 88
HtmlForm ................................................................................. 88
HtmlImage ................................................................................ 89
HtmlGenericControl .................................................................. 89
HtmlInputButton ...................................................................... 90
HtmlInputCheckBox .................................................................. 90
HtmlInputFile ............................................................................ 91
HtmlInputHidden ...................................................................... 91
HtmlInputImage ........................................................................ 91
HtmlInputRadioButton .............................................................. 92
HtmlInputText .......................................................................... 92
HtmlSelect ................................................................................. 92
HtmlTable, HtmlTableRow and HtmlTableCell .......................... 93
HtmlTextArea ............................................................................ 94
Order the print version of this book to get all 700+ pages! iv
Build Your Own ASP.NET Website Using C# & VB.NET
Processing a Simple Form ................................................................... 94
Introduction to Web Forms ................................................................ 97
Introduction to Web Controls ............................................................ 98
Basic Web Controls ................................................................. 100
Handling Page Navigation ................................................................ 107
Using The HyperLink Control .................................................. 108
Navigation Objects And Their Methods .................................... 108
Postback .......................................................................................... 112
Formatting Controls with CSS ......................................................... 114
Types of Styles and Style Sheets .............................................. 115
Style Properties ........................................................................ 117
The CssClass Property ............................................................. 118
A Navigation Menu and Web Form for the Intranet Application ....... 119
Introducing the Dorknozzle Intranet Application ..................... 119
Building the Navigation Menu ................................................. 120
Create the Corporate Style Sheet ............................................. 124
Design the Web Form for the Helpdesk Application ................. 127
Summary ......................................................................................... 129
5. Validation Controls ............................................................................ 131
Client-Side vs. Server-Side Validation ............................................... 131
Configuring Client-Side Validation ................................................... 133
Using Validation Controls ................................................................ 135
RequiredFieldValidator ............................................................ 135
CompareValidator .................................................................... 139
RangeValidator ........................................................................ 145
ValidationSummary ................................................................. 149
RegularExpressionValidator ...................................................... 153
CustomValidator ..................................................................... 157
Summary ......................................................................................... 159
6. Database Design and Development .................................................... 161
An Introduction to Databases ........................................................... 161
The Database Management System .................................................. 163
Creating the Database for the Intranet Application ................... 164
Designing Tables for the Intranet Application ........................... 166
Columns and Data Types ......................................................... 169
Inserting Rows ......................................................................... 178
Beyond the Basics ............................................................................ 182
Keys ........................................................................................ 182
Relationship Management ........................................................ 185
Stored Procedures .................................................................... 194
v Order the print version of this book to get all 700+ pages!
Queries .................................................................................... 195
Security ................................................................................... 195
Summary ......................................................................................... 196
7. Structured Query Language ................................................................ 197
Basic SQL ........................................................................................ 198
Working with the Query Editor in Access ................................. 199
Working with the Query Editor in Web Data Administrator ..... 203
The SELECT Query ................................................................. 204
The INSERT Statement ........................................................... 214
The UPDATE Statement ......................................................... 217
The DELETE Statement .......................................................... 220
Other Clauses .................................................................................. 220
The ORDER BY Clause ............................................................ 220
The GROUP BY and HAVING Clauses .................................... 222
Expressions ...................................................................................... 222
Operators ......................................................................................... 224
Functions ......................................................................................... 226
Date and Time Functions ......................................................... 227
Aggregate Functions ................................................................. 229
Arithmetic Functions ............................................................... 233
String Functions ...................................................................... 235
Joins ................................................................................................ 236
INNER JOIN ........................................................................... 236
OUTER JOIN .......................................................................... 238
Subqueries ....................................................................................... 240
The IN Operator ...................................................................... 240
The Embedded SELECT Statement .......................................... 241
Summary ......................................................................................... 241
8. ADO.NET ........................................................................................... 243
An Introduction to ADO.NET .......................................................... 244
Performing Common Database Queries ............................................ 253
Responding to User Interaction ................................................ 254
Using Parameters with Queries ................................................. 257
Using the Repeater Control ...................................................... 260
Data Binding ........................................................................... 272
Inserting Records ............................................................................. 275
Updating Records ............................................................................ 279
Deleting Records .............................................................................. 288
Handling Updates with Postback ...................................................... 292
Working with Transactions .............................................................. 295
Order the print version of this book to get all 700+ pages! vi
Build Your Own ASP.NET Website Using C# & VB.NET
Improving Performance with Stored Procedures ................................ 298
Summary ......................................................................................... 303
9. The DataGrid and DataList Controls ................................................... 305
Working with DataGrids .................................................................. 306
Customizing DataGrids ............................................................ 311
Creating a Master/Detail Form with the HyperLinkColumn ...... 316
Event Bubbling ........................................................................ 323
Working with the EditCommandColumn ................................. 325
Using Templates ...................................................................... 333
Adding ButtonColumns to Delete Rows within a DataGrid ....... 336
Using the DataList Control .............................................................. 339
Customizing DataLists Using Styles ......................................... 344
Editing Items within a DataList ................................................ 346
Creating a Navigation Menu using DataLists ............................ 354
Summary ......................................................................................... 361
10. DataSets .......................................................................................... 363
Understanding DataSets .................................................................. 364
DataSet Elements .................................................................... 367
Binding DataSets to Controls ................................................... 368
Creating a DataGrid that Pages ................................................ 376
Understanding DataTables ............................................................... 379
Creating DataTables Programmatically ..................................... 380
Creating DataColumns Programmatically ................................. 385
Creating DataRows Programmatically ....................................... 387
Setting DataTable Properties Programmatically ........................ 390
Setting DataColumn Properties Programmatically .................... 393
Adding DataColumn Values ..................................................... 398
Defining DataRelations Between DataTables ............................ 402
Understanding DataViews ............................................................... 407
Filtering DataViews ................................................................. 408
Sorting Columns in a DataGrid ................................................ 410
Updating a Database from a Modified DataSet ................................. 414
Summary ......................................................................................... 420
11. Web Applications ............................................................................. 421
Overview of ASP.NET Applications .................................................. 422
Using Application State ................................................................... 423
Working With the Global.asax File ........................................... 428
Using the Web.config File ................................................................ 433
Caching ASP.NET Applications ........................................................ 437
Using Page Output Caching ..................................................... 438
vii Order the print version of this book to get all 700+ pages!
Using Page Data Caching ......................................................... 442
Working with User Sessions ............................................................. 446
Summary ......................................................................................... 449
12. Building an ASP.NET Shopping Cart .................................................. 451
What Is a Shopping Cart? ................................................................ 451
The Intranet Shopping Cart ............................................................. 452
Defining the Cart Framework ................................................... 455
Building the Employee Store Interface ..................................... 459
Showing Items and Creating the Cart Structure ........................ 465
Adding to the Cart ................................................................... 470
Keeping the Order Total .......................................................... 476
Modifying Cart Quantities ....................................................... 478
Removing Items from the Cart ................................................. 484
Processing Orders Using PayPal ........................................................ 486
Creating a PayPal Account ....................................................... 486
Integrating the Shopping Cart with your PayPal Account .......... 487
Summary ......................................................................................... 496
13. Error Handling ................................................................................. 497
Introduction to Error Handling ........................................................ 497
Types of Errors ........................................................................ 498
Viewing Error Information ....................................................... 503
Handling Errors ....................................................................... 506
Using the .NET Debugger ................................................................ 522
Attaching a Process to the Debugger ......................................... 523
Creating Breakpoints and Stepping Through Code ................... 525
Creating Watches .................................................................... 529
Summary ......................................................................................... 530
14. Security and User Authentication ..................................................... 531
Securing ASP.NET Applications ....................................................... 531
Working with Forms Authentication ................................................ 532
Configuring Forms Authentication ........................................... 537
Configuring Forms Authorization ............................................. 538
Web.config File Authentication ................................................ 540
Database Authentication .......................................................... 542
Custom Error Messages ............................................................ 548
Logging Users Out ................................................................... 550
Building Your Own Authentication Ticket ........................................ 551
Summary ......................................................................................... 557
Order the print version of this book to get all 700+ pages! viii
Build Your Own ASP.NET Website Using C# & VB.NET
15. Working with Files and Email ........................................................... 559
Writing to Text Files ........................................................................ 560
Reading from Text Files ................................................................... 565
Accessing Directories and Directory Information .............................. 568
Working with Directory and File Paths ............................................. 573
Uploading Files ................................................................................ 576
Sending Email in ASP.NET .............................................................. 579
Configuring IIS to Send Email .................................................. 580
Creating the Company Newsletter Page .................................... 582
Serialization ..................................................................................... 588
Summary ......................................................................................... 595
16. Rich Controls and User Controls ....................................................... 597
Introduction to Rich Controls .......................................................... 597
An Introduction to XML and XSLT .......................................... 598
Simplifying it All with the Xml Control .................................... 603
The AdRotator Control ............................................................ 609
The Calendar Control .............................................................. 611
Introduction to User Controls .......................................................... 625
Globalizing Content with User Controls ................................... 626
Exposing Properties and Methods in User Controls ................... 630
Loading User Controls Programmatically .......................................... 636
Summary ......................................................................................... 643
17. XML Web Services ........................................................................... 645
Introduction to XML Web Services .................................................. 646
Understanding Web Service Standards ..................................... 649
A Simple Calculator Web Service ............................................. 653
Consuming the Calculator Web Service .................................... 658
Using WSDL to Consume Third-Party Web Services ........................ 663
Finding the Service and Creating the Assembly ......................... 664
Registering to Use the Google Search Service ............................ 665
Consuming the Google Search Service ...................................... 667
Web Service and Database Interaction ............................................. 676
Consuming the Company Events Service .................................. 679
Summary ......................................................................................... 681
A. HTML Control Reference ................................................................... 683
HtmlAnchor Control ........................................................................ 683
HtmlButton Control ........................................................................ 684
HtmlForm Control ........................................................................... 685
HtmlGeneric Control ....................................................................... 685
HtmlImage Control .......................................................................... 686
ix Order the print version of this book to get all 700+ pages!
HtmlInputButton Control ................................................................ 687
HtmlInputCheckBox Control ........................................................... 688
HtmlInputFile Control ..................................................................... 688
HtmlInputHidden Control ............................................................... 689
HtmlInputImage Control ................................................................. 690
HtmlInputRadioButton Control ....................................................... 691
HtmlInputText Control ................................................................... 692
HtmlSelect Control .......................................................................... 693
HtmlTable Control .......................................................................... 694
HtmlTableCell Control .................................................................... 695
HtmlTableRow Control .................................................................... 696
HtmlTextArea Control ..................................................................... 697
B. Web Control Reference ...................................................................... 699
AdRotator Control ........................................................................... 701
Button Control ................................................................................ 701
Calendar Control ............................................................................. 702
CheckBox Control ............................................................................ 704
CheckBoxList Control ...................................................................... 704
DropDownList Control .................................................................... 705
HyperLink Control .......................................................................... 706
Image Control .................................................................................. 707
ImageButton Control ....................................................................... 707
Label Control ................................................................................... 708
LinkButton Control ......................................................................... 708
ListBox Control ............................................................................... 709
Literal Control ................................................................................. 710
Panel Control ................................................................................... 710
PlaceHolder Control ........................................................................ 710
RadioButton Control ....................................................................... 710
RadioButtonList Control .................................................................. 711
TextBox Control .............................................................................. 712
Xml Control ..................................................................................... 713
C. Validation Control Reference ............................................................. 715
The RequiredFieldValidator Control ................................................. 715
The CompareValidator Control ........................................................ 716
The RangeValidator Control ............................................................ 717
The ValidationSummary Control ..................................................... 718
The RegularExpressionValidator Control .......................................... 719
The CustomValidator Control .......................................................... 719
Index ....................................................................................................... 721
Order the print version of this book to get all 700+ pages! x
Build Your Own ASP.NET Website Using C# & VB.NET
Preface
Here I am, seven years after the inception of ASP, still using a technology that I
initially only glanced over as I searched for a server-side alternative to ColdFusion.
It was 1997, a big year for me. I graduated college, landed a job as a creative
director, and decided it was time to build on my experience with HTML and
JavaScript. I didn’t consider myself a programmer—my true passions lay in
design—but within months of starting my new job, I was developing the firm’s
Website, Intranet, and company portal. The dynamic portions of these projects
were developed using CGI written in Perl. As you might expect, I was lost! After
looking around, I decided ColdFusion was my best bet—the language seemed to
parallel closely the constructs of HTML, and I found it easy to pick up. However,
I soon discovered that ColdFusion’s limitations in terms of accessing a server’s
file system, and error handling, posed problems.
ASP and VBScript seemed like the best alternative. I’d taken basic programming
classes in college, and I guess they helped, because these two technologies came
easily to me. Shortly thereafter, I went back to school and got into Visual Basic,
COM, DCOM, and more. A whole new world was opening up to me through
simplicity offered by ASP.
Seven years, and countless Windows, Web, and wireless applications later, I still
swear by the next generation of a technology that I’ve always considered superior
to the major alternatives. ASP.NET represents a new and efficient way of creating
Web applications using the programming language with which you feel most
comfortable. Though it can take some time to learn, ASP.NET is simple to use.
Whether you want to create Web Forms complete with Web and validation
controls, or you aim to build a feature-rich shopping cart using DataTables, all
the tools you’ll need to get up and running are immediately available, easy to
install, and require very little initial configuration.
My guess is that if you’re reading this book, you’re in the same boat I was: a
longtime designer dabbling with HTML. Or maybe you’re an advanced HTML
and JavaScript developer looking to take the next step. Perhaps you’re a seasoned
PHP, JSP, or ColdFusion veteran who wants to know what all the fuss is about.
Whatever the case, I’m sure you’ll find this book helpful in showing you how
simple and feature-rich ASP.NET really is.
Who Should Read This Book?
This book is aimed at beginner, intermediate, and advanced Web designers
looking to make the leap into server-side programming with ASP.NET. You’ll be
expected to feel comfortable with HTML, as very little explanation is provided
here.
By the end of this book, you should have a firm grasp on what it takes to download
and install ASP.NET and the .NET Framework, configure and start your
Web server, create and work with basic ASP.NET pages, install and run either
Access or MSDE, create database tables, work with advanced, dynamic ASP.NET
pages that query, insert, update, and delete information within a database.
All examples provided in the book are written in both Visual Basic .NET and
C#, the two most popular languages for writing ASP.NET Websites. They start
at beginners’ level and work up. As such, no prior knowledge of the two languages
is required in order to read, learn from, and apply the knowledge provided in this
book. Experience with other programming or scripting languages (such as JavaScript)
will certainly grease the wheels, however, and will enable you to grasp the
fundamental programming concepts more quickly.
What’s Covered In This Book?
This book is comprised of the following seventeen chapters. Read them from
beginning to end to gain a complete understanding of the subject, or skip around
if you feel you need a refresher on a particular topic.
Chapter 1: Introduction to .NET and ASP.NET
Before you can start building your database-driven Web presence, you must
ensure you have the right tools for the job. In this first chapter, I’ll tell you
how to find, download, and configure the .NET Framework. I’ll explain where
the Web server is located and how to install and configure it. Next, we’ll walk
through the installation of two Microsoft database solutions: Access and
MSDE. Finally, we’ll create a simple ASP.NET page to make sure that
everything’s running and properly configured.
Chapter 2: ASP.NET Basics
In this chapter, you’ll create your first useful ASP.NET page. We’ll cover all
of the parts that make up a typical ASP.NET page, including directives,
controls, and code. We’ll then walk through the process of deployment, fo-
Order the print version of this book to get all 700+ pages! xii
Preface
cusing specifically on allowing the user to view the processing of a simple
ASP.NET page through the Web browser.
Chapter 3: VB.NET and C# Programming Basics
In this chapter, we’ll look at two of the programming languages used to create
ASP.NET pages: VB.NET and C#. You’ll learn about the syntax of the two
languages as we explore the concepts of variables, data types, conditionals,
loops, arrays, functions, and more. Finally, we’ll see how the two languages
accommodate Object Oriented Programming principles by allowing you to
work with classes, methods, properties, inheritance, and more.
Chapter 4: Web Forms and Web Controls
ASP.NET is bundled with hundreds of controls that you can use within your
applications, including HTML controls, Web controls, and more. This chapter
will introduce you to the wonderful world of Web controls and how Microsoft
basically reinvented HTML forms.
Chapter 5: Validation Controls
This chapter introduces validation controls. With validation controls, Microsoft
basically eliminated the heartache of fumbling through and configuring
tired, reused client-side validation scripts.
Chapter 6: Database Design and Development
Undoubtedly one of the most important chapters in the book, Chapter 6 will
help you prepare to work with databases in ASP.NET. We’ll cover the essentials
you’ll need in order to create a database using either Access or MSDE.
In this chapter, we’ll begin to build the database for our project.
Chapter 7: Structured Query Language
This chapter introduces the language we’ll use to facilitate communications
between the database and the Web application: Structured Query Language,
or SQL. After a gentle introduction to the basic concepts of SQL, we’ll move
on to more advanced topics such as expressions, conditions, and joins.
Chapter 8: ADO.NET
The next logical step in database driven Web applications involves ADO.NET.
This chapter explores the essentials of the technology, and will have you
reading data in a database directly from your Web applications in just a few
short steps. We’ll then help you begin the transition from working with
static applications to database-driven ones.
xiii Order the print version of this book to get all 700+ pages!
What’s Covered In This Book?
Chapter 9: The DataGrid and DataList Controls
Taking ADO.NET further, this chapter shows you how to utilize the DataGrid
and DataList controls provided within the .NET Framework. DataGrid and
DataList play a crucial role in the simplicity of presenting information with
ASP.NET. In learning how to present database data within your applications
in a cleaner and more legible format, you’ll gain an understanding of the
concept of data binding at a much higher level.
Chapter 10: DataSets
One of the most challenging concepts to grasp when transitioning from ASP
to ASP.NET is that of disconnected data. In this chapter, you’ll learn how
to use DataSets to create virtual database tables within your Web applications.
You’ll also learn how to work with DataTables, and how to filter and sort
information within DataSets and DataTables using DataViews.
Chapter 11: Web Applications
Chapter 11 explores the features of a Web application. We’ll discuss the
many parts of the Web.config file in depth, and understand how to work
with the Global.asax file, application state, and session state. Finally, we’ll
look at the ways in which caching can improve the performance of your Web
applications.
Chapter 12: Building an ASP.NET Shopping Cart
In this chapter, we’ll create an ASP.NET shopping cart. Using the topics
we’ve explored in previous chapters, including DataTables and session state,
we’ll walk through the process of building a purely memory-resident shopping
cart for our project.
Chapter 13: Error Handling
Learning to handle gracefully unforeseen errors within your Web applications
is the topic of this chapter. Initially, we’ll discuss basic page and code techniques
you can use to handle errors. We’ll then talk about the debugger that’s
included with the .NET Framework SDK and understand how to leverage it
by setting breakpoints, reading the autos and locals window, and setting
watches. Finally, we’ll discuss how you can take advantage of the Event
Viewer to write errors as they occur within your applications.
Chapter 14: Security and User Authentication
This chapter will introduce you to securing your Web applications with
ASP.NET. Here, we’ll discuss the various security models available, including
IIS, Forms, Windows, and Passport, and discusses the roles the Web.config
and XML files can play.
Order the print version of this book to get all 700+ pages! xiv
Preface
Chapter 15: Working with Files and Email
In this chapter, we’ll look at accessing your server’s file system, including
drives, files, and the network. The chapter will then show you how to work
with file streams to create text files, write to text files, and read from text
files on your Web server. Finally, you’ll learn how to send emails using
ASP.NET.
Chapter 16: Rich Controls and User Controls
Chapter 16 explores ASP.NET’s rich controls. You’ll learn how to create an
interactive meeting scheduler using the Calendar control, sessions, and serialization.
You’ll also learn how to format XML with XSLT utilizing the Xml
control. Lastly, we’ll look at randomizing banner advertisements on your site
using the AdRotator control.
Chapter 17: XML Web Services
The newest buzzword in the development community is “Web Services,”
and this chapter hopes to shed some light on the topic. We first define Web
Services before moving on to explain how they’re used, where they can be
found, and what WSDL and UDDI are. In this chapter, you’ll create a couple
of different Web Services from scratch, including one that queries your
database to present information within a Web application. You’ll also learn
how to build a search application using the Google Search Web Service.
The Book’s Website
Located at http://www.sitepoint.com/books/aspnet1/, the Website that supports
this book will give you access to the following facilities:
The Code Archive
As you progress through this book, you’ll note a number of references to the code
archive. This is a downloadable ZIP archive that contains complete code for all
the examples presented in the book.
The archive contains one folder for each chapter of the book. Each of these folders
in turn contains CS and VB subfolders, which contain the C# and VB.NET versions
of all the examples for that chapter, respectively. In later chapters, these files are
further divided into two more subfolders: Lessons for standalone examples
presented for a single chapter, and Project for files associated with the
Dorknozzle Intranet Application, a larger-scale project that we’ll work on
throughout the book, which I’ll introduce in Chapter 4.
xv Order the print version of this book to get all 700+ pages!
The Book’s Website
Updates and Errata
No book is perfect, and we expect that watchful readers will be able to spot at
least one or two mistakes before the end of this one. The Errata page on the
book’s Website will always have the latest information about known typographical
and code errors, and necessary updates for new releases of ASP.NET and the
various Web standards that apply.
The SitePoint Forums
If you’d like to communicate with me or anyone else on the SitePoint publishing
team about this book, you should join SitePoint’s online community[2]. The
.NET forum[3] in particular can offer an abundance of information above and
beyond the solutions in this book.
In fact, you should join that community even if you don’t want to talk to us, because
there are a lot of fun and experienced Web designers and developers hanging
out there. It’s a good way to learn new stuff, get questions answered in a hurry,
and just have fun.
The SitePoint Newsletters
In addition to books like this one, SitePoint publishes free email newsletters including
The SitePoint Tribune and The SitePoint Tech Times. In them, you’ll read
about the latest news, product releases, trends, tips, and techniques for all aspects
of Web development. If nothing else, you’ll get useful ASP.NET articles and tips,
but if you’re interested in learning other technologies, you’ll find them especially
valuable. Sign up to one or more SitePoint newsletters at
http://www.sitepoint.com/newsletter/.
Your Feedback
If you can’t find your answer through the forums, or if you wish to contact us
for any other reason, the best place to write is . We have
a well-manned email support system set up to track your inquiries, and if our
support staff members are unable to answer your question, they will send it
[2] http://www.sitepoint.com/forums/
[3] http://www.sitepoint.com/forums/forumdisplay.php?f=141
Order the print version of this book to get all 700+ pages! xvi
Preface
straight to me. Suggestions for improvements as well as notices of any mistakes
you may find are especially welcome.
Acknowledgements
First and foremost, I’d like to thank the SitePoint team for doing such a great
job in making this book possible, for being understanding as deadlines inevitably
slipped past, and for the team’s personal touch, which made it a pleasure to work
on this project.
Particular thanks go to Simon Mackie, whose valuable insight and close cooperation
throughout the process has tied up many loose ends and helped make this
book both readable and accessible. Thanks again Simon for allowing me to write
this book—I appreciate the patience and dedication that you’ve shown.
Finally, returning home, I’d like to thank my wife Jessica, whose patience, love
and understanding throughout continue to amaze me.
xvii Order the print version of this book to get all 700+ pages!
Acknowledgements
xviii
Introduction to .NET and
ASP.NET 1
It’s being touted as the “next big thing.” Microsoft has invested millions in marketing,
advertising, and development to produce what it feels is the foundation
of the future Internet. It’s a corporate initiative, the strategy of which was deemed
so important, that Bill Gates himself, Microsoft Chairman and CEO, decided to
oversee personally its development. It is a technology that Microsoft claims will
reinvent the way companies carry out business globally for years to come. In his
opening speech at the Professional Developers’ Conference (PDC) held in Orlando
Florida in July of 2000, Gates stated that a transition of this magnitude only
comes around once every five to six years. What is this show-stopping technology?
It’s .NET.
What is .NET?
.NET is the result of a complete make-over of Microsoft’s software development
products, and forms part of the company’s new strategy for delivering software
as a service. The key features that .NET offers include:
 .NET Platform: The .NET platform includes the .NET Framework and tools
to build and operate services, clients, and so on. ASP.NET, the focus of this
book, is a part of the .NET Framework.
 .NET Products: .NET products currently include MSN.NET, Office.NET,
Visual Studio.NET, and Windows Server 2003, originally known as Windows
.NET Server. This suite of extensively revised systems provides developers
with a friendly, usable environment in which they may create applications
with a range of programming languages including C++. NET, Visual Basic.
NET, ASP.NET, and C#. Because all these products are built on top of
.NET, they all share key components, and underneath their basic syntaxes
you’ll find they have much in common.
 .NET My Services: An initiative formerly known as "Hailstorm", .NET My
Services is a set of XML Web Services1 currently being provided by a host of
partners, developers, and organizations that are hoping to build corporate
services and applications for devices and applications, as well as the Internet.
The collection of My Services currently extends to passport, messenger, contacts,
email, calendars, profiles, lists, wallets, location, document stores, application
settings, favorite Websites, devices owned, and preferences for receiving
alerts.
The book focuses on one of the core components within the .NET Framework:
ASP.NET.
What is ASP.NET?
For years now, Active Server Pages (ASP) has been arguably the leading choice
for Web developers building dynamic Websites on Windows Web servers. ASP
has gained popularity by offering the simplicity of flexible scripting via several
languages. That, combined with the fact that it’s built into every Microsoft
Windows-based Web server, has made ASP a difficult act to follow.
Early in 2002, Microsoft released its new technology for Internet development.
Originally called ASP+, it was finally released as ASP.NET, and represents a leap
forward from ASP both in sophistication and productivity for the developer. It
continues to offer flexibility in terms of the languages it supports, but instead of
a range of simple scripting languages, developers can now choose between several
fully-fledged programming languages. Development in ASP.NET requires not
only an understanding of HTML and Web design, but also a firm grasp of the
concepts of object-oriented programming and development.
In the next few sections, I’ll introduce you to the basics of ASP.NET. I’ll walk
you through installing it on your Web server, and take you through a simple
1Don’t worry if you don’t yet know what a Web Service is. I’ll explain all about them in Chapter 17.
Order the print version of this book to get all 700+ pages! 2
Chapter 1: Introduction to .NET and ASP.NET
dynamic example that demonstrates how ASP.NET pages are constructed. First,
let’s define what ASP.NET actually is.
ASP.NET is a server-side technology for developing Web applications based
on the Microsoft .NET Framework. Let’s break that jargon-filled sentence
down.
ASP.NET is server-side; that is, it runs on the Web server. Most Web designers
start by learning client-side technologies like HTML, JavaScript, and Cascading
Style Sheets (CSS). When a Web browser requests a Web page created with clientside
technologies, the Web server simply grabs the files that the browser (the
client) requests and sends them down the line. The client is entirely responsible
for reading the code in the files and interpreting it to display the page on the
screen. Server-side technologies, like ASP.NET, are different. Instead of being
interpreted by the client, server-side code (for example, the code in an ASP.NET
page) is interpreted by the Web server. In the case of ASP.NET, the code in the
page is read by the server and used dynamically to generate standard
HTML/JavaScript/CSS that is then sent to the browser. As all processing of
ASP.NET code occurs on the server, it’s called a server-side technology. As Figure
1.1 shows, the user (client) only sees the HTML, JavaScript, and CSS within
the browser. The server (and server-side technology) is entirely responsible for
processing the dynamic portions of the page.
Figure 1.1. The Web server is responsible for processing the
server-side code and presenting the output to the user (client).
ASP.NET is a technology for developing Web applications. A Web application
is just a fancy name for a dynamic Website. Web applications usually (but not
always) store information in a database on the Web server, and allow visitors to
3 Order the print version of this book to get all 700+ pages!
What is ASP.NET?
the site to access and change that information. Many different programming
technologies and supported languages have been developed to create Web applications;
PHP, JSP (using Java), CGI (using Perl), and ColdFusion (using CFML)
are just a few of the more popular ones. Rather than tying you to a specific
technology and language, however, ASP.NET lets you write Web applications
using a variety of familiar programming languages.
Finally, ASP.NET is based on the Microsoft .NET Framework. The .NET
Framework collects all the technologies needed for building Windows applications,
Web applications, and Web Services into a single package with a set of more
than twenty programming languages. To develop Websites with ASP.NET, you’ll
need to download the .NET Framework Software Development Kit, which I’ll
guide you through in the next few sections.
Even with all the jargon demystified, you’re probably still wondering: what makes
ASP.NET so good? Compared with other options for building Web applications,
ASP.NET has the following advantages:
 ASP.NET lets you use your favorite programming language, or at least one
that’s really close to it. The .NET Framework currently supports over twenty
languages, four of which may be used to build ASP.NET Websites.
 ASP.NET pages are compiled, not interpreted. Instead of reading and interpreting
your code every time a dynamic page is requested, ASP.NET compiles
dynamic pages into efficient binary files that the server can execute very
quickly. This represents a big jump in performance when compared with the
technology’s interpreted predecessor, ASP.
 ASP.NET has full access to the functionality of the .NET Framework. Support
for XML, Web Services, database interaction, email, regular expressions, and
many other technologies are built right into .NET, which saves you from
having to reinvent the wheel.
 ASP.NET allows you to separate the server-side code in your pages from the
HTML layout. When you’re working with a team composed of programmers
and design specialists, this separation is a great help, as it lets programmers
modify the server-side code without stepping on the designers’ carefully crafted
HTML—and vice versa.
With all these advantages, ASP.NET has relatively few downsides. In fact, only
two come to mind:
Order the print version of this book to get all 700+ pages! 4
Chapter 1: Introduction to .NET and ASP.NET
 ASP.NET is a Microsoft technology. While this isn’t a problem in itself, it
does mean that, at least for now, you need to use a Windows server to run
an ASP.NET Website. If your organization uses Linux or some other operating
system for its Web servers, you’re out of luck.
 Serious ASP.NET development requires an understanding of object-oriented
programming, which we’ll cover over the next few chapters.
Still with me? Great! It’s time to gather the tools and start building!
What Do I Need?
For the moment, if you’re going to learn ASP.NET, you’ll need a Windows-based
Web server. Open source initiatives are underway to produce versions of ASP.NET
that will run on other operating systems, such as Linux; however, these are not
expected to be available in stable form for a while.
While developers had the option of getting their feet wet with ASP on Windows
95, 98, or ME, using a scaled-down version of IIS called a Personal Web Server
(PWS), ASP.NET requires the real deal. As a bare minimum, you’ll need a computer
equipped with Windows 2000 Professional before you can get started.
Windows XP Professional will work fine too, as will any of the Windows 2000
Server packages and Windows 2003 Server.
Other than that, all you need is enough disk space to install the Web server Internet
Information Services (18 MB), the .NET Framework SDK (which includes
ASP.NET; 108 MB), and a text editor. Notepad or Web Matrix[1] will
be fine for getting started, and are certainly all you’ll need for this book. However,
if you get serious about ASP.NET, you’ll probably want to invest in a development
environment like Visual Studio .NET[2].
Installing the Required Software
This section tackles the necessary installation and configuration of software that
you’ll need for this book, including:
 Internet Information Services (IIS): IIS is the Web server we will use. You’ll
need your copy of the Windows CD for the installation and configuration.
[1] http://www.asp.net/webmatrix/
[2] http://msdn.microsoft.com/vstudio/
5 Order the print version of this book to get all 700+ pages!
What Do I Need?
 A Modern Web Browser: You can use any modern, standards-compliant
browser to test your work. Throughout this book, we’ll be using Internet Explorer
6.
 The .NET Framework Redistributable: As you’ve already learned in this
chapter, the .NET Framework is what drives ASP.NET. Installing the .NET
Framework installs the necessary files to run ASP.NET.
 The .NET Framework SDK: The .NET Framework Software Development
Kit (SDK) contains necessary Web application development tools, a debugger
for error correcting, a development database engine in MSDE, and a suite of
samples and documentation.
We’re also going to need a database. In this book, we’ll use:
 Microsoft Access: Access is a cheap and easy-to-use alternative to its more
robust big brother, SQL Server, and can be purchased separately, or installed
from a Microsoft Office CD.
Or alternatively, you might use:
 Microsoft SQL Server Desktop Engine (MSDE): SQL Server is the enterprise
alternative to smaller databases such as Access. If you’re working within
a corporation where your company’s data is its lifeblood, then SQL Server is
the perfect choice. MSDE is a free, cut down version of SQL Server that you
can use for development purposes.
 Web Data Administrator: If you’re going to use MSDE, then you’ll need a
tool for modifying the data within the database. Web Data Administrator is
Microsoft’s free Web-based database management tool.
Installing Internet Information Services (IIS)
Do you need to install IIS locally even if the final site will not be hosted locally?
The answer is: yes. Even if you’re uploading your Web applications via FTP to
your Web host, installing IIS allows you to view, debug, and configure your applications
locally before deployment.
IIS comes with most versions of server-capable Windows operating systems, including
Windows 2000 Professional, Server, and Advanced Server, Windows XP
Professional, and Windows Server 2003, but it’s not installed automatically in
all versions, which is why it may not be present on your computer. To see
Order the print version of this book to get all 700+ pages! 6
Chapter 1: Introduction to .NET and ASP.NET
whether you have IIS installed and running, simply navigate to your Administrative
Tools menu and check to see if Internet Information Services is an option. Users
of Windows 2000 Professional will find the Administrative Tools in their Control
Panels, while XP and Server family users also have shortcuts in their start menus.
If the shortcut is not visible, then you don’t have it installed. To install IIS, simply
follow these steps:
1. In the Control Panel, select Add or Remove Programs.
2. Choose Add/Remove Windows Components. The list of components will become
visible within a few seconds.
3. In the list of components, check Internet Information Services (IIS).
4. Click Next. Windows prompts you to insert the Windows CD and installs
IIS.
Once IIS is installed, close the Add or Remove Programs dialog. You can check
that IIS has installed correctly by seeing if you can find it within the Administrative
Tools menu. If you can, it’s installed.
You are now ready to begin hosting Web applications. Although we won’t cover
the configuration of IIS for external use, I will show you how to configure IIS to
support local development of ASP.NET applications in order that they may be
uploaded to your external Web hosting provider later.
Installing Internet Explorer
As a Windows user, you have Internet Explorer installed by default, but I recommend
you run at least version 5.5. You can check your version by selecting About
Internet Explorer from the Help menu.
If your version of Internet Explorer is earlier than 5.5, you can download the
latest version (version 6 SP1 as of this writing) for free from the Internet Explorer
Website[3]. Remember, although ASP.NET will work with older versions of IE,
certain ASP.NET functionality works best with the latest version.
The Internet Explorer Website does not allow you to install a version of your
choice; it permits you to download only the most recent version that’s available.
[3] http://www.microsoft.com/windows/ie/
7 Order the print version of this book to get all 700+ pages!
Installing Internet Explorer
Because the newest versions of Internet Explorer will include the latest patches,
it’s a good idea to stick with what they give you.
Installing the .NET Framework and SDK
To begin creating ASP.NET applications, you’ll need to install the .NET Framework
and SDK. The .NET Framework includes the necessary files to run and
view ASP.NET pages, while the .NET Framework SDK includes samples, documentation,
and a variety of free tools.
The .NET Framework SDK also provides you with the ability to install MSDE,
the free database server that you can use with this book. Once the .NET Framework
and SDK are installed, little else needs to be done for you to begin working
with ASP.NET. The .NET Framework is installed as part of the operating system
if you’re lucky enough to be running Windows .NET Server 2003, in which case
you can skip directly to installing the SDK. If not, you will need to download
the .NET redistributable package, which is approximately 21 MB, and includes
the files necessary for running ASP.NET applications.
To develop .NET applications, you also need to install the software development
kit, which includes necessary tools along with samples and documentation. Be
aware that the .NET Framework SDK is 108 MB in size—be prepared to wait!
Installing the .NET Framework before you install IIS will prevent your applications
from working correctly.
Download and Install the Redistributable
The best method of acquiring the .NET Framework is to download and install it
directly from the Web. To accomplish this, simply follow the steps outlined below:
1. Go to the ASP.NET support site at http://www.asp.net/ and click the Download
link.
2. Click the Download .NET Framework Redist Now link. Remember, we will install
the redistributable first, then we will install the SDK. The link will advance
you to a download page.
3. Choose the language version of the install you want, and click Download.
4. When prompted, save the file to a local directory by choosing Save.
Order the print version of this book to get all 700+ pages! 8
Chapter 1: Introduction to .NET and ASP.NET
5. After the download is complete, double-click the executable to begin the installation.
6. Follow the steps presented by the .NET Setup Wizard until installation
completes.
Download and Install the SDK
Now that you’ve installed the redistributable, you need to install the software
development kit (SDK):
1. Go to the ASP.NET support site at http://www.asp.net/ and click the Download
link.
2. Click the Download .NET Framework SDK Now link. The link will advance
you to a download page.
3. Choose the language version of the install you want to use and click Download,
as you did to download the redistributable.
4. When prompted to do so, save the file to a local directory by choosing Save.
5. After the download is complete, double-click the executable to begin the installation.
Before you do, I strongly recommend closing all other programs
to ensure the install proceeds smoothly.
6. Follow the steps outlined by the .NET Setup Wizard until installation
completes.
The SDK will take slightly longer to install than the redistributable. Once it’s
finished, check to see if it exists in your programs menu; navigate to Start > Programs
> Microsoft .NET Framework SDK.
Configuring IIS
Although little configuration needs to be done before you begin working with
IIS, I’ll use this section to introduce some basic features and functionality within
IIS:
 Determining whether ASP.NET installed correctly
 Determining where files are located on the Web server
9 Order the print version of this book to get all 700+ pages!
Download and Install the SDK
 Using localhost
 How to start and stop the Web server
 How to create a new virtual directory and modify its properties
Determining whether ASP.NET Installed Correctly
Once IIS is installed on your computer, you can open it by selecting Internet Information
Services from the Administrative Tools menu. The first task is to make
sure that ASP.NET was integrated into IIS when you installed the .NET Framework.
Although, logically, ASP.NET should install automatically because it’s a
component of the .NET Framework, sometimes it doesn’t. Don’t let this alarm
you—it’s a common occurrence and is addressed in the Microsoft Knowledge
Base. You can determine whether IIS was installed correctly by following these
steps:
1. Open IIS, if you haven’t already done so, and click on the + symbol next
to your computer’s name.
2. Right-click Default Web Site and select Properties.
3. Navigate to the Documents tab. If default.aspx appears within the list,
ASP.NET was installed correctly.
Another way to check whether ASP.NET installed correctly is by following these
steps:
1. Navigate to the Application Mappings menu by right-clicking the root Website
node (your computer’s name) and choosing Properties.
2. Select the Home Directory tab, and choose Configuration.
3. The Application Mappings menu displays all of the extensions and their associated
ISAPI Extension DLLs, as we see in Figure 1.2.
Order the print version of this book to get all 700+ pages! 10
Chapter 1: Introduction to .NET and ASP.NET
Figure 1.2. If the .aspx ISAPI Extension DLL appears within the
Application Mappings menu, then ASP.NET was installed correctly.
Since I can imagine you’re dying to know what an ISAPI Extension DLL is, let
me explain. You may know that a DLL is a Dynamically Linked Library, which
is essentially a self-contained code module that any number of applications can
draw on. When a Web server hosts a dynamic Website, page requests must be
processed by program code running on the server before the resultant HTML
can be sent back to the requesting browser (the client). Now, as was the case
with traditional ASP, ASP.NET performs this processing with the help of its Internet
Server Application Programming Interface (ISAPI) extension DLL.
ISAPI allows Web requests to be processed through the Web server by a DLL,
11 Order the print version of this book to get all 700+ pages!
Determining whether ASP.NET Installed Correctly
rather than an EXE, as is the case with Common Gateway Interface (CGI)
pages. This approach is advantageous because DLLs are much more efficient, and
require far less resources and memory than executables. IIS uses the file extension
of a requested page to determine which DLL should process the request according
to the mappings shown in the screenshot above. So, we can see that pages ending
in .aspx, .asmx, or .ascx, among others, will now be passed by IIS to the
ASP.NET DLL (aspnet_isapi.dll) for processing. OK, enough of the tech-talk.
Let’s get back to it!
If you’ve come to the conclusion that ASP.NET was not installed on your computer,
you’ll have to install it manually from the command prompt:
1. Open the command prompt by selecting Start > Run, type CMD, and select
OK.
2. Type the following command (all on one line) to install ASP.NET on Windows
2000 Professional, Server, or Advanced Server:
C:\WINNT\Microsoft.NET\Framework\ver\aspnet_regiis.exe -i
Or on Windows XP Professional:
C:\WINDOWS\Microsoft.NET\Framework\ver\aspnet_regiis.exe -i
In these commands, ver is the directory corresponding to the version of the
.NET Framework you have installed.
3. Once ASP.NET is installed, close the command prompt and check again to
confirm whether ASP.NET installed correctly.
If it still hasn’t installed, try visiting the Microsoft Knowledge Base[6] for help.
Where Do I Put My Files?
Now that you have ASP.NET up and running, let’s take a look at where the files
for your Web applications are kept on the computer. You can readily set IIS to
look for Web applications within any folder of your choice, including the My
Documents folder or even a network share. By default, IIS maps the wwwroot
subfolder of C:\Inetpub on the server to your Website’s root directory, and it
is generally considered a good repository for storing and managing your Web
applications.
[6] http://support.microsoft.com/
Order the print version of this book to get all 700+ pages! 12
Chapter 1: Introduction to .NET and ASP.NET
If you open this wwwroot folder in Windows Explorer, and compare it with the
folder tree that appears on the left of the IIS console, you’ll notice that the folders
in Explorer also appear under your Default Web Site node. Note that, while
several of these folders have the regular Explorer folder icon in the IIS view,
others have a special Web application icon, indicating that these folders contain
the pages and other items for a particular Web application. These special folders
are what IIS calls Virtual Directories, and, in fact, they do not have to share
the name of the physical folder to which they map. We’ll see more on this shortly.
Using Localhost
By putting your files within C:\Inetpub\wwwroot, you’ve given your Web server
access to them. If you’ve been developing Web pages for a long time, habit may
drive you to open files directly in your browser by double-clicking on the HTML
files. Because ASP.NET is a server-side language, your Web server needs to have
a crack at the file before it’s sent to your browser for display. If the server doesn’t
get this opportunity, the ASP.NET code is not converted into HTML that your
browser can understand. For this reason, ASP.NET files can’t be opened directly
from Windows Explorer.
Instead, you need to open them in your browser using the special Web address
that indicates the current computer, http://localhost/. If you try this now, IIS will
open up some HTML help documentation, because we’ve not yet set up a default
Website. This localhost name is, in fact, equivalent to the so-called loopback IP
address, 127.0.0.1, IP which you can check out by entering http://127.0.0.1/ in
your browser; you should see the same page you saw using localhost. If you know
them, you can also use the name of your server or the real IP address of your
machine to the same effect.
Note that if you do try any of these equivalents, a dialog will appear before the
page is opened, asking for your network credentials, because you’re no longer
using your local authentication implicit with localhost.
Stopping and Starting IIS
Now that we have IIS up and running, and ASP.NET installed, let’s look at how
you can start, stop, and restart IIS if the need arises. For the most part, you’ll
always want to have IIS running, except when you’re using certain programs
locally that open ports and allow intruders to compromise the security of your
computer. Some programs, like Kazaa, automatically stop IIS upon launch, because
of potential security vulnerabilities. If you want to stop IIS when it’s not
being used, simply follow the steps outlined below:
13 Order the print version of this book to get all 700+ pages!
Using Localhost
1. With IIS open, select Default Web Site. The Play, Stop, and Pause icons will
become visible.
2. Select Stop, as shown in Figure 1.3.
Figure 1.3. Select the Stop icon to stop IIS.
3. To start IIS again, all you need to do is click the Play icon.
Virtual Directories
I’ve already briefly introduced the concept of virtual directories, which are a
key mechanism in IIS; now I’d like to define a virtual directory a little more
clearly.
A virtual directory is simply a name (or alias) that points to a local folder or
network share on the server. This alias is then used to access the Web application
held in that physical location. For instance, imagine your company has a Web
server that serves documents from C:\Inetpub\wwwroot\mySiteA. Your users
can access these documents through this URL:
http://www.mycompany.com/mySiteA/
You could also set up another physical location as a different virtual directory in
IIS. If, for instance, you were developing another Web application, you could
store the files for it in C:\dev\newSiteB. You could then create in IIS a new
virtual directory called, say, CoolPages, which maps to this location. This new
site would then be accessible through this URL:
http://www.mycompany.com/CoolPages/
As this application is in development, you would probably want to set IIS to hide
this virtual directory from the public until the project is complete. Your existing
Website would still be visible.
Order the print version of this book to get all 700+ pages! 14
Chapter 1: Introduction to .NET and ASP.NET
Let’s create a virtual directory on your server now:
1. Right-click on Default Web Site and select Virtual Directory from the New
submenu. The Virtual Directory Creation Wizard will appear. Click Next.
2. Type in an alias for your virtual directory. I’ll type in WebDocs. Click Next.
3. Browse for the directory in which your application is located. For this example,
I’m going to choose the My Pictures folder located within the My
Documents directory. Click Next.
4. Set Access Permissions for your directory. Typically, you’ll want to check
Read, Run scripts, and Browse. You will not need to select Write until we get
into accessing the file system, discussed in Chapter 15. Click Next.
5. Click Finish.
Once your new virtual directory has been created, it will appear within the
Website list as shown in Figure 1.4.
Figure 1.4. Once the virtual directory has been created, it will
appear within the list of sites.
Now, if you type http://localhost/WebDocs/ in your browser, IIS will recognize
that you’re looking for a Website held in the My Pictures directory. By default,
when we request a virtual directory in this way, IIS looks for an index HTML
page such as index.html or default.htm. If there is no index page—in this case
there isn’t—IIS assumes we want to see the contents of the requested location.
15 Order the print version of this book to get all 700+ pages!
Virtual Directories
However, viewing the entire content of a location like this is not usually something
we want our users to do; they could then freely see and access all the files and
directories that make up our Web page. Not only is this a little messy and unprofessional,
but it also can provide information to hackers that could let them attack
our site. So, by default, IIS won’t allow this—we’ll receive a message reading,
“Directory Listing Denied” in our browser.
Bearing that in mind, there are, however, circumstances in which we do want to
allow directory listings, so let’s see how we can enable this in IIS. First, we have
to right click the virtual directory in the IIS console, and choose Properties. Then,
we select the Virtual Directory tab, and check the Directory browsing box. When
we click OK and open (or refresh) the same URL in our browser, we’ll see a list
of all the files within the My Pictures folder.
The Properties dialog that we’ve just used lets us configure various other useful
properties, including:
Virtual Directory Allows you to configure directory-level properties including
path information, virtual directory name, access
permissions, etc. Everything that was set up
through the wizard is modifiable through this tab.
Document Allows you to configure a default page that displays
when the user types in a full URL. For instance, because
default.aspx is listed as a default page, the
user needs only to type in http://www.mysite.com/ into
the browser’s address bar, rather than
http://www.mysite.com/default.aspx. You can easily
change and remove these by selecting the appropriate
button to the right of the menu.
Directory Security Provides you with security configuration settings for
the virtual directory.
HTTP Headers Gives you the ability to forcefully control page caching
on the server, add custom HTTP Headers, Edit Ratings
(helps identify the content your site provides to users),
and create MIME types. Don’t worry about this for
now.
Custom Errors Allows you to define your own custom error pages.
Rather than the standard error messages that appear
within Internet Explorer, you can customize error
Order the print version of this book to get all 700+ pages! 16
Chapter 1: Introduction to .NET and ASP.NET
messages with your company’s logo and an error message
of your choice.
One thing to note at this point is that we can set properties for the Default Web
Site node, and choose to have them ‘propagate’ down to all the virtual directories
we’ve created. So, let’s now go ahead and enable directory browsing as the default
for our Web applications. Please do remember what I’ve said about the dangers
of allowing directory browsing on a production Web application, and keep in
mind that you should never normally allow it in a publicly accessible environment
(even on an intranet). However, during development, this facility can be very
handy, as it allows us to navigate and run all our virtual directories by clicking
on the listing in our browser, rather than having to type in long URLs each time.
To enable directory browsing:
1. Right-click Default Web Site and select Properties. The Default Web Site
Properties dialog will appear.
2. First, we need to remove the default setting which opens up the IIS help
documentation for our root directory, so choose the Documents tab.
3. Select iisstart.asp, and click Remove.
4. Now choose the Home Directory tab.
5. Check the Directory Browsing check box and select OK.
6. When the Inheritance Overrides dialog appears, click Select All and then OK.
To try it out, open your browser and type http://localhost/ in the address bar.
The directory listing will appear within the browser as shown in Figure 1.5.
17 Order the print version of this book to get all 700+ pages!
Virtual Directories
Figure 1.5. Enabling directory browsing for the Web server
provides you with the ability to view directories in a way that’s
similar to the view you’d see within Windows Explorer.
As you create Web applications, you’ll only need to select the directory that the
Web application resides in to launch your work, but do remember to disable
directory browsing should you later make your IIS Web server publicly visible.
Installing Microsoft Access
Access is Microsoft’s database solution for both developers and small companies
who need to house data within a small yet reliable store. Because Microsoft Access
is widely available, it’s usually the perfect choice for discussion and use within
books such as this. Although we won’t be covering data access until Chapter 5,
you may want to start thinking about the scope of your or your company’s needs
and choose a database accordingly. If you’re a small company looking for something
cheap, reliable, and easy to use, then Access is for you. This book will cover
examples using both Access and MSDE. Even if you plan on using MSDE, you
may still want to read this section, as Access provides some good data modeling
tools that aren’t available to you through Web Data Administrator.
You can find more information on Access from the Access Website[15]. Here,
you can find the latest updates, news, and purchase information for Microsoft
Access.
[15] http://www.microsoft.com/office/access/
Order the print version of this book to get all 700+ pages! 18
Chapter 1: Introduction to .NET and ASP.NET
Access is bundled with Professional editions of the Microsoft Office suite, so you
may already have it installed. If you’ve already installed Microsoft Office on your
computer, but didn’t install Access at the same time, you’ll need to add it to your
installation. The following assumes that you have either Microsoft Office 2000
or XP Professional handy, and that you’ll be installing from that CD:
1. Navigate to the Add or Remove Programs menu located within the Control
Panel.
2. Select your Microsoft Office installation from the Programs menu and select
Change.
3. When the Microsoft Office Setup dialog appears, select Add/Remove Features
and click Next.
4. Select Run from My Computer from the Access program menu.
5. Click Update. You will be prompted to insert your Microsoft Office CD, so
make sure you have it handy. Access will now install.
If you plan to purchase Access, you might like to consider purchasing the Microsoft
Office bundle, as you receive Access, Word, Outlook, PowerPoint, and
Excel for much less than the total cost of each of the components. Installing Access
from either the Microsoft Access or Microsoft Office CDs is easy—just insert the
CD, follow the onscreen prompts, and accept the default installation.
That’s all there is to it. You are now ready to begin working with database-driven
Web applications.
Installing SQL Server Desktop Engine (MSDE)
SQL Server 2000 is Microsoft’s database solution for medium to large companies
and enterprises. It is quite a bit more expensive than Access, generally requires
its own dedicated “database server”, and, at times, requires the hiring of a certified
database administrator (DBA) to maintain; yet it offers a robust and scalable
solution for larger Web applications.
I’ll assume that if you’re reading this book, you probably don’t want to invest in
something as massive as SQL Server, and that your needs are better suited to
something free that’s nearly as powerful for testing and development purposes.
If this is the case, then Microsoft’s SQL Server Desktop Engine, or MSDE, is
perfect for you. MSDE is Microsoft’s free database alternative to SQL Server. It
19 Order the print version of this book to get all 700+ pages!
Installing SQL Server Desktop Engine (MSDE)
functions and stores data exactly as SQL Server does, but is licensed for development
purposes only.
Once the .NET Framework SDK is installed, installing MSDE is a snap and can
be completed as follows:
1. Select Start > Programs > Microsoft Framework SDK, and choose Samples and
QuickStart Tutorials.
2. Choose the Download and Install the Microsoft SQL Server 2000 Desktop
Engine link. You will be redirected to a download page on Microsoft’s
Website.
3. Select Step 1: Download the Microsoft SQL Server 2000 Desktop Engine (68.4
MB).
4. Save the file onto your hard drive. At nearly 70 MB, this may take some
time, so you may want to move onto the section called “Your First ASP.NET
Page” later in this chapter while the download continues, as our first example
doesn’t use a database. Once the download is done, come back and continue
the installation process.
5. Double-click the downloaded file and follow the instructions to unpack the
MSDE setup files.
6. Open the Command Prompt by selecting Start > Run; type cmd, and select
OK.
7. Change to the directory to which you extracted the files using cd on the
command line. MSDE extracts to C:\sql2ksp3\MSDE by default.
8. Type the following command (all on one line) in the MSDE directory to set
up MSDE:
Setup.exe /qb+ INSTANCENAME=NetSDK DISABLENETWORKPROTOCOLS=1
SAPWD=PASSWORD
The complete set of commands is shown in Figure 1.6.
Order the print version of this book to get all 700+ pages! 20
Chapter 1: Introduction to .NET and ASP.NET
Figure 1.6. Install MSDE by running the command line
executable and setting necessary parameters.
It’s a good idea to set a suitable system administrator password using the
SAPWD parameter as shown above, although you can apply the traditional
blank password by using the BLANKSAPWD=1 parameter instead.
9. MSDE will now install.
10. Restart your computer for changes to take effect.
If all goes well, when the computer restarts, you’ll notice in the task bar tray a
small icon that looks like a cylinder with a play icon on top, as shown in Figure
1.7.
Figure 1.7. MSDE runs out of sight within the task bar tray.
That icon represents the database Service Manager. It lets you start and stop the
database engine; all you have to do is double-click that icon within the task bar
tray. Double-click the icon now to open the Service Manager Dialog, where you
can select the Play icon to start the service, or the Stop icon to stop the service.
In some cases, you may not see either a green triangle or a red square; instead,
you see an empty white circle. When you open Service Manager, you’ll see the
message “Not Connected” appear in the status bar at the bottom. You’ll need to
type YourComputer\netsdk in the Server drop-down (where YourComputer is
21 Order the print version of this book to get all 700+ pages!
Installing SQL Server Desktop Engine (MSDE)
the name of your computer), and click Refresh services. MSDE should then connect,
and the green triangle should appear.
Installing and Configuring Web Data
Administrator
In order to use MSDE effectively, you’ll need some sort of administration tool
to work with your databases. Web Data Administrator is another free tool
provided by Microsoft that allows you to manage your instance of MSDE locally
and remotely using a Web-based interface. You can download this program from
Microsoft’s developer site[16]. Scroll to the bottom of that page and you’ll find
two search boxes. Leave the top one at All, and type Web Data Administrator
in the bottom one, then click search. The search results should include the correct
page.
Once you’ve downloaded it, simply double-click the .msi file to install. Once
installed, Web Data Administrator can be accessed through your browser at the
URL http://localhost/SqlWebAdmin, but before it can be used, you’ll need to
enable what is known as SQL Mixed Mode authentication.
This involves making a small change to the registry, but don’t be put off. If you
follow these instructions exactly, you won’t do any harm. Let’s do it! Click Start,
then Run…. In the dialog, type regedit and press Enter to open the registry editor.
Now expand the HKEY_LOCAL_MACHINE node in the left hand pane, then
expand the SOFTWARE node. Next, find and open the Microsoft node, and, inside
that, open one labeled Microsoft SQL Server. In there, you should find a node
called NETSDK, which contains another, called MSSQLServer. Select that node,
and find the key (in the right hand pane) called LoginMode. Double-click that,
and change its Value data from 1 to 2, then click OK. Now, close regedit, and
restart your computer. Phew! That was a bit of a trek, but I hope you found it
easier in practice than it appears on paper!
Now, open the Web Data Administrator URL given above. You’ll be asked for
the login, password, and server name for your instance of MSDE. Type sa in the
user name box, and the password that you supplied during the installation of
MSDE. If you’re unsure what the name of your server is, double-click the database
engine icon within the task bar tray. The name of your server is located within
the server drop-down menu.
[16] http://msdn.microsoft/downloads/
Order the print version of this book to get all 700+ pages! 22
Chapter 1: Introduction to .NET and ASP.NET
Once you’ve done this and clicked Login, you will see a list of the databases that
are currently available from MSDE, as shown in Figure 1.8.
Figure 1.8. Web Data Administrator allows you to work with your
databases within MSDE.
More information on Web Data Administrator, MSDE, and databases will be
covered in Chapter 6.
Your First ASP.NET Page
For your first run at ASP.NET, we’ll create the simple example shown in Figure
1.9.
23 Order the print version of this book to get all 700+ pages!
Your First ASP.NET Page
Figure 1.9. We’ll create a simple ASP.NET page that says "Hello
there" and displays the time.
Let’s get started! Open your text editor (Notepad2 is fine). If you have software
that creates ASP.NET pages automatically, such as Visual Studio .NET, please
do not use it yet. These programs provide lots of powerful tools for building
complex ASP.NET pages in a hurry, but for simple examples like this one, they
tend to get in the way, rather than provide assistance.
Open your text editor, and start by entering the plain HTML for our page:


My First ASP.NET Page


Hello there!


The time is now:




So far, so good, right? Now, we’ll add some ASP.NET code that will create the
dynamic elements of the page, starting with the time.


2If you do use Notepad, be aware that to need to put quotes around any filename that doesn’t end
with .txt in the Save As dialog. Most ASP.NET file names end with .aspx; if you forget to put
quotes around them when saving, you’ll end up with files called filename.aspx.txt!
Order the print version of this book to get all 700+ pages! 24
Chapter 1: Introduction to .NET and ASP.NET
My First ASP.NET Page


Hello there!


The time is now:




We’ve added an tag to the document. This is a special tag that lets
us insert dynamic content into the page. The asp: part of the tag name identifies
it as a built-in ASP.NET tag. ASP.NET comes with numerous built-in tags;
is arguably the simplest.
The runat="server" attribute identifies the tag as something that needs to be
handled on the server. In other words, the Web browser will never see the
tag; ASP.NET sees it and converts it to regular HTML tags before
the page is sent to the browser. It’s up to us to write the code that will tell
ASP.NET to replace this particular tag with the current time.
To do this, we must add some script to our page. Like ASP before it, ASP.NET
gives you the choice of a number of different languages to use in your scripts.
The two most common languages are Visual Basic.NET (VB.NET) and C#
(pronounced “C sharp”). Let’s take a look at examples using both. Here’s a version
of the page in VB.NET:
VB.NET File: FirstPage.aspx


My First ASP.NET Page



Hello there!


The time is now:




Here’s the same page written in C#:
25 Order the print version of this book to get all 700+ pages!
Your First ASP.NET Page
C# File: FirstPage.aspx


My First ASP.NET Page



Hello there!


The time is now:




Both versions of the page achieve exactly the same thing. If you’ve never done
any server-side programming before, this may be starting to look a little scary.
Let’s break down the new elements of this page:
File: FirstPage.aspx (excerpt)

27 Order the print version of this book to get all 700+ pages!
Your First ASP.NET Page
C# File: FirstPage.aspx (excerpt)
}

The closing (End Sub) and (}) mark the end of the script to be run when the
page is loaded, and the tag marks the end of the script block.
Create a new subdirectory of C:\Inetpub\wwwroot on your Web server, and save
your file there under the name FirstPage.aspx. Now, open your browser and
point type this URL in the address bar:
http://localhost/test/FirstPage.aspx
Replace test with the name that you gave to the directory in which you saved
the file. You should see a page similar to the one we saw in Figure 1.9.
If the time isn’t displayed, chances are that you opened the file directly in your
browser instead of loading it through your Web server. Because ASP.NET is a
server-side language, your Web server needs to access the file before it’s sent to
your browser for display. If it doesn’t get access to the file, the ASP.NET code is
never converted into HTML that your browser can understand, so make sure
you load the page by typing an actual URL (e.g. http://localhost/test/index.aspx),
not just a path and filename.
With the page displayed in your browser, use the View Source feature (View,
Source in Internet Explorer) to view the HTML code for the page. Here’s what
you’ll see:


My First ASP.NET Page


Hello there!


The time is now: 10/13/2003 1:55:09
PM




Notice that all the ASP.NET code has gone! Even the script block has been
completely removed, and the tag has been replaced by a
tag (with the same id attribute as the tag that we used) containing
the date and time string.
Order the print version of this book to get all 700+ pages! 28
Chapter 1: Introduction to .NET and ASP.NET
That’s how ASP.NET works. From the Web browser’s point of view, there is
nothing special about an ASP.NET page; it’s just plain HTML like any other. All
the ASP.NET code is run by your Web server and converted to plain HTML
that’s sent to the browser. So far, so good: the example above was fairly simple.
The next chapter will get a bit more challenging as we begin to introduce you to
some valuable programming concepts.
The ASP.NET Support Site
The official Microsoft ASP.NET support Website can be found at
http://www.asp.net/. As you develop ASP.NET Web applications, you will undoubtedly
have questions and problems that need to be answered. The ASP.NET
support Website was developed by Microsoft as a portal for the ASP.NET community
to answer the questions and solve the problems that developers have
while using ASP.NET. The support Website provides useful information, such
as news, downloads, articles, and discussion forums. You can also ask questions
of the experienced community members in the SitePoint Forums[20].
Summary
In this chapter, you learned about .NET. You also learned of the benefits of
ASP.NET and that it’s a part of the .NET Framework. First, you learned about
the constructs of ASP.NET and how to locate and install the .NET Framework.
Then, we explored the software that’s required not only for this book, but also
in order for you or your company to progress with ASP.NET.
You’ve gained a solid foundation in the world of ASP.NET! The next chapter
will build on this knowledge and begin to introduce you to ASP.NET in more
detail, including page structure, languages to use, programming concepts, and
form processing.
[20] http://www.sitepoint.com/forums/
29 Order the print version of this book to get all 700+ pages!
The ASP.NET Support Site
30
ASP.NET Basics 2
So far, you’ve learned what ASP.NET is, and what it can do—you even know
how to create a simple ASP.NET page. Don’t worry if it seems a little bewildering
right now, because, as this book progresses, you’ll learn how to use ASP.NET at
more advanced levels. So far, you’ve installed the necessary software to get going
and have been introduced to some very simple form processing techniques.
As the next few chapters unfold, we’ll introduce more advanced topics, including
controls, programming techniques, and more. Before we can begin developing
applications with ASP.NET, however, you’ll need to understand the inner
workings of a typical ASP.NET page. This will help you identify the various parts
of the ASP.NET page referenced by the many examples within the book. In this
chapter, we’ll talk about some key mechanisms of an ASP.NET page, specifically:
 Page structure
 View state
 Namespaces
 Directives
We’ll also cover two of the "built-in" languages supported by the .NET Framework:
VB.NET and C#. As this section begins to unfold, we’ll explore the differences,
similarities, and power that the two languages provide in terms of creating
ASP.NET applications.
So, what exactly makes up an ASP.NET page? The next few sections will give
you an in-depth understanding of the constructs of a typical ASP.NET page.
ASP.NET Page Structure
ASP.NET pages are simply text files with the .aspx file name extension that can
be placed on an IIS server equipped with ASP.NET. When a browser requests
an ASP.NET page, the ASP.NET runtime (as a component of the .NET Framework’s
Common Language Runtime, or CLR) parses and compiles the target file
into a .NET Framework class. The application logic now contained within the
new class is used in conjunction with the presentational HTML elements of the
ASP.NET page to display dynamic content to the user. Sounds simple, right?
An ASP.NET page consists of the following elements:
 Directives
 Code declaration blocks
 Code render blocks
 ASP.NET server controls
 Server-side comments
 Server-side include directives
 Literal text and HTML tags
It’s important to remember that ASP.NET pages are just text files with an .aspx
extension that are processed by the runtime to create standard HTML, based on
their contents. Presentational elements within the page are contained within the
tag, while application logic or code can be placed inside
Here, the tags enclose some VB.NET code, but it could just as easily be C# if
our page language were set thus:
C#

Order the print version of this book to get all 700+ pages! 34
Chapter 2: ASP.NET Basics
Comments in VB.NET and C# Code
Both of these code snippets contain comments—explanatory text that will be ignored by
ASP.NET, but which serves to describe how the code works.
In VB.NET code, a single quote or apostrophe (') indicates that the remainder of the line
is to be ignored as a comment.
In C# code, two slashes (//) does the same. C# code also lets you span a comment over
multiple lines by beginning it with /* and ending it with */.
Before .NET emerged, ASP also supported such script tags using a runat="server"
attribute, although they could only ever contain VBScript, and, for a variety
of reasons, they failed to find favor among developers. Code declaration blocks
are generally placed inside the tag of your ASP.NET page. The sample
ASP.NET page shown in Figure 2.1, for instance, contained the following code
declaration block:
VB.NET

Perhaps you can work out what the equivalent C# code would be:
C#

The



<%-- Declare the title as string and set it --%>

<% Dim Title As String = "Zak Ruvalcaba's Book List" %>
<%= Title %>



As you can see in the bold code, literal text and HTML tags provide the structure
for presenting our dynamic data. Without them, there would be no format to
the page, and the browser would be unable to understand it.
Now you should understand what the structure of an ASP.NET page looks like.
As you work through the examples in this book, you’ll begin to realize that in
many cases you won’t need to use all these elements. For the most part, all of
your development will be modularized within code declaration blocks. All of the
dynamic portions of your pages will be contained within code render blocks or
controls located inside a
tag.
In the following sections, we’ll outline the various languages used within ASP.NET,
talk a little about view state, and look at working with directives in more detail.
View State
As I mentioned briefly in the previous section, ASP.NET controls automatically
retain their data when a page is sent to the server by a user clicking a submit
button. Microsoft calls this persistence of data view state. In the past, developers
would have to hack a way to remember the item selected in a drop-down menu
or keep the contents of a text box, typically using a hidden form field. This is no
longer the case; ASP.NET pages, once submitted to the server for processing,
automatically retain all information contained within text boxes, items selected
within drop-down menus, radio buttons, and check boxes. Even better, they keep
dynamically generated tags, controls, and text. Consider the following ASP page,
called sample.asp:
Order the print version of this book to get all 700+ pages! 40
Chapter 2: ASP.NET Basics


Sample Page using VBScript





<%
If Request.Form("txtName") <> "" Then
Response.Write(Request.Form("txtName"))
End If
%>



If you save this example in the WebDocs subdirectory of wwwroot that you created
in Chapter 1, you can open it in your browser by typing
http://localhost/WebDocs/sample.asp, to see that view state is not automatically
preserved. When the user submits the form, the information that was previously
typed into the text box is cleared, although it is still available in Request.
Form("txtName"). The equivalent page in ASP.NET, ViewState.aspx,
demonstrates data persistence using view state:
VB.NET File: ViewState.aspx


Sample Page using VB.NET





runat="server" />


41 Order the print version of this book to get all 700+ pages!
View State


C# File: ViewState.aspx


Sample Page using C#





runat="server" />




In this case, the code uses ASP.NET controls with the runat="server" attribute.
As you can see in Figure 2.2, the text from the box appears on the page when the
button is clicked, but also notice that the data remains in the text box! The data
in this example is preserved because of view state:
Figure 2.2. ASP.NET supports view state. When a page is
submitted, the information within the controls is preserved.
Order the print version of this book to get all 700+ pages! 42
Chapter 2: ASP.NET Basics
You can see the benefits of view state already. But where is all that information
stored? ASP.NET pages maintain view state by encrypting the data within a
hidden form field. View the source of the page after you’ve submitted the form,
and look for the following code:

This is a standard HTML hidden form field with the value set to the encrypted
data from the form element. As soon as you submit the form for processing, all
information relevant to the view state of the page is stored within this hidden
form field.
View state is enabled for every page by default. If you do not intend to use view
state, you can turn it off, which will result in a slight performance gain in your
pages. To do this, set the EnableViewState property of the Page directive to
false:
<%@ Page EnableViewState="False" %>
Speaking of directives, it’s time we took a closer look at these curious beasts!
Working With Directives
For the most part, ASP.NET pages resemble traditional HTML pages, with a few
additions. In essence, just using an extension like .aspx on an HTML file will
make the .NET Framework process the page. However, before you can work with
certain, more advanced features, you will need to know how to use directives.
We’ve already talked a little about directives and what they can do earlier in this
chapter. You learned that directives control how a page is created, specify settings
when navigating between pages, aid in finding errors, and allow you to import
advanced functionality to use within your code. Three of the most commonly
used directives are:
Page Defines page-specific attributes for the ASP.NET page, such as
the language used.
Import Makes functionality defined elsewhere available in a page
through the use of namespaces. You will become very familiar
with this directive as you progress through this book.
43 Order the print version of this book to get all 700+ pages!
Working With Directives
Register Asyou will see in Chapter 16, you would use this directive to
link a user control to the ASP.NET page.
You will become very familiar with these three directives, as they’re the ones that
we’ll be using the most in this book. You’ve already seen the Page directive in
use. The Import directive imports extra functionality for use within your application
logic. The following example, for instance, imports the Mail class, which
you could use to send email from a page:
<%@ Import Namespace="System.Web.Mail" %>
The Register directive allows you to register a user control for use on your
page. We’ll cover these in Chapter 16, but the directive looks something like this:
<%@ Register TagPrefix="uc" TagName="footer" Src="footer.ascx" %>
ASP.NET Languages
As we saw in the previous chapter, .NET currently supports many different languages
and there is no limit to the number of languages that could be made
available. If you’re used to writing ASP, you may think the choice of VBScript
would be obvious. With ASP.NET however, Microsoft has done away with VBScript
and replaced it with a more robust and feature-rich alternative: VB.NET.
ASP.NET’s support for C# is likely to find favor with developers from other
backgrounds. This section will introduce you to both these new languages, which
are used throughout the remainder of the book. By the end of this section, you
will, I hope, agree that the similarities between the two are astonishing—any
differences are minor and, in most cases, easy to figure out.
Traditional server technologies are much more constrained in the choice of development
language they offer. For instance, old-style CGI scripts were typically
written with Perl or C/C++, JSP uses Java, Coldfusion uses CFML, and PHP is
a language in and of itself. .NET’s support for many different languages lets developers
choose based on what they’re familiar with, and start from there. To
keep things simple, in this book we’ll consider the two most popular, VB.NET
and C#, giving you a chance to choose which feels more comfortable to you, or
stick with your current favorite if you have one.
VB.NET
Visual Basic.NET or VB.NET is the result of a dramatic overhaul of Microsoft’s
hugely popular Visual Basic language. With the inception of Rapid Application
Order the print version of this book to get all 700+ pages! 44
Chapter 2: ASP.NET Basics
Development (RAD) in the nineties, Visual Basic became extremely popular,
allowing inhouse teams and software development shops to bang out applications
two-to-the-dozen. VB.NET has many new features over older versions of VB,
most notably that it has now become a fully object-oriented language. At last, it
can call itself a true programming language on a par with the likes of Java and
C++. Despite the changes, VB.NET generally stays close to the structured, legible
syntax that has always made it so easy to read, use, and maintain.
C#
The official line is that Microsoft created C# in an attempt to produce a programming
language that coupled the simplicity of Visual Basic with the power and
flexibility of C++. However, there’s little doubt that its development was at least
hurried along. Following legal disputes with Sun about Microsoft’s treatment
(some would say abuse) of Java, Microsoft was forced to stop developing its own
version of Java, and instead developed C# and another language, which it calls
J#. We’re not going to worry about J# here, as C# is preferable. It’s easy to read,
use, and maintain, because it does away with much of the confusing syntax for
which C++ became infamous.
Summary
In this chapter, we started out by introducing key aspects of an ASP.NET page
including directives, code declaration blocks, code render blocks, includes, comments,
and controls. As the chapter progressed, you were introduced to the two
most popular languages that ASP.NET supports, which we’ll use throughout the
book.
In the next chapter, we’ll create more ASP.NET pages to demonstrate some form
processing techniques and programming basics, before we finally dive in and look
at object oriented programming for the Web.
45 Order the print version of this book to get all 700+ pages!
C#
46
VB.NET and C# Programming
Basics 3
As you learned at the end of the last chapter, one of the great things about
ASP.NET is that we can pick and choose which of the various .NET languages
we like. In this chapter, we’ll look at some key programming principles using our
two chosen languages, VB.NET and C#. We’ll start off with a run-down of some
basic programming concepts as they relate to ASP.NET using both languages.
We’ll introduce programming fundamentals such as control and page events,
variables, arrays, functions, operators, conditionals, and loops. Next, we’ll dive
into namespaces and address the topic of classes—how they’re exposed through
namespaces, and which you’ll use most often.
The final sections of the chapter cover some of the ideas underlying modern, effective
ASP.NET design, starting with that of code-behind and the value it
provides by helping us separate code from presentation. We finish with an examination
of how object-oriented programming techniques impact the ASP.NET
developer.
Programming Basics
One of the building blocks of an ASP.NET page is the application logic: the actual
programming code that allows the page to function. To get anywhere with
this, you need to grasp the concept of events. All ASP.NET pages will contain
controls, such as text boxes, check boxes, lists, and more, each of these controls
allowing the user to interact with it in some way. Check boxes can be checked,
lists can be scrolled, items on them selected, and so on. Now, whenever one of
these actions is performed, the control will raise an event. It is by handling these
events with code that we get our ASP.NET pages to do what we want.
For instance, say a user clicks a button on an ASP.NET page. That button (or,
strictly, the ASP.NET Button control) raises an event (in this case it will be the
Click event). When the ASP.NET runtime registers this event, it calls any code
we have written to handle it. We would use this code to perform whatever action
that button was supposed to perform, for instance, to save form data to a file, or
retrieve requested information from a database. Events really are key to ASP.NET
programming, which is why we’ll start by taking a closer look at them. Then,
there’s the messy business of writing the actual handler code, which means we
need to check out some common programming techniques in the next sections.
Specifically, we’re going to cover the following areas:
 Control events and handlers
 Page events
 Variables and variable declaration
 Arrays
 Functions
 Operators
 Conditionals
 Loops
It wouldn’t be practical, or even necessary, to cover all aspects of VB.NET and
C# in this book, so we’re going to cover enough to get you started, completing
the projects and samples using both languages. Moreover, I’d say that the programming
concepts you’ll learn here will be more than adequate to complete the
great majority of day-to-day Web development tasks using ASP.NET.
Control Events and Subroutines
As I just mentioned, an event (sometimes more than one) is raised, and handler
code is called, in response to a specific action on a particular control. For instance,
Order the print version of this book to get all 700+ pages! 48
Chapter 3: VB.NET and C# Programming Basics
the code below creates a server-side button and label. Note the use of the OnClick
attribute on the Button control:
File: ClickEvent.aspx (excerpt)

Text="Click Me" />


When the button is clicked, it raises the Click event, and ASP.NET checks the
OnClick attribute to find the name of the handler subroutine for that event.
Here, we tell ASP.NET to call the btn1_Click() routine. So now we have to
write this subroutine, which we would normally place within a code declaration
block inside the tag, like this:
VB.NET File: ClickEvent.aspx (excerpt)



C# File: ClickEvent.aspx (excerpt)



This code simply sets a message to display on the label that we also declared with
the button. So, when this page is run and users click the button, they’ll see the
message "Hello World" appear next to it.
I hope you can now start to come to grips with the idea of control events and
how they’re used to call particular subroutines. In fact, there are many events
that your controls can use, some of which are only found on certain controls—not
others. Here’s the complete set of attributes the Button control supports for
handling events:
49 Order the print version of this book to get all 700+ pages!
Control Events and Subroutines
OnClick As we’ve seen, the subroutine indicated by this attribute
is called for the Click event, which occurs when
the user clicks the button.
OnCommand As with OnClick, the subroutine indicated by this attribute
is called when the button is clicked.
OnLoad The subroutine indicated by this attribute is called
when the button is loaded for the first time—generally
when the page first loads.
OnInit When the button is initialized, any subroutine given
in this attribute will be called.
OnPreRender We can run code just before the button is rendered,
using this attribute.
OnUnload This subroutine will run when the control is unloaded
from memory—basically, when the user goes to a different
page or closes the browser entirely.
OnDisposed This occurs when the button is released from memory.
OnDataBinding This fires when the button is bound to a data source.
Don’t worry too much about the intricacies of all these events and when they
happen; I just want you to understand that a single control can produce a number
of different events. In the case of the Button control, you’ll almost always be interested
in the Click event, as the others are only useful in rather obscure circumstances.
When a control raises an event, the specified subroutine (if there is one) is executed.
Let’s now take a look at the structure of a typical subroutine that interacts
with a Web control:
VB.NET
Public Sub mySubName(s As Object, e As EventArgs)
' Write your code here
End Sub
C#
public void mySubName(Object s, EventArgs e) {
// Write your code here
}
Order the print version of this book to get all 700+ pages! 50
Chapter 3: VB.NET and C# Programming Basics
Let’s break down all the components that make up a typical subroutine:
Public Defines the scope of the subroutine. There are a few
different options to choose from, the most frequently public
used being Public (for a global subroutine that can
be used anywhere within the entire page) and Private
(for subroutines that are available for the specific class
only). If you don’t yet understand the difference, your
best bet is to stick with Public for now.
Sub Defines the chunk of code as a subroutine. A subroutine
is a named block of code that doesn’t return void
a result; thus, in C#, we use the void keyword, which
means exactly that. We don’t need this in VB.NET,
because the Sub keyword already implies that no value
is returned.
mySubName(…) This part gives the name we’ve chosen for the subroutine.
s As Object When we write a subroutine that will function as an
event handler, it must accept two parameters. The Object s
first is the control that generated the event, which is
an Object. Here, we are putting that Object in a
variable named s (more on variables later in this
chapter). We can then access features and settings of
the specific control from our subroutine using the
variable.
e As EventArgs The second parameter contains certain information
specific to the event that was raised. Note that, in EventArgs e
many cases, you won’t need to use either of these two
parameters, so you don’t need to worry about them
too much at this stage.
As this chapter progresses, you’ll see how subroutines associated with particular
events by the appropriate attributes on controls can revolutionize the way your
user interacts with your application.
51 Order the print version of this book to get all 700+ pages!
Control Events and Subroutines
Page Events
Until now, we’ve considered only events that are raised by controls. However,
there is another type of event—the page event. The idea is the same as for control
events1, except that here, it is the page as a whole that generates the events.
You’ve already used one of these events: the Page_Load event. This event is fired
when the page loads for the first time. Note that we don’t need to associate
handlers for page events the way we did for control events; instead, we just place
our handler code inside a subroutine with a preset name. The following list outlines
the page event subroutines that are available:
Page_Init Called when the page is about to be initialized with
its basic settings
Page_Load Called once the browser request has been processed,
and all of the controls in the page have their updated
values.
Page_PreRender Called once all objects have reacted to the browser
request and any resulting events, but before any response
has been sent to the browser.
Page_UnLoad Called when the page is no longer needed by the
server, and is ready to be discarded.
The order in which the events are listed above is also the order in which they’re
executed. In other words, the Page_Init event is the first event raised by the
page, followed by Page_Load, Page_PreRender, and finally Page_UnLoad.
The best way to illustrate the Page_Load event is through an example:
VB.NET File: PageEvents.aspx (excerpt)










C# File: PageEvents.aspx (excerpt)










You can see that the control on the page does not specify any event handlers.
There’s no need, because we’re using the special Page_Load subroutine, which
will be called when the page loads. As the page loads, it will call the Page_Load
routine, to display “Hello World” in the Label control, as shown in Figure 3.1.
53 Order the print version of this book to get all 700+ pages!
Page Events
Figure 3.1. The Page_Load event is raised, the subroutine is called,
and the code within the subroutine is executed.
Variables and Variable Declaration
Variables are fundamental to programming, and you’ve almost certainly come
across the term before. Basically, they let you give a name, or identifier, to a
piece of data; we can then use that identifier to store, modify, and retrieve the
data.
However, there are, of course, many different kinds of data, such as strings, integers
(whole numbers), and floating point numbers (fractions or decimals). Before
you can use a variable in VB.NET or C#, you must specify what type of data it
can contain, using keywords such as String, Integer, Decimal, and so on, like
this:
VB.NET
Dim strName As String
Dim intAge As Integer
Order the print version of this book to get all 700+ pages! 54
Chapter 3: VB.NET and C# Programming Basics
C#
string strName;
int intAge;
These lines declare what type of data we want our variables to store, and are
therefore known as variable declarations. In VB.NET, we use the keyword Dim,
which stands for “dimension”, while in C#, we simply precede the variable name
with the appropriate data type.
Sometimes, we want to set an initial value for variables that we declare; we can
do this using a process known as initialization:
VB.NET
Dim strCarType As String = "BMW"
C#
string strCarType = "BMW";
We can also declare and/or initialize a group of variables of the same type all at
once:
VB.NET
Dim strCarType As String, strCarColor = "blue", strCarModel
C#
string strCarType, strCarColor = "blue", strCarModel;
Table 3.1 below lists the most useful data types available in VB.NET and C#.
55 Order the print version of this book to get all 700+ pages!
Variables and Variable Declaration
Table 3.1. A List of the Commonly Used Data Types
Description C# VB.NET
Whole numbers in the range -2,147,483,648 to
2,147,483,647.
int Integer
Up to 28 decimal places. You’ll use decimal most
often when dealing with costs of items.
decimal Decimal
Any text value. string String
A single character (letter, number, or symbol). char Char
True or false. bool Boolean
In .NET, all types are ultimately a type of object,
and so variables of this type can hold just about
any kind of data.
Object Object
There are many more data types that you may encounter as you progress, but
this list provides an idea of the ones you’ll use most often.
So, to sum up, once you’ve declared a variable as a given type, it can only hold
data of that type. You can’t put a string into an integer variable, for instance.
However, there are frequently times when you’ll need to convert one data type
to another. Have a look at this code:
VB.NET
Dim intX As Integer
Dim strY As String = "35"
intX = strY + 6
C#
int intX;
String strY = "35";
intX = strY + 6;
Now, while you or I might think that this could make sense—after all, the string
strY does contain a number, so we may well wish to add it to another number—the
computer will not be happy, and we’ll get an error. What we have to do is explicitly
convert, or cast, the string into an integer first:
VB.NET
Dim intX As Integer
Dim strY As String = "35"
intX = Int32.Parse(strY) + 6
Order the print version of this book to get all 700+ pages! 56
Chapter 3: VB.NET and C# Programming Basics
C#
int intX;
String strY = "35";
intX = Convert.ToInt32(strY) + 6;
Now, the computer will be happy, as we’ve told it that we want to turn the string
into an integer before it’s used as one. This same principle holds true when mixing
other types in a single expression.
Arrays
Arrays are a special variety of variable tailored for storing related items of the
same data type. Any one item in an array can be accessed using the array’s name,
followed by that item’s position in the array (its offset). Let’s create a sample
page to show what I mean:
VB.NET File: Arrays.aspx










57 Order the print version of this book to get all 700+ pages!
Arrays
C# File: Arrays.aspx










There are some important points to pick up from this code. First, notice how we
declare an array. In VB.NET, it looks like a regular declaration for a string, except
that the number of items we want the array to contain is given in brackets after
the name:
VB.NET File: Arrays.aspx (excerpt)
Dim drinkList(4) As String
In C#, it’s a little different. First, we declare that drinkList is an array by following
the datatype with two empty square brackets. We must then specify that
this is an array of four items, using the new keyword:
C# File: Arrays.aspx (excerpt)
String[] drinkList = new String[4];
A crucial point to realize here is that the arrays in both C# and VB.NET are
what are known as zero-based arrays. This means that the first item actually has
Order the print version of this book to get all 700+ pages! 58
Chapter 3: VB.NET and C# Programming Basics
position 0, the second has position 1, and so on, through to the last item, which
will have a position that’s one less than the size of the array (3, in this case). So,
we specify each item in our array like this:
VB.NET File: Arrays.aspx (excerpt)
drinkList(0) = "Water"
drinkList(1) = "Juice"
drinkList(2) = "Soda"
drinkList(3) = "Milk"
C# File: Arrays.aspx (excerpt)
drinkList[0] = "Water";
drinkList[1] = "Juice";
drinkList[2] = "Soda";
drinkList[3] = "Milk";
Notice that C# uses square brackets for arrays, while VB.NET uses standard
parentheses. We have to remember that arrays are zero-based when we set the
label text to the second item, as shown here:
VB.NET File: Arrays.aspx (excerpt)
lblArrayList.Text = drinkList(1)
C# File: Arrays.aspx (excerpt)
lblArrayList.Text = drinkList[1];
To help this sink in, you might like to try changing this code to show the third
item in the list instead of the second. Can you work out what change you’d need
to make?
That’s right—you only need to change the number given in the brackets to match
the position of the new item (don’t forget to start at zero). In fact, it’s this ability
to select one item from a list using only its numerical location that makes arrays
so useful in programming, as we’ll see as we get further into the book.
Functions
Functions are exactly the same as subroutines, but for one key difference: they
return a value. In VB.NET, we declare a function using the Function keyword
in place of Sub, while, in C#, we simply have to specify the return type in place
of using void. The following code shows a simple example:
59 Order the print version of this book to get all 700+ pages!
Functions
VB.NET File: Functions.aspx










C# File: Functions.aspx








Order the print version of this book to get all 700+ pages! 60
Chapter 3: VB.NET and C# Programming Basics


Figure 3.2 shows the result in the browser.
Figure 3.2. The Page_Load event is raised, the function is called,
and the code within the function is executed.
Here’s what’s happening: the line in our Page_Load subroutine calls our function,
which returns a simple string that we can then assign to our label. I hope this illustrates
what functions are about and how you can use them. In this simple example,
we’re merely returning a fixed string (my name), but the function could
just as well retrieve the name from a database—or somewhere else. The point is
that, regardless of how the function gets its data, we use it (that is, call it) in just
the same way.
61 Order the print version of this book to get all 700+ pages!
Functions
When we’re declaring our function, we must remember to specify the correct
return type. Take a look at the following code:
VB.NET
' Here's our function
Function addUp(x As Integer, y As Integer) As Integer
Return x + y
End Function
' And now we use it in Page_Load
Sub Page_Load(s As Object, e As EventArgs)
lblMessage.Text = addUp(5, 5).ToString()
End Sub
C#
// Here's our function
int addUp(int x, int y) {
return x + y;
}
// And now we use it in Page_Load
void Page_Load() {
lblMessage.Text = Convert.ToString(addUp(5, 5));
}
You can easily adapt the previous example to use this new code and see the results
in your browser.
Have a look at this code, and see if you can spot what’s different and why. The
first thing you might notice is that our function now accepts parameters. Any
function or subroutine can take any number of parameters, each of any type
(there’s no need for parameter types to match the return type—that’s just coincidental
in this example).
We can then readily use the parameters inside the function or subroutine just
by using the names we gave them in the function declaration (here, we’ve chosen
x and y, but we could have chosen different names).
The other difference between this and the function declaration we had before is
that we now declare our function with a return type of Integer or int, rather
than String, because we want it to return a whole number.
When we now call the new function, we simply have to specify the required
number of parameters, and remember that the function will return a value with
Order the print version of this book to get all 700+ pages! 62
Chapter 3: VB.NET and C# Programming Basics
the type we specified. In this case, that means we have to convert the integer
value it returns to a string, so we can assign it to the label.
In VB.NET, we tack .ToString() onto the end of the function call, while in C#
we use the Convert.ToString(…). Note the differences in how these two methods
are used—converting numbers to strings is a very common task in ASP.NET, so
it’s good to get a handle on it early. Don’t be too concerned if you’re a little
confused by how these conversions work, though—the syntax will become clear
once we discuss the object oriented concepts involved later in this chapter.
Again, a complete discussion of functions could take up an entire chapter, but I
hope the brief examples here are enough to prepare you for what we’re going to
cover in future chapters. Don’t worry too much if you’re still a bit unsure what
functions and subroutines are all about right now—they’ll become second nature
very quickly.
Operators
Throwing around values with variables and functions isn’t much use unless you
can use them in some meaningful way, and to do this we use operators. An operator
is a symbol that has a certain meaning when applied to values. Don’t
worry—they’re nowhere near as scary as they sound! In fact, in the last example,
when our function added two numbers, we were using an operator—the addition
operator, +. Most of the other available operators are just as well known, although
there are one or two that will probably be new to you. Table 3.2 outlines the
operators that you’ll use most often.
63 Order the print version of this book to get all 700+ pages!
Operators
Table 3.2. ASP.NET Operators
Description C# VB.NET
greater than > >
greater than or equal to >= >=
less than < <
less than or equal to <= <=
not equal to != <>
equals == =
assigns a value to a variable = =
or Or
and && And
concatenate strings + &
create object or array New New
multiply * *
divide / /
add + +
subtract - -
The following code uses some of these operators:
VB.NET
If (user = "Zak" And itemsBought <> 0) Then
lblMessage.Text = "Hello Zak! Do you want to proceed to " & _
"checkout?"
End If
C#
if (user == "Zak" && itemsBought != 0) {
lblMessage.Text = "Hello Zak! Do you want to proceed to " +
"checkout?";
}
Here, we use the equality, inequality (not equals to) and logical ‘and’ operators
in an If statement to print a message only for a given user, and only when he or
she has bought something. Of particular note is C#’s equality operator, ==, which
is used when comparing two values to see if they are equal. Don’t use a single
Order the print version of this book to get all 700+ pages! 64
Chapter 3: VB.NET and C# Programming Basics
equals sign in C# unless you are assigning a value to a variable, or your code will
have a very different meaning than you expect!
Breaking Long Lines of Code
Since the message string in the above example was too long to fit on one line
in this book, I also used the string concatenation operator to combine two
shorter strings on separate lines to form the complete message. In VB.NET,
I also had to break one line of code into two using the line continuation
symbol (_, an underscore at the end of the line to be continued). Since C#
marks the end of each command with a semicolon (;), I can split a single
command over two lines without having to do anything special.
I’ll use these techniques throughout this book to show long lines of code
within a limited page width. Feel free to recombine the lines in your own
code if you like—there is no actual length limit on lines of code in VB.NET
and C#.
Conditional Logic
As you develop ASP.NET applications, there will be many instances in which
you’ll need to perform an action only if a certain condition is met, for instance,
if the user has checked a certain checkbox, selected a certain item from a
DropDownList control, or typed a certain string into a TextBox control.
We check for such things using conditionals, the simplest of which is probably
the If statement. This statement is often used in conjunction with an Else
statement, which specifies what should happen if the condition is not met. So,
for instance, we may wish to check if the name entered in a text box is "Zak," redirecting
to one page if it is, or else redirecting to an error page:
VB.NET
If (txtUsername.Text = "Zak") Then
Response.Redirect("ZaksPage.aspx")
Else
Response.Redirect("errorPage.aspx")
End If
C#
if (txtUsername.Text == "Zak") {
Response.Redirect("ZaksPage.aspx");
} else {
Response.Redirect("errorPage.aspx");
}
65 Order the print version of this book to get all 700+ pages!
Conditional Logic
Often, we want to check for one of many possibilities, and perform a particular
action in each case. In that event, we can use the Switch Case (VB.NET) or
switch (C#) construct:
VB.NET
Dim strName As String = txtUsername.Text
Select Case strName
Case "Zak"
Response.Redirect("ZaksPage.aspx")
Case "Mark"
Response.Redirect("MarksPage.aspx")
Case "Fred"
Response.Redirect("FredsPage.aspx")
Case Else
Response.Redirect("errorPage.aspx")
End Select
C#
string strName = txtUsername.Text;
switch (strName) {
case "Zak":
Response.Redirect("ZaksPage.aspx");
break;
case "Mark":
Response.Redirect("MarksPage.aspx");
break;
case "Fred":
Response.Redirect("FredsPage.aspx");
break;
default:
Response.Redirect("errorPage.aspx");
break;
}
Loops
As you’ve just seen, an If statement causes a code block to execute once if the
value of its test expression is true. Loops, on the other hand, cause a code block
to execute repeatedly for as long as the test expression remains true. There are
two basic kinds of loop:
 While loops, also called Do loops, which sounds like something Betty Boop
might say!
Order the print version of this book to get all 700+ pages! 66
Chapter 3: VB.NET and C# Programming Basics
 For loops, including For Next and For Each
A While loop is the simplest form of loop; it makes a block of code repeat for as
long as a particular condition is true. Here’s an example:
VB.NET
Dim Counter As Integer = 0
Do While Counter <= 10
' Convert out Integer to a String
lblMessage.Text = Counter.ToString()
' Below we use the += operator to increase our variable by 1
Counter += 1
Loop
C#
int counter = 0;
while (counter <= 10) {
// Below we use a sneaky way to convert our int to a string
lblMessage.Text = counter + "";
// C# has the operator ++ to increase a variable by 1
counter++;
}
You can try out this code—enter it inside a Page_Load subroutine of one of the
pages you’ve already created. The page illustrating Page_Load at the start of this
chapter would be ideal. Make sure you remove any other code in the subroutine,
and that there is an ASP.NET Label control in the HTML of the page with the
ID lblMessage. When you open the page, the label will be set to show the
number 0, then 1, then 2, all the way to 10. Of course, since all this happens in
Page_Load (i.e. before any output is sent to the browser), you’ll only see the last
value assigned, 10.
This demonstrates that the loop repeats until the condition is no longer met. Try
changing the code so that the counter variable is initialized to 20 instead of 10.
When you open the page now, you won’t see anything on screen, because the loop
condition was never met.
67 Order the print version of this book to get all 700+ pages!
Loops
There is another form of the While loop, called a Do While loop, which checks
if the condition has been met at the end of the code block, rather than at the beginning:
VB.NET
Dim Counter As Integer = 0
Do
' Convert our Integer to a String
lblMessage.Text = Counter.toString()
' Below we use the += operator to increase our variable by 1
Counter += 1
Loop While Counter <= 10
C#
int counter = 0;
do {
// Below we use a sneaky way to convert our int to a string
lblMessage.Text = counter + "";
// C# has the operator ++ to increase a variable by 1
counter++;
} while (counter <= 10);
If you run this code, you’ll see it provides the exact same output we saw when
we tested the condition before the code block. However, we can see the crucial
difference if we again change it so the counter variable is initialized to 20. In this
case, we will, in fact, see 20 on screen, because the loop code is executed once
before the condition is even checked! There are some instances when this is just
what we want, so being able to place the condition at the end of the loop can be
very handy.
A For loop is similar to a While loop, but is typically used when the number of
times we need it to execute is known beforehand. The following example displays
the count of items within a DropDownList control called ddlProducts:
VB.NET
Dim i As Integer
For i = 1 To ddlProducts.Items.Count
lblMessage.Text = i.toString()
Next
Order the print version of this book to get all 700+ pages! 68
Chapter 3: VB.NET and C# Programming Basics
C#
int i;
for (i = 1; i <= ddlProducts.Items.Count; i++) {
lblMessage.Text = Convert.ToString(i);
}
In VB.NET, the loop syntax specifies the starting and ending values for our
counter variable in the For statement itself. In C#, we assign a starting value (i
= 1), a condition to be tested each time through the loop, just like a While loop
(i <= ddlProducts.Items.Count), and how the counter variable should be incremented
after each loop (i++). While this allows for some powerful variations
on the theme in C#, it can be confusing at first. In VB.NET, the syntax is considerably
simpler, but can be a bit limiting in exceptional cases.
The other type of For loop is For Each, which loops through every item within
a collection. The following example loops through an array called arrayName:
VB.NET
For Each item In arrayName
lblMessage.Text = item
Next
C#
foreach (string item in arrayName) {
lblMessage.Text = item;
}
You may also come across instances in which you need to exit a loop prematurely.
In this case, you would use Exit (VB.NET) or break (C#) to terminate the loop:
VB.NET
Dim i As Integer
For i = 0 To 10
If (i = 5) Then
Response.Write("Oh no! Not the number 5!!")
Exit For
End If
Next
C#
int i;
for (i = 0; i <= 10; i++) {
if (i == 5) {
Response.Write("Oh no! Not the number 5!!");
break;
69 Order the print version of this book to get all 700+ pages!
Loops
}
}
In this case, as soon as our For loop hits 5, it displays a warning message, using
the Response.Write() method that will be familiar to those with past ASP experience,
and exits the loop so that no further passes through the loop will be
made.
Although we have only scratched the surface, VB.NET and C# provide a great
deal of power and flexibility to the Web developer, and time spent learning the
basics now will more than pay off in the future.
Understanding Namespaces
Because ASP.NET is part of the .NET Framework, we have access to all the
goodies that are built into it in the form of the .NET Framework Class Library.
This library represents a huge resource of tools and features in the form of classes,
all organized in a hierarchy of namespaces. When we want to use certain features
that .NET provides, we have only to find the namespace that contains that
functionality, and import that namespace into our ASP.NET page. Once we’ve
done that, we can make use of the .NET classes in that namespace to achieve
our own ends.
For instance, if we wanted to access a database from a page, we would import
the namespace that contains classes for this purpose, which happens to be the
System.Data.OleDb namespace. The dots (.) here indicate different levels of the
hierarchy I mentioned—in other words, the System.Data.OleDb namespace is
grouped within the System.Data namespace, which in turn is contained in the
System namespace.
To import a particular namespace into an ASP.NET page, we use the Import
directive. Consider the following excerpt from an ASP.NET page; it imports the
System.Data.OleDb namespace, which contains classes called OleDbConnection,
OleDbCommand, and OleDbDataReader. Importing the namespace lets us use these
classes in a subroutine to display records from an Access database:
VB.NET
<%@ Import Namespace="System.Data.OleDb" %>




C#
<%@ Import Namespace="System.Data.OleDb" %>




Don’t worry too much about the code right now (we cover this in detail in
Chapter 6). Suffice it to say that, as we’ve imported that namespace, we have
access to all the classes that it contains, and we can use them to get information
from an Access database for display on our page.
71 Order the print version of this book to get all 700+ pages!
Understanding Namespaces
Specifically, the classes from System.Data.OleDb that are used in the above code
are:
OleDbConnection Used for connecting to the database
OleDbCommand Used for creating a statement of contents to read from
the database.
OleDbConnection Used for connecting to the database
OleDbCommand Used for creating a statement of contents to read from
the database
OleDbDataReader Used for actually reading contents from database
Object Oriented Programming Concepts
VB.NET and C# are great programming languages because they offer a structured
way of programming. By structured, I mean that code is separated into modules,
where each module defines classes that can be imported and used in other modules.
Both languages are relatively simple to get started with, yet offer features
sophisticated enough for complex, large-scale enterprise applications.
The languages’ ability to support more complex applications—their scalability—
stems from the fact that both are object oriented programming (OOP)
languages. But ask a seasoned developer what OOP really is, and they’ll start
throwing out buzzwords and catch phrases that are sure to confuse you—terms
like polymorphism, inheritance, and encapsulation. In this section, I aim to
explain the fundamentals of OOP and how good OOP style can help you develop
better, more versatile Web applications down the road. This section will provide
a basic OOP foundation angled towards the Web developer. In particular, we’ll
cover the following concepts:
 Objects
 Properties
 Methods
 Classes
 Scope
Order the print version of this book to get all 700+ pages! 72
Chapter 3: VB.NET and C# Programming Basics
 Events
 Inheritance
Objects
In OOP, one thinks of programming problems in terms of objects, properties,
and methods. The best way to get a handle on these terms is to consider a real
world object and show how it might be represented in an OOP program. Many
books use the example of a car to introduce OOP. I’ll try to avoid that analogy
and use something friendlier: my dog, an Australian Shepherd named Rayne.
Rayne is your average great, big, friendly, loving, playful mutt. You might describe
him in terms of his physical properties: he’s gray, white, brown, and black, stands
roughly one and a half feet high, and is about three feet long. You might also
describe some methods to make him do things: he sits when he hears the command
"Sit", lies down when he hears the command "Lie down", and comes when his
name is called.
So, if we were to represent Rayne in an OOP program, we’d probably start by
creating a class called Dog. A class describes how certain types of objects look
from a programming point of view. When we define a class, we must define the
following two things:
Properties Properties hold specific information relevant to that class
of object. You can think of properties as characteristics of
the objects that they represent. Our Dog class might have
properties such as Color, Height, and Length.
Methods Methods are actions that objects of the class can be told
to perform. Methods are subroutines (if they don’t return
a value) or functions (if they do) that are specific to a given
class. So the Dog class could have methods such as sit(),
and lie_down().
Once we’ve defined a class, we can write code that creates objects of that class,
using the class a little like a template. This means that objects of a particular
class expose (or make available) the methods and properties defined by that class.
So, we might create an instance of our Dog class called Rayne, set its properties
accordingly, and use the methods defined by the class to interact with Rayne, as
shown in Figure 3.3.
73 Order the print version of this book to get all 700+ pages!
Objects
Figure 3.3. The methods defined by the class interact with the
object.
This is just a simple example to help you visualize what OOP is all about. In the
next few sections, we’ll cover properties and methods in greater detail, talk about
classes and class instances, scope, events, and even inheritance.
Properties
As we’ve seen, properties are characteristics shared by all objects of a particular
class. In the case of our example, the following properties might be used to describe
any given dog:
 Color
 Height
 Length
In the same way, the more useful ASP.NET Button class exposes properties including:
Order the print version of this book to get all 700+ pages! 74
Chapter 3: VB.NET and C# Programming Basics
 Width
 Height
 ID
 Text
 ForeColor
 BackColor
Unfortunately for me, if I get sick of Rayne’s color, I can’t change it. ASP.NET
objects, on the other hand, let us change their properties very easily in the same
way that we set variables. For instance, we’ve already used properties when setting
text for the Label control, which is actually an object of class Label in the
namespace System.Web.UI.WebControls:
VB.NET
lblMyText.Text = "Hello World"
C#
lblMyText.Text = "Hello World";
In this example, we’re using a Label control called lblMyText. Remember,
ASP.NET is all about controls, and, as it’s built on OOP, all control types are
represented as classes. In fact, as you’ll learn in Chapter 4, all interaction with
ASP.NET pages is handled via controls. When we place a control on a page, we
give it a name through its id attribute, and this ID then serves as the name of
the control. Rayne is an object. His name, or ID, is Rayne. Rayne has a height
of eighteen inches. The same holds true for the Label control. The Label control’s
name or ID in the previous example is lblMyText. Next, we use the dot operator
(.) to access the property Text that the object exposes and set it to the string
"Hello World."
Methods
With our dog example, we can make a particular dog do things by calling commands.
If I want Rayne to sit, I tell him to sit. If I want Rayne to lie down, I tell
him to lie down. In object oriented terms, I tell him what I want him to do by
calling a predefined command or method, and a resulting action is performed.
In VB.NET or C#, we would write this as rayne.Sit(), or rayne.LieDown().
75 Order the print version of this book to get all 700+ pages!
Methods
As Web developers, we frequently call methods when a given event occurs. For
instance, the example earlier in this chapter that took information from an Access
database created an object called objConn to represent the connection to the
database. We then opened the connection by calling the Open() method on that
object as follows:
VB.NET
Dim objConn As As New OleDbConnection(
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\Database\books.mdb")

objConn.Open()
We say that the Open() method is exposed by the connection object, and that
we’re calling the Open() method on the OleDbConnection object stored in
objConn. We don’t need to know what dark secrets the method uses to do its
magic; all we need to know is its name and what we use it for.
Classes
You can think of a class as a template for building as many objects as you like of
a particular type. When you create an instance of a class, you are creating an
object of that class, and the new object has all the characteristics and behaviors
(properties and methods) defined by the class.
In our dog example, Rayne was an instance of the Dog class as shown in Figure 3.4.
Order the print version of this book to get all 700+ pages! 76
Chapter 3: VB.NET and C# Programming Basics
Figure 3.4. A class serves as the blueprint for an object.
We see that Rayne is an object of class Dog. In our code, we could create a new
instance of the Dog class, call it rayne, and use all the properties and methods
exposed by the object.
In OOP, when we create new instances of a class, we say we’re instantiating
that class. For instance (no pun intended!), if we need to programmatically create
a new instance of the Button control class, we could write the following code:
VB.NET
Dim myButton As New Button()
C#
Button myButton = new Button();
As you can see, we’ve essentially created a new object called myButton from the
Button class. We can then access the properties and methods that the Button
exposes through our new instance:
VB.NET
myButton.Text = "Click Me!"
C#
myButton.Text = "Click Me!";
77 Order the print version of this book to get all 700+ pages!
Classes
Scope
You should now have a concept of programming objects as entities that exist in
a program and are manipulated through the methods and properties they expose.
However, in some cases, we want to create methods to use inside our class, which
are not available when that class is used in code. Let’s return to the Dog class to
illustrate.
Imagine we’re writing the Sit() method inside this class, and we realize that
before the dog can sit, it has to shuffle its back paws forward a little (Just bear
with me on this one…)! We could create a method called ShufflePaws(), then
call that method from inside the Sit() method. However, we don’t want code
in an ASP.NET page or in some other class to call this method—it’d just be silly.
We can prevent this by controlling the scope of that method.
The two types of scope available in VB.NET and C# that you should know about
are:
Public Defining a property or method of a class as public allows that
property or method to be called from outside the class itself. In
other words, if an instance of this class is created inside another
object (remember, too, that ASP.NET pages themselves are objects),
public methods and properties are freely available to the
code that created it. This is the default scope in VB.NET and C#
classes.
Private If a property or method of a class is private, it cannot be used
from outside the class itself. If an instance of this class is created
inside an object of a different class, the creating object has no
access to private methods or properties of the created object.
Events
We’ve covered events fairly well already. To sum up, events occur when a control
object sends a message in response to some change that has happened to it.
Generally, these changes occur as the result of user interaction with the control
in the browser. For instance, when a button is clicked, a Click event is raised,
and we can handle that event to perform some action. The object that triggers
the event is referred to as the event sender, while the object that receives the
event is referred to as the event receiver. You’ll learn more about these terms
in Chapter 4.
Order the print version of this book to get all 700+ pages! 78
Chapter 3: VB.NET and C# Programming Basics
Understanding Inheritance
The term inheritance refers to the ability for one class to use properties and
methods exposed by another class.
In our dog example, we first created a class called Dog, then created instances of
that class to represent individual dogs such as Rayne. However, dogs are types
of animals, and many characteristics of dogs are shared by all (or most) animals.
For instance, Rayne has four legs, two ears, one nose, two eyes, etc. It might be
better, then, for us to create a base class called Animal. When we then define
the Dog class, it would inherit from the Animal class, and all public properties
and methods of Animal would be available to instances of the Dog class.
Similarly, we could create a new class based on the Dog class. In programming
circles, this is called deriving a subclass from Dog. For instance, we might create
a class for Australian Shepherd and one for my other dog Amigo, called Chihuahua,
both of which would inherit the properties and methods of the Dog base
class, and define new ones specific to each breed.
Don’t worry too much if this is still a little unclear. The best way to appreciate
inheritance is to see it used in a real program. The most obvious use of inheritance
in ASP.NET comes with the technique of code-behind.
Separating Code From Content With
Code-Behind
Most companies that employ development teams usually split projects into two
groups, visual design and functional development, because software engineers
are usually poor designers, and designers are often poor engineers. Until now,
our ASP.NET pages have contained code render blocks that place VB.NET or
C# code directly within the ASP.NET page. The problem with this approach is
that there is no separation between the presentational elements of the page and
the application logic. Traditional ASP was infamous for creating “spaghetti” code,
which was scattered and intertwined throughout the presentation elements. This
made it very tricky to manage the code between development teams, as you’ll
know if you’ve ever tried to pick apart someone else’s ASP code. In response to
these problems, ASP.NET introduces a new way of developing pages that allows
code developers to work separately from the presentational designers who lay
out individual pages.
79 Order the print version of this book to get all 700+ pages!
Understanding Inheritance
This new method, called code-behind, keeps all of your presentational elements
(controls) inside the .aspx file, but moves all your code to a separate class in a
.vb or .cs code-behind file. Consider the following ASP.NET page, which displays
a simple button and label:
VB.NET


Sample Page using VB.NET




OnClick="Click" />






C#


Sample Page using C#




OnClick="Click" />






Order the print version of this book to get all 700+ pages! 80
Chapter 3: VB.NET and C# Programming Basics
Let’s see how this example could be separated into the following two distinct
files:
sample.aspx layout, presentation, and static content
sample.vb code-behind files containing a custom page class
sample.cs
First, we take all the code and place it in the code-behind file (sample.vb or
sample.cs). This file is a pure code file, and contains no HTML or other markup
tags. What it does contain is a class definition. Nevertheless, we can still access
presentation elements from this file, using their IDs, such as lblMessage:
VB.NET File: sample.vb
' First off we import some useful namespaces
Imports System
Imports System.Web.UI
Imports System.Web.UI.WebControls
' All code-behind classes generally inherit from Page
Public Class Sample
Inherits Page
' Declare the presentation elements on the ASPX page
Protected WithEvents lblMessage As Label
Protected WithEvents btnSubmit As Button
' Here's the Click handler just as it appeared before
Sub Click(s As Object, e As EventArgs)
lblMessage.Text = "Hello World"
End Sub
End Class
C# File: sample.cs
// First off we import some useful namespaces
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
// All code-behind classes generally inherit from Page
public class Sample : Page
{
// Declare the presentation elements on the ASPX page
protected Label lblMessage;
protected Button btnSubmit;
81 Order the print version of this book to get all 700+ pages!
Separating Code From Content With Code-Behind
// Here's the Click handler just as it appeared before
public void Click(Object s, EventArgs e) {
lblMessage.Text = "Hello World";
}
}
Without code, the main ASP.NET page becomes much simpler:
VB.NET File: sample.aspx
<%@ Page Inherits="Sample" Src="Sample.vb" %>


Sample Page using VB.NET



OnClick="Click" />






C# File: sample.aspx
<%@ Page Inherits="Sample" Src="Sample.cs" %>


Sample Page using C#



OnClick="Click" />






As you can see, the only line that’s different between the .aspx pages is the Page
directive:
Order the print version of this book to get all 700+ pages! 82
Chapter 3: VB.NET and C# Programming Basics
VB.NET File: sample.aspx (excerpt)
<%@ Page Inherits="Sample" Src="Sample.vb" %>
C# File: sample.aspx (excerpt)
<%@ Page Inherits="Sample" Src="Sample.cs" %>
The only real change between the VB.NET and C# versions of the page is the
source filename extension. In both cases, the page inherits from the class Sample.
The code-behind file is written differently from what you’re used to seeing so far.
While we no longer need
C#

In this case, when the user clicks the button, the ServerClick event is raised,
the Click() subroutine is called to handle it, and the ID of the HtmlButton
control is written onto the screen with Response.Write() (the Write() method
of the Response object).
HtmlForm
The HtmlForm control creates a server-side
tag. Most HTML controls,
Web controls, etc., must be placed inside an HtmlForm control.
Order the print version of this book to get all 700+ pages! 88
Chapter 4: Web Forms and Web Controls



HtmlImage
The HtmlImage control creates a server-side tag. The following code shows
how we might place an HtmlImage control on a page, along with an HtmlButton:


The user could change this image dynamically by pressing the button if we add
code as follows:
VB.NET

C#

What will happen if these controls are placed on a page along with the script
block? First of all, the image arrow.gif will appear. When the HtmlButton
control is clicked, it changes to welcome.gif. Behind the scenes, the ServerClick
event is raised when the button is clicked, thus the Click() subroutine is called,
and the Src property of the HtmlImage control is changed from arrow.gif to
welcome.gif.
HtmlGenericControl
The HtmlGenericControl creates a server-side control for HTML tags that do
not have an HTML control associated with them. Perfect examples of this are
the and
tags. The following example illustrates how you can
89 Order the print version of this book to get all 700+ pages!
HtmlImage
modify text within a tag to change the content from I like ASP.NET to
Why would anyone need PHP? dynamically.
I like ASP.NET



We simply add the following code to respond to the ServerClick event and
change the text:
VB.NET

C#

HtmlInputButton
The HtmlInputButton control creates a server-side ,
, or HTML tag.



As with HtmlButton, you can assign a server-side event handler to controls of
this type with the OnServerClick attribute.
HtmlInputCheckBox
The HtmlInputCheckBox control creates a server-side
HTML tag.
Order the print version of this book to get all 700+ pages! 90
Chapter 4: Web Forms and Web Controls
/>ASP.NET

/>PHP

/>JSP

/>CGI

/>Coldfusion

The HtmlInputCheckBox control is the perfect choice when you want to allow
your users to select multiple items from a list.
HtmlInputFile
The HtmlInputFile control creates a server-side tag in
the HTML. This displays a text box and Browse button to allow users to upload
files from ASP.NET pages. There is no Web control equivalent for this tag, so
it’s typically required when working with file uploads—even with Web Forms
(which we’ll discuss shortly).

HtmlInputHidden
The HtmlInputHidden control creates a server-side tag.

Try viewing the source of any one of your ASP.NET pages from your browser,
and you’re likely to find this tag being used to store view state information.
HtmlInputImage
The HtmlInputImage control creates a server-side tag.
src="ButtonImage.jpg" />
This tag provides an alternative to the HtmlInputButton control. They both
function in the same way; the difference is that the HtmlInputImage control uses
a custom image rather than the beveled gray Windows-style button. The mouse
91 Order the print version of this book to get all 700+ pages!
HtmlInputFile
coordinates are also sent along with the form submission when the user clicks a
control of this type.
HtmlInputRadioButton
The HtmlInputRadioButton control creates a server-side radio button. The following
code, for instance, offers a choice of Male or Female:
Gender?

Male

Female
Similar to the HtmlInputCheckBox control, the HtmlInputRadioButton control
creates a list of items for users to choose from. The difference, however, is that
the user is only able to select one item at a time.
HtmlInputText
The HtmlInputText control creates a server-side or type="password"> tag.
Please Login

Username:



Password:


The preceding code creates a typical login screen layout.
HtmlSelect
The HtmlSelect control creates a server-side version of the





Order the print version of this book to get all 700+ pages! 92
Chapter 4: Web Forms and Web Controls
The following code creates a multiple-selection list box:
Which of these movies do you like?


You’ll notice the