You are on page 1of 53

ASP.NET 2.0.

Ksiga eksperta
Autor: Stephen Walther
Tumaczenie: Robert Grczyski
ISBN: 978-83-246-0689-4
Tytu oryginau: ASP.NET 2.0 Unleashed
Format: B5, stron: 1024
oprawa twarda
Zawiera CD-ROM
Kompletny przewodnik po technologii ASP.NET 2.0
Poznaj zasady dziaania ASP.NET
Naucz si korzysta z nowatorskich moliwoci ASP.NET 2.0
Twrz profesjonalne witryny internetowe

ASP.NET to popularna technologia firmy Microsoft suca do tworzenia wysoce


interaktywnych i skalowalnych witryn internetowych. Jej najnowsza wersja, ASP.NET
2.0, nie tylko zawiera ponad 50 nowych kontrolek, ale rwnie szereg innowacyjnych
waciwoci. Funkcje te pozwalaj midzy innymi na dostp do danych bez
koniecznoci pisania kodu, atwe nadawanie wsplnego stylu witrynom, dziki stronom
wzorcowym i tematom, budowanie portali za pomoc kontrolek Web Parts oraz
wykorzystanie zalet technologii AJAX.
ASP.NET 2.0. Ksiga eksperta to profesjonalne i kompletne rdo wiedzy o tej
technologii. Znajdziesz tu informacje o wszystkich wbudowanych kontrolkach ASP.NET
2.0 oraz o sposobach opracowania wasnych. Nauczysz si tworzy efektowne witryny
internetowe, a take dba o ich bezpieczestwo oraz wysok skalowalno. Dowiesz
si, jak atwo mona dodawa nowe, jednolite strony do aplikacji sieciowych oraz
zarzdza ich stanem. Przeczytasz o efektywnej obsudze bufora w celu poprawy
wydajnoci witryny. Poznasz take wszystkie nowe moliwoci ASP.NET 2.0.

Do ksiki doczona jest pyta z przykadowym kodem w jzykach VB.NET i C#, ktry
moesz szybko wykorzysta na wasnych witrynach. ASP.NET 2.0. Ksiga eksperta
to prawdziwa skarbnica informacji, ktr powinien mie kady programista ASP.NET.

Wydawnictwo Helion
ul. Kociuszki 1c
44-100 Gliwice
tel. 032 230 98 63
e-mail: helion@helion.pl

Dziaanie platformy ASP.NET


Stosowanie wbudowanych kontrolek
Tworzenie wasnych kontrolek
Sprawdzanie poprawnoci danych
Nadawanie stylu witrynie przy uyciu stron wzorcowych i tematw
Dostp do danych i wywietlanie ich
Tworzenie wasnych komponentw
Obsuga nawigacji po witrynie
Zapewnianie bezpieczestwa witryny
Obsuga stanu aplikacji
Tworzenie portali przy uyciu kontrolek Web Parts
Wykorzystanie technologii AJAX

Wykorzystaj potencja ASP.NET 2.0 i twrz lepsze witryny internetowe

Spis treci
O autorze .....................................................................................................21
Wprowadzenie ............................................................................................23

Cz I Tworzenie stron ASP.NET ..........................................................29


Rozdzia 1. Oglny opis platformy ASP.NET ..............................................31
ASP.NET i platforma .NET ................................................................................................................. 34
Zrozumienie biblioteki Framework Class Library ........................................................................ 34
Zrozumienie rodowiska Common Language Runtime ................................................................ 40
Zrozumienie kontrolek ASP.NET ........................................................................................................ 42
Oglny opis kontrolek ASP.NET .................................................................................................. 42
Zrozumienie kontrolek HTML ...................................................................................................... 44
Zrozumienie i obsuga zdarze kontrolek ..................................................................................... 45
Zrozumienie stanu widoku ............................................................................................................ 49
Zrozumienie stron ASP.NET ............................................................................................................... 51
Zrozumienie zagadnie kompilacji dynamicznej .......................................................................... 51
Zrozumienie drzewa kontrolek ...................................................................................................... 53
Uywanie stron ukrytego kodu ...................................................................................................... 54
Obsuga zdarze strony ................................................................................................................. 57
Uywanie waciwoci Page.IsPostBack ....................................................................................... 59
Debugowanie i ledzenie stron ASP.NET ..................................................................................... 60
ledzenie wykonywania strony ..................................................................................................... 63
Instalowanie platformy ASP.NET ....................................................................................................... 66
Podsumowanie ..................................................................................................................................... 67

Rozdzia 2. Uywanie kontrolek standardowych .....................................69


Wywietlanie informacji ...................................................................................................................... 69
Uywanie kontrolki Label ............................................................................................................. 69
Uywanie kontrolki Literal ............................................................................................................ 72
Przyjmowanie danych wejciowych od uytkownika ......................................................................... 74
Uywanie kontrolki TextBox ........................................................................................................ 74
Uywanie kontrolki CheckBox ..................................................................................................... 78
Uywanie kontrolki RadioButton .................................................................................................. 80
Wysyanie danych formularzy WWW ................................................................................................. 82
Uywanie kontrolki Button ........................................................................................................... 82
Uywanie kontrolki LinkButton .................................................................................................... 83
Uywanie kontrolki ImageButton ................................................................................................. 85

ASP.NET 2.0. Ksiga eksperta


Uywanie skryptw po stronie klienta z kontrolkami Button ........................................................88
Przekazywanie danych midzy stronami .......................................................................................89
Okrelanie przycisku domylnego .................................................................................................90
Obsugiwanie zdarzenia Command ................................................................................................90
Wywietlanie obrazkw .......................................................................................................................91
Uywanie kontrolki Image .............................................................................................................91
Uywanie kontrolki ImageMap ......................................................................................................92
Uywanie kontrolki Panel ....................................................................................................................95
Uywanie kontrolki HyperLink ............................................................................................................98
Podsumowanie ......................................................................................................................................98

Rozdzia 3. Uywanie kontrolek sprawdzania poprawnoci danych ... 101


Oglny opis kontrolek sprawdzania poprawnoci danych .................................................................101
Kontrolki sprawdzania poprawnoci danych i JavaScript ...........................................................103
Uywanie waciwoci Page.IsValid ...........................................................................................104
Ustawianie waciwoci Display ..................................................................................................105
Podwietlanie bdw dotyczcych sprawdzania poprawnoci danych .......................................106
Uywanie grup sprawdzania poprawnoci ...................................................................................108
Wyczenie sprawdzania poprawnoci danych ............................................................................109
Uywanie kontrolki RequiredFieldValidator .....................................................................................110
Uywanie kontrolki RangeValidator ..................................................................................................112
Uywanie kontrolki CompareValidator .............................................................................................113
Uywanie kontrolki RegularExpressionValidator ..............................................................................116
Uywanie kontrolki CustomValidator ................................................................................................118
Uywanie kontrolki ValidationSummary ...........................................................................................120
Tworzenie wasnych kontrolek sprawdzania poprawnoci danych ....................................................123
Tworzenie kontrolki LengthValidator ..........................................................................................124
Tworzenie kontrolki AjaxValidator .............................................................................................125
Podsumowanie ....................................................................................................................................127

Rozdzia 4. Uywanie kontrolek zaawansowanych ............................... 129


Przyjmowanie plikw przekazywanych do serwera ...........................................................................130
Zapisywanie plikw w systemie plikw ......................................................................................131
Zapisywanie plikw w bazie danych ...........................................................................................132
Przekazywanie duych plikw .....................................................................................................134
Wywietlanie kalendarza ....................................................................................................................136
Tworzenie mechanizmu do wybierania daty ................................................................................139
Generowanie kalendarza na podstawie danych z tabeli bazy danych ..........................................140
Wywietlanie reklam ..........................................................................................................................141
Przechowywanie listy reklam w pliku XML ...............................................................................142
Przechowywanie listy reklam w tabeli bazy danych ....................................................................143
ledzenie waciwoci Impressions oraz przekierowa uytkownikw
na witryn reklamodawcy .........................................................................................................144
Wywietlanie rnych widokw strony .............................................................................................146
Wywietlanie strony z zastosowaniem zakadek .........................................................................146
Wywietlanie formularza skadajcego si z wielu czci ...........................................................147
Wywietlanie kreatora ........................................................................................................................148
Podsumowanie ....................................................................................................................................151

Spis treci

Cz II Projektowanie witryn internetowych ASP.NET ....................153


Rozdzia 5. Projektowanie witryn internetowych
z wykorzystaniem stron wzorcowych ...................................155
Tworzenie stron wzorcowych ............................................................................................................ 156
Tworzenie zawartoci domylnej ................................................................................................ 158
Zagniedanie stron wzorcowych ............................................................................................... 159
Uywanie obrazkw i czy na stronach wzorcowych ................................................................ 160
Rejestrowanie stron wzorcowych w pliku konfiguracyjnym aplikacji ....................................... 162
Modyfikowanie zawartoci strony wzorcowej .................................................................................. 163
Uywanie atrybutu Title .............................................................................................................. 164
Uywanie waciwoci Page Header ........................................................................................... 164
Udostpnianie waciwoci strony wzorcowej ............................................................................ 165
Uywanie metody FindControl na stronach wzorcowych ........................................................... 166
Dynamiczne adowanie stron wzorcowych ....................................................................................... 166
Dynamiczne wczytywanie stron wzorcowych na wielu stronach z treci ................................. 169
Podsumowanie ................................................................................................................................... 170

Rozdzia 6. Projektowanie witryn internetowych


z zastosowaniem tematw ...................................................171
Tworzenie tematw ............................................................................................................................ 172
Dodawanie skrek do tematw .......................................................................................................... 172
Tworzenie skrek o danych nazwach .......................................................................................... 174
Atrybut Theme kontra atrybut StylesheetTheme ......................................................................... 175
Blokowanie tematw ................................................................................................................... 176
Rejestrowanie tematw w pliku konfiguracyjnym aplikacji ....................................................... 178
Dodawanie kaskadowych arkuszy stylw do tematw ...................................................................... 179
Dodawanie wielu arkuszy stylw do tematu ............................................................................... 180
Zmiana projektu strony za pomoc kaskadowych arkuszy stylw .............................................. 181
Tworzenie tematw globalnych ......................................................................................................... 183
Dynamiczne stosowanie tematw ...................................................................................................... 184
Dynamiczne stosowanie skrek ................................................................................................... 185
Podsumowanie ................................................................................................................................... 187

Rozdzia 7. Tworzenie wasnych kontrolek


za pomoc kontrolek uytkownika ......................................189
Tworzenie kontrolek uytkownika .................................................................................................... 190
Rejestrowanie kontrolki uytkownika w pliku konfiguracyjnym aplikacji ................................. 191
Udostpnianie waciwoci kontrolki uytkownika .................................................................... 192
Udostpnianie zdarze kontrolki uytkownika ........................................................................... 193
Tworzenie kontrolki AddressForm .............................................................................................. 194
Technologia AJAX i kontrolki uytkownika ..................................................................................... 195
Dynamiczne wczytywanie kontrolek uytkownika ........................................................................... 197
Uywanie dyrektywy Reference .................................................................................................. 198
Tworzenie kreatora skadajcego si z wielu stron ..................................................................... 199
Podsumowanie ................................................................................................................................... 202

ASP.NET 2.0. Ksiga eksperta

Cz III Dostp do danych ............................................................... 203


Rozdzia 8. Oglny opis zagadnie dostpu do danych ...................... 205
Uywanie kontrolek DataBound ........................................................................................................205
Praca z kontrolkami List ..............................................................................................................206
Praca z tabelarycznymi kontrolkami DataBound .........................................................................207
Praca z hierarchicznymi kontrolkami DataBound .......................................................................208
Praca z innymi kontrolkami .........................................................................................................209
Uywanie kontrolek DataSource ........................................................................................................210
Uywanie parametrw ASP.NET z kontrolkami DataSource .....................................................212
Uywanie programowego doczania danych ....................................................................................213
Zrozumienie szablonw i wyrae dotyczcych doczania danych .................................................215
Uywanie szablonw ...................................................................................................................216
Uywanie wyrae doczania danych ........................................................................................217
Uywanie dwukierunkowych wyrae doczania danych ..........................................................220
Oglny opis bazy danych SQL Server 2005 Express .........................................................................221
Funkcje bazy danych SQL Server Express ..................................................................................221
Narzdzia do zarzdzania baz danych SQL Server 2005 Express .............................................222
Serwerowe bazy danych kontra lokalne bazy danych ..................................................................224
Przykadowa aplikacja WWW wykorzystujca baz danych ............................................................227
Podsumowanie ....................................................................................................................................230

Rozdzia 9. Uywanie kontrolki SqlDataSource ...................................... 231


Nawizywanie pocze z baz danych .............................................................................................232
Nawizanie poczenia z baz Microsoft SQL Server .................................................................232
Nawizywanie poczenia z innymi bazami danych ....................................................................234
Przechowywanie cigw tekstowych poczenia w pliku konfiguracyjnym aplikacji ................235
Szyfrowanie cigw tekstowych poczenia ................................................................................236
Wykonywanie polece bazy danych ..................................................................................................237
Wykonywanie polece SQL ........................................................................................................238
Wykonywanie procedur skadowanych .......................................................................................239
Filtrowanie rekordw bazy danych ..............................................................................................240
Zmiana trybu rda danych .........................................................................................................241
Obsuga bdw wynikajcych z wykonywania polece SQL ....................................................242
Anulowanie wykonywania polecenia ..........................................................................................244
Uywanie parametrw ASP.NET z kontrolk SqlDataSource ...........................................................244
Uywanie obiektu ASP.NET Parameter ......................................................................................246
Uywanie obiektu ASP.NET ControlParameter ..........................................................................247
Uywanie obiektu ASP.NET CookieParameter ...........................................................................249
Uywanie obiektu ASP.NET FormParameter ..............................................................................249
Uywanie obiektu ASP.NET ProfileParameter ...........................................................................250
Uywanie obiektu QueryStringParameter ....................................................................................252
Uywanie obiektu SessionParameter ...........................................................................................252
Programowe wykonywanie polece kontrolki SqlDataSource ..........................................................253
Dodawanie parametrw ADO.NET .............................................................................................253
Wykonywanie polece Insert, Update i Delete ............................................................................254
Wykonywanie polece Select ......................................................................................................254
Buforowanie danych za pomoc kontrolki SqlDataSource ................................................................256
Podsumowanie ....................................................................................................................................257

Spis treci

Rozdzia 10. Uywanie kontrolek List .......................................................259


Oglny opis kontrolek List ................................................................................................................ 259
Deklarowanie elementw ListItem .............................................................................................. 259
Doczanie do rda danych ....................................................................................................... 261
Okrelanie wybranego elementu listy .......................................................................................... 263
Dodawanie elementw danych .................................................................................................... 264
Wczenie automatycznego odwieania .................................................................................... 265
Uywanie zbioru Items ................................................................................................................ 266
Praca z kontrolk DropDownList ...................................................................................................... 267
Praca z kontrolk RadioButtonList .................................................................................................... 268
Praca z kontrolk ListBox .................................................................................................................. 269
Praca z kontrolk CheckBoxList ....................................................................................................... 271
Praca z kontrolk BulletedList ........................................................................................................... 272
Utworzenie wasnej kontrolki List ..................................................................................................... 275
Podsumowanie ................................................................................................................................... 277

Rozdzia 11. Uywanie kontrolki GridView ..............................................279


Podstawy kontrolki GridView ........................................................................................................... 279
Wywietlanie danych ................................................................................................................... 280
Zaznaczanie danych ..................................................................................................................... 281
Uywanie kluczy danych ............................................................................................................. 282
Sortowanie danych ...................................................................................................................... 283
Stronicowanie danych .................................................................................................................. 286
Edytowanie danych ...................................................................................................................... 289
Wywietlanie pustych danych ..................................................................................................... 292
Formatowanie kontrolki GridView ............................................................................................. 293
Uywanie stanu widoku z kontrolk GridView .......................................................................... 295
Uywanie pl w kontrolce GridView ................................................................................................ 296
Uywanie pl BoundField ........................................................................................................... 297
Uywanie pl CheckBoxField ..................................................................................................... 299
Uywanie pl CommandField ..................................................................................................... 299
Uywanie pl ButtonField ........................................................................................................... 301
Uywanie pl HyperLinkField .................................................................................................... 303
Uywanie pl ImageField ............................................................................................................ 304
Uywanie pl TemplateField ....................................................................................................... 306
Praca ze zdarzeniami kontrolki GridView ......................................................................................... 307
Podwietlanie rekordw danych kontrolki GridView ................................................................. 309
Wywietlanie podsumowa kolumn ............................................................................................ 310
Wywietlanie zagniedonych formularzy typu strona gwna/strona szczegowa .................. 310
Rozszerzanie moliwoci kontrolki GridView .................................................................................. 312
Tworzenie pola dla dugiego tekstu ............................................................................................. 312
Tworzenie pola DeleteButtonField .............................................................................................. 314
Tworzenie pola ValidatedField ................................................................................................... 315
Podsumowanie ................................................................................................................................... 316

Rozdzia 12. Uywanie kontrolek DetailsView i FormView .....................317


Uywanie kontrolki DetailsView ....................................................................................................... 317
Wywietlanie danych za pomoc kontrolki DetailsView ............................................................ 317
Uywanie pl w kontrolce DetailsView ...................................................................................... 318
Wywietlanie pustych danych za pomoc kontrolki DetailsView .............................................. 320

10

ASP.NET 2.0. Ksiga eksperta


Stronicowanie danych w kontrolce DetailsView .........................................................................320
Uaktualnianie danych za pomoc kontrolki DetailsView ............................................................324
Wstawianie danych za pomoc kontrolki DetailsView ...............................................................328
Usuwanie danych za pomoc kontrolki DetailsView ..................................................................328
Praca ze zdarzeniami kontrolki DetailsView ...............................................................................329
Formatowanie kontrolki DetailsView ..........................................................................................331
Uywanie kontrolki FormView ..........................................................................................................333
Wywietlanie danych za pomoc kontrolki FormView ...............................................................333
Stronicowanie danych w kontrolce FormView ............................................................................334
Edytowanie danych za pomoc kontrolki FormView ..................................................................336
Wstawianie danych za pomoc kontrolki FormView ..................................................................338
Usuwanie danych za pomoc kontrolki FormView .....................................................................339
Podsumowanie ....................................................................................................................................340

Rozdzia 13. Uywanie kontrolek Repeater i DataList ............................ 341


Uywanie kontrolki Repeater .............................................................................................................341
Wywietlanie danych za pomoc kontrolki Repeater ..................................................................342
Uywanie szablonw w kontrolce Repeater ................................................................................343
Obsuga zdarze kontrolki Repeater ............................................................................................345
Uywanie kontrolki DataList .............................................................................................................346
Wywietlanie danych za pomoc kontrolki DataList ...................................................................346
Wywietlanie danych w wielu kolumnach ...................................................................................348
Uywanie szablonw w kontrolce DataList .................................................................................348
Zaznaczanie danych w kontrolce DataList ..................................................................................350
Edytowanie danych za pomoc kontrolki DataList .....................................................................351
Formatowanie kontrolki DataList ................................................................................................353
Podsumowanie ....................................................................................................................................354

Cz IV Tworzenie komponentw ................................................... 355


Rozdzia 14. Tworzenie komponentw .................................................... 357
Tworzenie komponentw podstawowych ..........................................................................................358
Komponenty a kompilacja dynamiczna .......................................................................................359
czenie w katalogu App_Code komponentw napisanych w rnych jzykach ......................360
Deklarowanie metod ....................................................................................................................361
Deklarowanie pl i waciwoci ...................................................................................................362
Deklarowanie konstruktorw .......................................................................................................364
Przecianie metod i konstruktorw ............................................................................................365
Deklarowanie przestrzeni nazw ...................................................................................................366
Tworzenie klas czciowych ........................................................................................................367
Dziedziczenie i klasy MustInherit ................................................................................................368
Deklarowanie interfejsw ............................................................................................................369
Uywanie modyfikatorw dostpu ..............................................................................................370
Lista IntelliSense a komponenty ..................................................................................................370
Uywanie ASP.NET wewntrz komponentu ...............................................................................371
Tworzenie bibliotek komponentw ....................................................................................................372
Kompilowanie bibliotek komponentw .......................................................................................373
Dodawanie odniesienia do biblioteki klas ....................................................................................377
Zagadnienia dotyczce architektury komponentw ...........................................................................381
Tworzenie aplikacji skadajcej si z wielu warstw ....................................................................382
Tworzenie warstwy interfejsu uytkownika ................................................................................383

Spis treci

11

Tworzenie warstwy logiki biznesowej ........................................................................................ 383


Tworzenie warstwy dostpu do danych ....................................................................................... 385
Podsumowanie ................................................................................................................................... 385

Rozdzia 15. Uywanie kontrolki ObjectDataSource ..............................387


Reprezentacja obiektw za pomoc kontrolki ObjectDataSource ..................................................... 387
Doczanie danych do komponentu ............................................................................................. 388
Doczanie danych obiektu DataReader ...................................................................................... 389
Doczanie danych do obiektu DataSet ....................................................................................... 389
Doczanie danych do usugi WWW ........................................................................................... 390
Uywanie parametrw w kontrolce ObjectDataSource ..................................................................... 392
Uywanie rnych typw parametrw ........................................................................................ 393
Przekazywanie obiektw jako parametrw ................................................................................. 393
Stronicowanie, sortowanie i filtrowanie danych za pomoc kontrolki ObjectDataSource ............... 396
Uywanie interfejsu stronicowania ............................................................................................. 396
Stronicowanie w rdle danych ................................................................................................... 397
Interfejs uytkownika sortowania ................................................................................................ 399
Sortowanie w rdle danych ........................................................................................................ 400
Filtrowanie danych ...................................................................................................................... 401
Obsuga zdarze kontrolki ObjectDataSource ................................................................................... 403
Dodawanie i modyfikowanie parametrw ................................................................................... 404
Obsugiwanie bdw metod ....................................................................................................... 405
Obsugiwanie zdarzenia ObjectCreating ..................................................................................... 406
Kwestie wspbienoci a kontrolki ObjectDataSource .................................................................... 406
Rozbudowa kontrolki ObjectDataSource .......................................................................................... 407
Tworzenie wasnej kontrolki ObjectDataSource ......................................................................... 408
Tworzenie wasnych obiektw parametrw ................................................................................ 409
Podsumowanie ................................................................................................................................... 410

Rozdzia 16. Tworzenie komponentw dostpu do danych .................413


Model Connected Data Access .......................................................................................................... 414
Uywanie obiektu Connection ..................................................................................................... 416
Uywanie obiektu Command ...................................................................................................... 422
Uywanie obiektu DataReader .................................................................................................... 429
Model Disconnected Data Access ..................................................................................................... 433
Uywanie obiektu DataAdapter ................................................................................................... 434
Uywanie obiektu DataTable ...................................................................................................... 436
Uywanie obiektu DataView ....................................................................................................... 440
Uywanie obiektu DataSet .......................................................................................................... 441
Wykonywanie asynchronicznych polece bazy danych .................................................................... 442
Uywanie asynchronicznych metod ASP.NET ........................................................................... 443
Uywanie asynchronicznych stron ASP.NET ............................................................................. 444
Tworzenie obiektw bazy danych za pomoc platformy .NET ......................................................... 446
Wczenie integracji CLR ........................................................................................................... 446
Tworzenie za pomoc platformy .NET typw zdefiniowanych przez uytkownika ................... 447
Tworzenie warstwy dostpu do danych za pomoc typu zdefiniowanego
przez uytkownika .................................................................................................................... 450
Tworzenie procedur skadowanych za pomoc platformy .NET ................................................ 452
Utworzenie podzespou procedury skadowanej ......................................................................... 452
Podsumowanie ................................................................................................................................... 454

12

ASP.NET 2.0. Ksiga eksperta

Cz V Nawigacja po witrynie internetowej .................................. 457


Rozdzia 17. Uywanie kontrolek nawigacyjnych ................................. 459
Zrozumienie zagadnienia mapy witryny internetowej .......................................................................459
Uywanie kontrolki SiteMapPath .......................................................................................................460
Formatowanie kontrolki SiteMapPath .........................................................................................463
Uywanie kontrolki Menu ..................................................................................................................464
Deklaracyjne dodawanie elementw menu ..................................................................................465
Uywanie kontrolki Menu z kontrolk MultiView ......................................................................467
Doczanie mapy witryny ............................................................................................................468
Doczanie do pliku XML ............................................................................................................469
Doczanie danych pochodzcych z bazy danych .......................................................................471
Formatowanie kontrolki Menu .....................................................................................................472
Uywanie szablonw w kontrolce Menu .....................................................................................476
Uywanie kontrolki TreeView ...........................................................................................................477
Deklaracyjne dodawanie wzw drzewka ..................................................................................478
Wywietlanie pl wyboru w kontrolce TreeView .......................................................................479
Doczanie do mapy witryny .......................................................................................................480
Doczanie do pliku XML ............................................................................................................481
Doczanie do danych pochodzcych z bazy danych ..................................................................482
Uywanie funkcji Populate On Demand oraz technologii AJAX ................................................483
Formatowanie kontrolki TreeView ..............................................................................................486
Budowanie kontrolki hierarchicznego rda danych SQL ................................................................490
Podsumowanie ....................................................................................................................................492

Rozdzia 18. Uywanie mapy witryny ...................................................... 493


Uywanie kontrolki SiteMapDataSource ...........................................................................................493
Ustawianie waciwoci kontrolki SiteMapDataSource ..............................................................494
Uywanie klasy SiteMap ....................................................................................................................496
Uywanie klasy SiteMapNode .....................................................................................................497
Zaawansowana konfiguracja mapy witryny .......................................................................................500
Uywanie funkcji Security Trimming ..........................................................................................500
czenie wielu map witryn ..........................................................................................................503
Tworzenie wasnych atrybutw mapy witryny ............................................................................504
Tworzenie wasnych dostawcw mapy witryny .................................................................................506
Tworzenie dostawcy AutoSiteMapProvider ................................................................................507
Tworzenie dostawcy SqlSiteMapProvider ...................................................................................508
Generowanie pliku Google SiteMap ..................................................................................................511
Podsumowanie ....................................................................................................................................513

Rozdzia 19. Nawigacja zaawansowana ................................................ 515


Ponowne odwzorowanie adresw URL .............................................................................................515
Tworzenie wasnego moduu UrlRemapper .................................................................................517
Uywanie klasy VirtualPathProvider .................................................................................................520
Ograniczenia klasy VirtualPathProvider ......................................................................................521
Zrozumienie klasy VirtualPathProvider .......................................................................................521
Rejestrowanie klasy VirtualPathProvider ....................................................................................523
Przechowywanie witryny internetowej w bazie danych Microsoft SQL Server .........................524
Podsumowanie ....................................................................................................................................526

Spis treci

13

Cz VI Bezpieczestwo ...................................................................529
Rozdzia 20. Uywanie kontrolek Login ...................................................531
Oglny opis kontrolek Login ............................................................................................................. 532
Uywanie kontrolki Login ................................................................................................................. 534
Automatyczne przekierowanie uytkownika na stron logowania ............................................. 535
Automatyczne ukrywanie kontrolki Login przed uwierzytelnionymi uytkownikami ............... 536
Uywanie szablonu w kontrolce Login ....................................................................................... 536
Przeprowadzanie wasnego uwierzytelniania w kontrolce Login ............................................... 538
Uywanie kontrolki CreateUserWizard ............................................................................................. 539
Konfigurowanie pl formularza kontrolki CreateUserWizard .................................................... 540
Wysyanie wiadomoci e-mail po utworzeniu uytkownika ....................................................... 542
Automatyczne przekierowanie uytkownika ze strony logowania ............................................. 544
Automatyczne generowanie hasa ............................................................................................... 544
Uywanie szablonw w kontrolce CreateUserWizard ................................................................ 546
Dodawanie krokw do kontrolki CreateUserWizard .................................................................. 548
Uywanie kontrolki LoginStatus ....................................................................................................... 548
Uywanie kontrolki LoginName ........................................................................................................ 549
Uywanie kontrolki ChangePassword ............................................................................................... 550
Wysyanie w wiadomoci e-mail zmienionego hasa .................................................................. 551
Uywanie szablonw w kontrolce ChangePassword .................................................................. 552
Uywanie kontrolki PasswordRecovery ............................................................................................ 553
Wysyanie oryginalnego hasa uytkownika ............................................................................... 553
Wymaganie pytania bezpieczestwa i odpowiedzi na nie ........................................................... 555
Uywanie szablonw w kontrolce PasswordRecovery ............................................................... 556
Uywanie kontrolki LoginView ........................................................................................................ 556
Uywanie rl w kontrolce LoginView ........................................................................................ 557
Podsumowanie ................................................................................................................................... 558

Rozdzia 21. Uywanie mechanizmu ASP.NET Membership ..................559


Konfigurowanie uwierzytelniania ...................................................................................................... 560
Konfigurowanie uwierzytelniania na podstawie formularzy ....................................................... 561
Uywanie uwierzytelniania na podstawie formularzy bez plikw cookie .................................. 563
Uywanie opcji SlidingExpiration w uwierzytelnianiu na podstawie formularzy ...................... 564
Uywanie uwierzytelniania na podstawie formularzy pomidzy aplikacjami ............................ 565
Uywanie uwierzytelniania na podstawie formularzy pomidzy domenami .............................. 567
Uywanie klasy FormsAuthentication ......................................................................................... 569
Uywanie klasy User ................................................................................................................... 571
Konfigurowanie autoryzacji ............................................................................................................... 572
Autoryzacja na podstawie roli ..................................................................................................... 574
Autoryzowanie plikw na podstawie ich pooenia .................................................................... 574
Uywanie autoryzacji w przypadku obrazkw i innego rodzaju plikw ..................................... 575
Uywanie autoryzacji w klasycznych stronach ASP ................................................................... 577
Uywanie mechanizmu ASP.NET Membership ................................................................................ 578
Uywanie interfejsu programowania aplikacji mechanizmu Membership ................................. 579
Szyfrowanie oraz kodowanie hase uytkownikw ..................................................................... 582
Modyfikowanie wymaga dotyczcych hase uytkownikw .................................................... 584
Blokowanie zych uytkownikw ............................................................................................... 585

14

ASP.NET 2.0. Ksiga eksperta


Konfigurowanie dostawcy SqlMembershipProvider ...................................................................586
Konfigurowanie dostawcy ActiveDirectoryMembershipProvider ..............................................588
Tworzenie wasnego dostawcy mechanizmu Membership ..........................................................593
Uywanie menedera rl ....................................................................................................................595
Konfigurowanie dostawcy SqlRoleProvider ................................................................................596
Konfigurowanie dostawcy WindowsTokenRoleProvider ............................................................601
Konfigurowanie dostawcy AuthorizationStoreRoleProvider ......................................................602
Buforowanie rl w pliku cookie przegldarki ..............................................................................604
Uywanie interfejsu programowania aplikacji klasy Roles .........................................................606
Podsumowanie ....................................................................................................................................608

Cz VII Budowanie aplikacji ASP.NET ........................................... 609


Rozdzia 22. Obsuga stanu aplikacji ...................................................... 611
Uywanie plikw cookie przegldarki internetowej ..........................................................................612
Ograniczenia bezpieczestwa plikw cookie ...............................................................................613
Tworzenie plikw cookie .............................................................................................................614
Odczytywanie plikw cookie .......................................................................................................615
Ustawianie waciwoci cookie ....................................................................................................617
Usuwanie plikw cookie ..............................................................................................................618
Praca z plikami cookie zawierajcymi wiele wartoci .................................................................618
Uywanie stanu sesji ..........................................................................................................................619
Przechowywanie w stanie sesji danych pochodzcych z bazy danych ........................................620
Uywanie obiektu Session ...........................................................................................................621
Obsuga zdarze sesji ...................................................................................................................622
Kontrolowanie momentu wyganicia sesji .................................................................................623
Uywanie stanu sesji bez wykorzystywania mechanizmu cookies ..............................................624
Konfigurowanie magazynu stanu sesji .........................................................................................627
Konfigurowanie trybu SQL Server stanu sesji .............................................................................630
Uywanie profili .................................................................................................................................633
Tworzenie grup Profile ................................................................................................................635
Obsuga anonimowych uytkownikw ........................................................................................636
Migracja profilu anonimowego uytkownika ..............................................................................638
Dziedziczenie obiektu Profile z klasy wasnej .............................................................................639
Tworzenie zoonych waciwoci Profile ...................................................................................640
Automatyczne zapisywanie obiektw Profile ..............................................................................642
Uzyskanie dostpu do obiektu Profile z poziomu komponentw ................................................644
Uywanie menedera profili ........................................................................................................645
Konfigurowanie dostawcy obiektu Profile ...................................................................................646
Tworzenie wasnego dostawcy obiektu Profile ............................................................................647
Podsumowanie ....................................................................................................................................650

Rozdzia 23. Buforowanie stron aplikacji oraz danych .......................... 651


Oglny opis buforowania ...................................................................................................................651
Uywanie buforowania danych wyjciowych strony .........................................................................652
Zrnicowanie bufora danych wyjciowych w zalenoci od parametru ....................................653
Zrnicowanie bufora danych wyjciowych w zalenoci od kontrolki .....................................655
Zrnicowanie bufora danych wyjciowych w zalenoci od nagwka .....................................656
Zrnicowanie bufora danych wyjciowych w zalenoci od przegldarki internetowej ...........657
Zrnicowanie bufora danych wyjciowych w zalenoci od wasnej funkcji ............................657

Spis treci

15

Okrelenie pooenia bufora ........................................................................................................ 658


Tworzenie zalenoci plikw bufora danych wyjciowych strony ............................................. 660
Programowe ustalenie okresu wanoci bufora danych wyjciowych strony ............................. 661
Programowe operacje na buforze danych wyjciowych strony ................................................... 662
Tworzenie profili buforowania danych wyjciowych strony ...................................................... 663
Uywanie czciowego buforowania stron ........................................................................................ 664
Uywanie funkcji post-cache substitution ................................................................................... 664
Buforowanie za pomoc kontrolki uytkownika ......................................................................... 666
Wspdzielenie buforowanych danych wyjciowych kontrolki uytkownika ............................ 668
Programowa obsuga bufora kontrolki uytkownika ................................................................... 669
Tworzenie zalenoci plikw bufora kontrolki uytkownika ...................................................... 669
Buforowanie dynamicznie wczytywanych kontrolek uytkownika ............................................ 670
Uywanie buforowania rde danych ............................................................................................... 671
Uywanie polityki bezwzgldnego czasu wyganicia bufora .................................................... 672
Uywanie polityki opniania czasu wyganicia bufora ........................................................... 673
Buforowanie za pomoc kontrolki ObjectDataSource ................................................................ 674
Buforowanie za pomoc kontrolki XmlDataSource .................................................................... 675
Tworzenie klucza zalenoci bufora kontrolki rda danych .................................................... 675
Uywanie buforowania danych .......................................................................................................... 676
Uywanie interfejsu programowania aplikacji obiektu Cache .................................................... 677
Dodawanie elementw do bufora ................................................................................................ 678
Dodawanie elementw z polityk bezwzgldnego czasu wyganicia wanoci ....................... 678
Dodawanie elementw z polityk opniania czasu wyganicia wanoci ............................... 680
Dodawanie elementw z zalenociami ...................................................................................... 680
Okrelanie priorytetu elementu bufora ........................................................................................ 681
Konfigurowanie bufora ................................................................................................................ 681
Uywanie bufora zalenoci SQL ...................................................................................................... 682
Uywanie bufora zalenoci SQL w trybie monitorowania ........................................................ 684
Konfigurowanie bufora zalenoci SQL w trybie monitorowania .............................................. 684
Uywanie bufora zalenoci SQL w trybie monitorowania
wraz z buforowaniem danych wyjciowych strony .................................................................. 687
Uywanie bufora zalenoci SQL w trybie monitorowania
wraz z buforowaniem kontrolek rde danych ....................................................................... 688
Uywanie bufora zalenoci SQL w trybie monitorowania wraz z buforowaniem danych ........ 688
Uywanie bufora zalenoci SQL w trybie przekazywania ........................................................ 689
Konfigurowanie bufora zalenoci SQL w trybie przekazywania .............................................. 690
Uywanie bufora zalenoci SQL w trybie przekazywania
wraz z buforowaniem danych wyjciowych strony .................................................................. 692
Uywanie bufora zalenoci SQL w trybie przekazywania
wraz z buforowaniem kontrolek rde danych ....................................................................... 693
Uywanie bufora zalenoci SQL w trybie przekazywania wraz z buforowaniem danych ........ 694
Podsumowanie ................................................................................................................................... 694

Rozdzia 24. Lokalizowanie aplikacji na wiele jzykw ........................697


Ustalanie biecej kultury .................................................................................................................. 698
Rczne ustalanie kultury .............................................................................................................. 699
Automatyczne okrelanie kultury ................................................................................................ 702
Ustawianie kultury w pliku konfiguracyjnym aplikacji .............................................................. 703
Kultura a kontrolki ASP.NET ..................................................................................................... 704

16

ASP.NET 2.0. Ksiga eksperta


Uywanie klasy CultureInfo ...............................................................................................................704
Uywanie klasy CultureInfo w celu sformatowania wartoci cigu tekstowego .........................705
Porwnywanie i sortowanie wartoci cigw tekstowych ...........................................................706
Tworzenie zasobw lokalnych ...........................................................................................................707
Jawne wyraenia lokalizacyjne ....................................................................................................707
Niejawne wyraenia lokalizacyjne ...............................................................................................709
Uywanie zasobw lokalnych wraz z waciwociami strony ........................................................710
Programowe pobieranie zasobw lokalnych ................................................................................710
Tworzenie zasobw globalnych .........................................................................................................711
Programowe pobieranie zasobw globalnych ..............................................................................713
Uywanie cile okrelonych wyrae lokalizacyjnych ..............................................................713
Uywanie kontrolki Localize .............................................................................................................713
Podsumowanie ....................................................................................................................................714

Rozdzia 25. Praca ze rodowiskiem wykonawczym HTTP .................... 715


Tworzenie wasnej klasy BuildProvider .............................................................................................715
Tworzenie prostej klasy BuildProvider ........................................................................................716
Tworzenie komponentu dostpu do danych klasy BuildProvider ................................................718
Tworzenie wasnej klasy ExpressionBuilder ......................................................................................722
Tworzenie klasy LookupExpressionBuilder ................................................................................723
Tworzenie procedur obsugi HTTP ....................................................................................................726
Tworzenie oglnej procedury obsugi ..........................................................................................726
Implementowanie interfejsu IHttpHandler ..................................................................................727
Rejestrowanie rozszerze za pomoc serwera Internet Information Server ................................729
Tworzenie asynchronicznej procedury obsugi HTTP .................................................................732
Praca z aplikacjami oraz moduami HTTP .........................................................................................734
Tworzenie pliku Global.asax .......................................................................................................735
Tworzenie wasnych moduw HTTP .........................................................................................737
Podsumowanie ....................................................................................................................................739

Rozdzia 26. Konfigurowanie aplikacji .................................................... 741


Oglny opis konfiguracji witryny internetowej .................................................................................741
Uywanie narzdzia Web Site Administration Tool ....................................................................743
Uywanie narzdzia ASP.NET Microsoft Management Console Snap-In ..................................744
Sekcje konfiguracyjne ASP.NET .................................................................................................746
Zastosowanie ustawie konfiguracyjnych na podanej ciece dostpu .......................................748
Blokowanie ustawie konfiguracyjnych ......................................................................................749
Dodawanie wasnych ustawie aplikacji .....................................................................................750
Umieszczanie ustawie konfiguracyjnych w pliku zewntrznym ...............................................752
Uywanie API konfiguracji ................................................................................................................753
Odczytywanie sekcji konfiguracyjnych z biecej aplikacji .......................................................754
Otwieranie pliku konfiguracyjnego ..............................................................................................756
Otwieranie pliku konfiguracyjnego z serwera zdalnego ..............................................................756
Uywanie klas konfiguracyjnych .................................................................................................758
Modyfikowanie sekcji konfiguracyjnych .....................................................................................759
Ustanawianie nowej witryny internetowej ...................................................................................761
Tworzenie wasnych sekcji konfiguracyjnych ...................................................................................762
Tworzenie zbioru elementw konfiguracyjnych ..........................................................................764

Spis treci

17

Tworzenie zaszyfrowanych sekcji konfiguracyjnych ........................................................................ 767


Szyfrowanie sekcji za pomoc narzdzia aspnet_regiis .............................................................. 768
Programowe szyfrowanie sekcji .................................................................................................. 769
Wdraanie zaszyfrowanych plikw konfiguracyjnych aplikacji ................................................. 770
Podsumowanie ................................................................................................................................... 773

Cz VIII Budowanie aplikacji za pomoc Web Parts ..................775


Rozdzia 27. Wprowadzenie do kontrolek Web Parts .............................777
Oglny opis platformy Web Parts ...................................................................................................... 778
Obszary Web Part Zone ............................................................................................................... 779
Tryby wywietlania Web Part ..................................................................................................... 780
Personalizacja Web Part .............................................................................................................. 781
Tworzenie prostej aplikacji Web Part ................................................................................................ 782
Uywanie obszaru Catalog Zone ....................................................................................................... 789
Uywanie kontrolki DeclarativeCatalogPart ............................................................................... 789
Uywanie kontrolki PageCatalogPart .......................................................................................... 791
Uywanie kontrolki ImportCatalogPart ....................................................................................... 792
Uywanie obszaru Editor Zone .......................................................................................................... 795
Uywanie kontrolki AppearanceEditorPart ................................................................................. 796
Uywanie kontrolki BehaviorEditorPart ..................................................................................... 796
Uywanie kontrolki LayoutEditorPart ......................................................................................... 800
Uywanie kontrolki PropertyGridEditorPart ............................................................................... 801
Uywanie obszaru Connection Zone ................................................................................................. 803
czenie kontrolek Web Parts ..................................................................................................... 803
czenie prostych kontrolek Web Parts ...................................................................................... 804
czenie kontrolek Web Parts doczonych do rde danych ................................................... 806
Dynamiczne czenie kontrolek Web Parts ................................................................................. 808
Uywanie elementu Transformer podczas czenia kontrolek Web Parts ................................... 808
Podsumowanie ................................................................................................................................... 811

Rozdzia 28. Tworzenie kontrolek Web Parts ...........................................813


Tworzenie prostych kontrolek Web Parts .......................................................................................... 813
Kontrolka Web Parts Witaj wiecie ............................................................................................. 814
Standardowe waciwoci kontrolki Web Parts ........................................................................... 816
Tworzenie klasy podstawowej dla kontrolki Web Parts na bazie kontrolki uytkownika .......... 818
Uywanie rozszerzonego zestawu waciwoci kontrolki Web Parts ......................................... 819
Filtrowanie kontrolek Web Parts ....................................................................................................... 824
Filtrowanie za pomoc filtru autoryzacji ..................................................................................... 824
Filtrowanie za pomoc cieki dostpu kontrolki uytkownika .................................................. 827
Filtrowanie wzgldem rodzaju kontrolki ..................................................................................... 828
Tworzenie wasnych elementw verb kontrolek Web Parts .............................................................. 829
Tworzenie elementw verb wykonujcych kod po stronie serwera ............................................ 829
Tworzenie elementw verbs wykonujcych kod po stronie klienta ............................................ 830
Tworzenie elementw verb na poziomie obszaru ....................................................................... 831
Wywietlanie stron pomocy kontrolek Web Parts ............................................................................. 832
Zarzdzanie kontrolkami Web Parts za pomoc kontrolki WebPartManager ................................... 832
Podsumowanie ................................................................................................................................... 838

18

ASP.NET 2.0. Ksiga eksperta

Rozdzia 29. Personalizacja kontrolek Web Parts ................................... 839


Oglny opis personalizacji .................................................................................................................839
Uywanie klasy WebPartPersonalization ....................................................................................840
Tworzenie menedera personalizacji ...........................................................................................841
Konfigurowanie personalizacji ...........................................................................................................843
Konfigurowanie personalizacji o zasigu uytkownika oraz wspdzielonym ...........................843
Konfigurowanie bazy danych na potrzeby personalizacji ...........................................................845
Tworzenie spersonalizowanych kontrolek Web Parts ........................................................................847
Praca z waciwociami zoonymi, ktre mona personalizowa ..............................................848
Uywanie interfejsu IPersonalizable ............................................................................................851
Administrowanie personalizacj ........................................................................................................852
Tworzenie wasnych dostawcw personalizacji .................................................................................853
Tworzenie dostawcy QueryStringPersonalizationProvider .........................................................854
Tworzenie dostawcy AnonymousPersonalizationProvider ..........................................................857
Podsumowanie ....................................................................................................................................860

Rozdzia 30. Rozbudowa moliwoci platformy Web Parts ................... 861


Tworzenie wasnych obszarw dla kontrolek Web Parts ...................................................................861
W jaki sposb funkcjonuj obszary Web Part Zone? ..................................................................862
Tworzenie obszaru Photo Web Part Zone ....................................................................................862
Tworzenie obszaru MultiColumn Web Part Zone .......................................................................864
Tworzenie obszaru Menu Web Part Zone ....................................................................................866
Tworzenie wasnych obszarw Catalog Zone ....................................................................................870
W jaki sposb funkcjonuje obszar Catalog Zone? .......................................................................870
Tworzenie kontrolki ReflectionCatalogPart ................................................................................872
Tworzenie kontrolki DragDropCatalogZone ...............................................................................872
Tworzenie kontrolki TemplatedCatalogZone ..............................................................................874
Tworzenie wasnych obszarw Editor Zone ......................................................................................877
W jaki sposb dziaaj obszary Editor Zone? ..............................................................................878
Tworzenie prostej wasnej kontrolki typu Editor Part .................................................................878
Tworzenie kontrolki TemplatedEditorPart ..................................................................................881
Tworzenie wasnych trybw wywietlania kontrolek Web Parts .......................................................882
Podsumowanie ....................................................................................................................................885

Cz IX Tworzenie wasnych kontrolek ........................................... 887


Rozdzia 31. Tworzenie wasnych kontrolek ........................................... 889
Oglny opis tworzenia wasnych kontrolek .......................................................................................889
Tworzenie w peni generowanych kontrolek ...............................................................................890
Budowanie kontrolek zoonych ..................................................................................................895
Budowanie kontrolek hybrydowych ............................................................................................896
Stan widoku oraz stan kontrolki .........................................................................................................897
Obsugiwanie stanu widoku .........................................................................................................898
Obsuga stanu kontrolki ...............................................................................................................899
Przetwarzanie danych przekazywanych do serwera oraz zdarze .....................................................900
Obsuga przekazywania danych do serwera ................................................................................901
Obsuga zdarze przekazywanych do serwera .............................................................................902
Praca ze zbiorem waciwoci kontrolki ............................................................................................906
Uywanie atrybutu ParseChildren ................................................................................................906
Uywanie metody AddParsedSubObject() ..................................................................................909
Uywanie klasy ControlBuilder ...................................................................................................910

Spis treci

19

Usprawnienie pracy w trybie Design ................................................................................................. 910


Zastosowanie w kontrolce atrybutw na czas projektowania ..................................................... 911
Tworzenie klasy ControlDesigner ............................................................................................... 913
Tworzenie klasy ContainerControlDesigner ............................................................................... 914
Dodawanie elementw Smart Tasks ............................................................................................ 915
Podsumowanie ................................................................................................................................... 917

Rozdzia 32. Integrowanie kodu JavaScript


we wasnych kontrolkach ...................................................919
Uywanie klasy ClientScriptManager ............................................................................................... 920
Okrelanie moliwoci przegldarki internetowej ...................................................................... 921
Tworzenie kontrolek JavaScript ........................................................................................................ 923
Tworzenie kontrolki NewWindowLink ....................................................................................... 923
Tworzenie kontrolki WebWindow .............................................................................................. 925
Tworzenie kontrolki ClientTabs .................................................................................................. 926
Tworzenie kontrolek AJAX ............................................................................................................... 928
Implementowanie technologii AJAX .......................................................................................... 929
Tworzenie kontrolki ServerTimeButton ...................................................................................... 930
Tworzenie kontrolki AJAX ComboBox ...................................................................................... 931
Podsumowanie ................................................................................................................................... 933

Rozdzia 33. Tworzenie kontrolek rde danych,


ktre uywaj szablonw ....................................................935
Tworzenie kontrolek uywajcych szablonw .................................................................................. 935
Implementacja interfejsu ITemplate ............................................................................................ 936
Tworzenie szablonu domylnego ................................................................................................ 938
Obsuga uproszczonego doczania danych ................................................................................ 939
Obsugiwanie dwukierunkowego doczania danych .................................................................. 940
Tworzenie kontrolek rde danych, ktre uywaj szablonw ........................................................ 942
Tworzenie kontrolki DivView ..................................................................................................... 943
Tworzenie kontrolki AjaxDivView ............................................................................................. 944
Tworzenie kontrolki AjaxFormView .......................................................................................... 947
Podsumowanie ................................................................................................................................... 950

Cz X Przykadowa aplikacja ........................................................951


Rozdzia 34. Budowanie aplikacji typu e-commerce ...........................953
Oglny opis aplikacji typu e-commerce ............................................................................................ 953
Uywanie stron wzorcowych, tematw oraz kontrolek uytkownika ............................................... 958
Budowanie biblioteki komponentw ................................................................................................. 960
Tworzenie wasnego dostawcy mapy witryny ................................................................................... 962
Tworzenie koszyka na zakupy ........................................................................................................... 963
Ochrona numerw kart kredytowych ................................................................................................. 964
Obsuga obrazkw ............................................................................................................................. 966
Pobieranie danych za pomoc technologii AJAX ............................................................................. 966
Poprawianie wydajnoci aplikacji za pomoc buforowania .............................................................. 967
Zgodno ze standardami WWW ...................................................................................................... 968
Podsumowanie ................................................................................................................................... 969

Skorowidz ...................................................................................................971

Rozdzia 1. Oglny opis platformy ASP.NET

31

Rozdzia 1.

Oglny opis
platformy ASP.NET
Prac rozpoczniemy od zbudowania prostej strony ASP.NET.
Informacje dotyczce instalowania ASP.NET znajduj si w ostatnim podrozdziale
biecego rozdziau.

Jeeli Czytelnik korzysta z pakietu Visual Web Developer lub Visual Studio .NET, to
w pierwszej kolejnoci musi utworzy now witryn internetow. Uruchamiamy wic
pakiet Visual Web Developer i wybieramy opcj New Web Site z menu File, co spowoduje wywietlenie okna dialogowego New Web Site (zobacz rysunek 1.1). W polu Location wywietlonego okna dialogowego naley poda nazw katalogu, w ktrym ma zosta
utworzona witryna internetowa, a nastpnie klikn przycisk OK.

Rysunek 1.1. Tworzenie nowej witryny internetowej

32

Cz I Tworzenie stron ASP.NET


Po utworzeniu nowej witryny internetowej mona do niej doczy stron ASP.NET.
W tym celu z menu Website wybieramy opcj Add New Item. Ten krok spowoduje wywietlenie kolejnego okna dialogowego, w ktrym zaznaczamy element Web Form oraz
podajemy nazw FirstPage.aspx w polu Name. Naley si upewni, e w wywietlonym oknie dialogowym nie zostao zaznaczone adne z pl wyboru Place code in Separate File oraz Select Master Page. Kliknicie przycisku Add spowoduje utworzenie nowej strony ASP.NET (zobacz rysunek 1.2).

Rysunek 1.2. Dodawanie nowej strony ASP.NET

Kod pierwszej strony ASP.NET zosta zawarty w pliku Rozdzial01\FirstPage.aspx.


Pyta CD doczona do ksiki zawiera rwnie wersje napisane w jzyku C# wszystkich
przykadw przedstawionych na stronach ksiki w jzyku Visual Basic .NET.

Zawarta w pliku Rozdzial01\FirstPage.aspx strona ASP.NET powoduje wywietlenie


krtkiego komunikatu powitalnego oraz aktualnej daty i godziny. Stron t moemy wywietli w przegldarce internetowej po klikniciu strony prawym przyciskiem myszy
i wybraniu opcji View in Browser (zobacz rysunek 1.3).
Strona Rozdzial01\FirstPage.aspx jest wyjtkowo prosta, jednake prezentuje wikszo
wsplnych elementw strony ASP.NET. Omawiana strona zawiera wic dyrektyw, blok
kodu deklaracyjnego oraz blok generowania strony.
Pierwszy wiersz pliku zawiera dyrektyw strony, ktra przedstawia si nastpujco:
<%@ Page Language="VB" %>

Dyrektywa zawsze rozpoczyna si znakami specjalnymi <%@ i koczy znakami %>. Gwnym zastosowaniem dyrektyw jest dostarczenie kompilatorowi informacji wymaganych
do skompilowania strony.

Rozdzia 1. Oglny opis platformy ASP.NET

33

Rysunek 1.3.
Wywietlanie strony
FirstPage.aspx
w przegldarce
internetowej

Przykadowo dyrektywa umieszczona w kodzie z pliku Rozdzial01\FirstPage.aspx wskazuje, e kod zawarty na tej stronie jest kodem w jzyku Visual Basic .NET (VB.NET).
Strona jest wic kompilowana przez kompilator Visual Basic .NET, a nie inny kompilator, na przykad C#.
Nastpna cz strony rozpoczyna si od otwierajcego znacznika <script
runat=server"> i koczy zamykajcym znacznikiem </script>. Wymieniony znacznik
<script> zawiera element, ktry nazywamy blokiem kodu deklaracyjnego.
Blok kodu deklaracyjnego zawiera wszystkie metody, funkcje i procedury wykorzystywane na stronie. Zawarty w pliku Rozdzial01\FirstPage.aspx blok kodu deklaracyjnego
zawiera pojedyncz procedur o nazwie Page_Load(), ktra prezentuje si nastpujco:
Sub Page_Load()
lblServerTime.Text = DateTime.Now.ToString()
End Sub

Powysza procedura powoduje przypisanie wartoci biecej daty i czasu do waciwoci


Text kontrolki Label o nazwie lblServerTime, ktra jest umieszczona w gwnej czci
strony.
Procedura Page_Load() stanowi przykad obsugi zdarze, a ta procedura obsuguje zdarzenie Page_Load(). W trakcie kadego wczytania strony wymieniona procedura bdzie
automatycznie wykonywana i przypisze kontrolce Label biec dat oraz czas.
Ostatnia cz strony nosi nazw bloku generowania strony. Wymieniony blok generowania strony zawiera to wszystko, co zostaje wygenerowane i przekazane przegldarce
internetowej. W pliku Rozdzial01\FirstPage.aspx blok generowania strony zawiera wszystkie elementy umieszczone midzy otwierajcym a zamykajcym znaczkiem <html>.
Wikszo bloku generowania strony skada si z dobrze znanego nam kodu HTML. Przykadowo strona zawiera standardowe znaczniki <head> i <body>. W kodzie zawartym

34

Cz I Tworzenie stron ASP.NET


w pliku Rozdzial01\FirstPage.aspx znajduj si dwa elementy specjalne, ktre zostay
umieszczone w bloku generowania strony.
W pierwszej kolejnoci naley zwrci uwag, e strona posiada znacznik <form> w nastpujcej postaci:
<form id="form1" runat="server">

Powyszy znacznik jest przykadem kontrolki ASP.NET. Poniewa znacznik zawiera


atrybut runat="server", to przedstawia kontrolk ASP.NET, ktra jest wykonywana na
serwerze.
Strony ASP.NET s czsto nazywane stronami formularzy WWW, poniewa prawie
zawsze zawieraj element form wykonywany po stronie serwera.
Blok generowania strony posiada take kontrolk Label. Wymieniona kontrolka Label
zostaa zadeklarowana za pomoc znacznika <asp:Label>. W pliku Rozdzial01\FirstPage. aspx kontrolka Label jest wykorzystywana do wywietlania aktualnej daty i czasu.
Kontrolki stanowi serce platformy ASP.NET. Wikszo atramentu uytego w tej ksice
powicono na opisanie waciwoci i funkcji kontrolek ASP.NET.
Kontrolki zostan wkrtce przeanalizowane znacznie bardziej szczegowo, jednake
w pierwszej kolejnoci Czytelnik powinien zrozumie zasad dziaania platformy .NET.
Domylnie strony ASP.NET s zgodne ze standardem XHTML 1.0 Transitional. Czytelnik
zapewne zwrci uwag, e strona zawarta w pliku Rozdzial01\FirstPage.aspx zawiera
deklaracj DOCTYPE XHTML 1.0 Transitional. Wicej informacji dotyczcych tego,
w jaki sposb platforma ASP.NET jest zgodna zarwno z XHTML-em, jak i standardami
dostpnoci, znajduje si w artykule Building ASP.NET 2.0 Web Sites Using Web
Standards w witrynie Microsoft MSDN.

ASP.NET i platforma .NET


ASP.NET jest czci platformy Microsoft .NET. Do tworzenia stron ASP.NET programista powinien wykorzysta zalety pynce z funkcji platformy .NET. Wspomniana platforma .NET skada si z dwch czci: biblioteki Framework Class Library oraz rodowiska Common Language Runtime.

Zrozumienie biblioteki Framework Class Library


Platforma .NET skada si z tysicy klas, ktre mog zosta wykorzystane przez programist podczas budowania aplikacji. Biblioteka Framework Class Library zostaa zaprojektowana w celu uatwienia wykonywania najczstszych zada programistycznych. Poniej znajduj si przykady klas umieszczonych w platformie:

Rozdzia 1. Oglny opis platformy ASP.NET

Klasa File reprezentuje plik na dysku twardym. Klasa File moe zosta
uyta do sprawdzenia, czy dany plik istnieje, do utworzenia nowego pliku,
do usunicia pliku oraz do wykonania wielu innych zada zwizanych z plikami.

Klasa Graphics umoliwia programicie prac z rnymi rodzajami obrazkw,


na przykad w formacie GIF, PNG, BMP i JPEG. Klasa Graphics moe by
rwnie uyta do rysowania na obrazku prostoktw, ukw, elips oraz innych
elementw.

Klasa Random umoliwia generowanie liczb losowych.

Klasa SmtpClient umoliwia wysyanie wiadomoci e-mail. Programista


moe uy klasy SmptClient do wysyania wiadomoci e-mail, ktre posiadaj
zaczniki oraz zawarto HTML.

35

Powyej zostay przedstawione jedynie cztery klasy z platformy .NET, natomiast platforma
.NET skada si z 13 000 klas, ktre mog zosta wykorzystane do tworzenia aplikacji.
Wszystkie klasy umieszczone w platformie .NET mona przejrze po otworzeniu dokumentacji Microsoft .NET Framework SDK i rozwiniciu wza Class Library (zobacz
rysunek 1.4). Jeeli dokumentacja SDK nie zostaa zainstalowana na komputerze, wwczas
Czytelnik powinien zapozna si z ostatnim podrozdziaem biecego rozdziau.

Rysunek 1.4. Otworzenie dokumentacji Microsoft .NET Framework SDK

36

Cz I Tworzenie stron ASP.NET


Platforma Microsoft .NET 2.0 zawiera 18 619 typw, 12 909 klas, 401 759 metod
typu public, 93 105 waciwoci typu public oraz 30 546 zdarze typu public.

Kada z klas platformy moe zawiera waciwoci, metody i zdarzenia. Waciwoci, metody i zdarzenia udostpniane przez klas s jej elementami. Przykadowo poniej znajduje si czciowa lista elementw klasy SmtpClient:

Waciwoci

Host nazwa lub adres IP serwera wiadomoci e-mail

Port numer portu uywanego w trakcie wysyania wiadomoci e-mail

Metody

Send umoliwia programicie synchroniczne wysyanie wiadomoci e-mail

SendAsync umoliwia programicie asynchroniczne wysyanie wiadomoci e-mail

Zdarzenia

SendCompleted wywoywane, gdy zakoczy si operacja asynchronicznego


wysyania wiadomoci.

Jeeli programista zna element klasy, wwczas wie wszystko, co moe osign za pomoc danej klasy. Przykadowo klasa SmtpClient zawiera dwie waciwoci o nazwie
Host i Port, ktre umoliwiaj podanie serwera wiadomoci e-mail oraz portu uywanego
w trakcie wysyania wiadomoci e-mail.
Klasa SmtpClient posiada rwnie dwie metody, ktre mog by wykorzystane do wysania wiadomoci: Send() oraz SendAsync(). Metoda Send() blokuje dalsze wykonywanie
programu, dopki operacja wysyania nie zostanie zakoczona. Z drugiej strony metoda
SendAsync() asynchronicznie wysya wiadomo e-mail. W przeciwiestwie do metody
Send() metoda SendAsync() nie musi czeka z wykonywaniem dalszej czci kodu do chwili
upewnienia si, e operacja wysyania wiadomoci zakoczya si powodzeniem.
Na koniec klasa SmtpClient zawiera take zdarzenie o nazwie SendCompleted, ktre zostaje
wywoane, gdy zakoczy si operacja asynchronicznego wysyania wiadomoci. Programista moe utworzy obsug zdarze dla zdarzenia SendCompleted, w ktrym bdzie
wywietlany komunikat informujcy o pomylnym wysaniu wiadomoci e-mail.
Strona zawarta w pliku Rozdzial01\SendMail.aspx w celu wysania wiadomoci e-mail
wywouje metod Send() klasy SmtpClient. Pierwszym parametrem jest adres nadawcy,
drugim adres odbiorcy, trzecim temat wiadomoci, a ostatni parametr to cz gwna
wysyanej wiadomoci e-mail.
Strona z pliku Rozdzial01\SendMail.aspx powoduje wysanie wiadomoci e-mail
za pomoc lokalnego serwera SMTP. Jeeli serwer SMTP nie jest wczony, wwczas
uytkownik otrzyma komunikat bdu o braku moliwoci nawizania poczenia
(An existing connection was forcibly closed by the remote host). Wczenie
lokalnego serwera SMTP nastpuje po otworzeniu w Panelu sterowania elementu
Internetowe usugi informacyjne, a nastpnie wybraniu wza Domylny serwer
wirtualny SMTP i wybraniu z menu kontekstowego opcji Uruchom.

Rozdzia 1. Oglny opis platformy ASP.NET

37

Zrozumienie przestrzeni nazw


W platformie .NET jest zawartych okoo 13 000 klas. Jest to oczywicie przytaczajca
liczba. Gdyby firma Microsoft umiecia wszystkie klasy razem, wwczas programista
prawdopodobnie nigdy nie znalazby niczego. Na szczcie Microsoft podzieli klasy
platformy na oddzielne przestrzenie nazw.
Przestrze nazw jest po prostu kategori. Przykadowo wszystkie klasy powizane z operacjami na systemie plikw s umieszczone w przestrzeni nazw System.IO, natomiast
wszystkie klasy powizane z prac obejmujc wykorzystanie serwera Microsoft SQL
Server zostay umieszczone w przestrzeni nazw System.Data.SqlClient.
Zanim klasa bdzie moga zosta uyta na stronie, programista musi wskaza przestrze
nazw przypisan danej klasie. Istnieje kilka sposobw realizacji tego zadania.
Po pierwsze, programista moe poda pen nazw klasy w jej przestrzeni nazw. Przykadowo, poniewa klasa File jest zawarta w przestrzeni nazw System.IO, to w celu sprawdzenia, czy dany plik istnieje, mona uy poniszego polecenia:
System.IO.File.Exists("DowolnyPlik.txt")

Podawanie przestrzeni nazw podczas kadego uycia klasy moe bardzo szybko sta si
uciliwe (wymaga to wikszej iloci kodu do napisania). Inn moliwoci jest wic
opcja zaimportowania przestrzeni nazw.
Po drugie, programista moe doda na stronie dyrektyw <%@ Import %> suc do wspomnianego powyej zaimportowania okrelonej przestrzeni nazw. W pliku Rozdzial01\
SendMail.aspx zostaa zaimportowana przestrze nazw System.Net.Mail, poniewa klasa
SmtpClient jest czci wymienionej przestrzeni nazw. Na samym pocztku strony zawartej w pliku Rozdzial01\SendMail.aspx znajduje si ponisza dyrektywa:
<%@ Import Namespace="System.Net.Mail" %>

Po zaimportowaniu danej przestrzeni nazw programista moe korzysta z wszystkich klas


umieszczonych w tej przestrzeni nazw bez koniecznoci podawania penej nazwy klasy.
Plik konfiguracyjny jest plikiem specjalnego typu, ktry moe zosta dodany do aplikacji
w celu jej skonfigurowania. Naley pamita, e plik konfiguracyjny jest zapisany
w formacie XML i dlatego te, wszystkie znaczniki umieszczone w tym pliki rozrniaj
wielko liter. Doczenie pliku konfiguracyjnego do aplikacji nastpuje po wybraniu opcji
Add New Item z menu Website, a nastpnie zaznaczeniu elementu Web Configuration
File. Szczegowe omwienie plikw konfiguracyjnych znajdzie si w rozdziale 26.

Na koniec, jeeli si okae, e okrelona przestrze nazw jest wykorzystywana na wielu


stronach aplikacji, wwczas mona tak zmodyfikowa konfiguracj, aby wszystkie strony
aplikacji mogy uywa danej przestrzeni nazw.
Jeeli do aplikacji zostanie doczony plik konfiguracyjny przedstawiony na listingu 1.1,
wwczas na stronie nie trzeba bdzie importowa przestrzeni nazw System.Net.Mail w celu
uycia klas z wymienionej przestrzeni nazw. Przykadowo po doczeniu do projektu
poniszego pliku Web.Config mona bdzie usun dyrektyw <%@ Import %> ze strony
zawartej w pliku Rozdzial01\SendMail.aspx.

38

Cz I Tworzenie stron ASP.NET

Listing 1.1. Web.Config


<?xml version="1.0"?>
<configuration>
<system.web>
<pages>
<namespaces>
<add namespace="System.Net.Mail"/>
</namespaces>
</pages>
</system.web>
</configuration>

Programista nie musi importowa kadej przestrzeni nazw. Platforma ASP.NET domylnie udostpnia wikszo najczciej wykorzystywanych przestrzeni nazw, do ktrych
zaliczamy:

System

System.Collections

System.Collections.Specialized

System.Configuration

System.Text

System.Text.RegularExpressions

System.Web

System.Web.Caching

System.Web.SessionState

System.Web.Security

System.Web.Profile

System.Web.UI

System.Web.UI.WebControls

System.Web.UI.WebControls.WebParts

System.Web.UI.HTMLControls

Domylne przestrzenie nazw zostay podane w elemencie pages znajdujcym si w nadrzdnym pliku konfiguracyjnym umieszczonym pod nastpujc ciek dostpu:
\WINDOWS\Microsoft.NET\Framework\[wersja]\CONFIG\Web.Config

Zrozumienie podzespow
Podzesp jest rzeczywistym plikiem .dll znajdujcym si na dysku twardym, w ktrym
jest przechowywana klasa z platformy .NET. Przykadowo klasy zawarte w platformie
.NET s umieszczone w podzespole o nazwie System.Web.dll.

Rozdzia 1. Oglny opis platformy ASP.NET

39

Mwic bardziej precyzyjnie, podzesp jest podstawow jednostk projektowania, bezpieczestwa i kontrolowania wersji w platformie .NET. Poniewa podzesp moe by
rozmieszczony w wielu plikach, to do podzespou czsto odnosimy si jako do logicznej
biblioteki dll.
Platforma .NET w wersji 2.0 posiada 51 podzespow.

Istniej dwa rodzaje podzespow: prywatne i wspdzielone. Podzesp prywatny moe


by uywany jedynie przez pojedyncz aplikacj. Z drugiej strony podzesp wspdzielony moe by uywany przez wszystkie aplikacje umieszczone na tym samym serwerze.
Podzespoy wspdzielone s umieszczone w Global Assembly Cache (GAC). Przykadowo podzesp System.Web.dll oraz wszystkie pozostae podzespoy doczone do platformy .NET s umieszczone w Global Assembly Cache.
Global Assembly Cache jest fizycznie umieszczony w katalogu \WINDOWS\Assembly.
Oddzielna kopia kadego podzespou znajduje si take w katalogu \WINDOWS\
Microsoft.NET\Framework\v2.0.50727. Pierwszy z wymienionych zbiorw podzespow
jest wykorzystywany w trakcie uruchamiania aplikacji, natomiast drugi wymieniony zbir
jest uywany w trakcie jej kompilowania.

Zanim programista bdzie mg w tworzonej aplikacji uy klasy znajdujcej si w podzespole, musi doda odniesienie do danego podzespou. Domylnie aplikacja ASP.NET
posiada odniesienia do wikszoci najczciej uywanych podzespow znajdujcych si
w Global Assembly Cache:

mscorlib.dll

System.dll

System.Configuration.dll

System.Web.dll

System.Data.dll

System.Web.Services.dll

System.Xml.dll

System.Drawing.dll

System.EnterpriseServices.dll

System.Web.Mobile.dll

W celu uycia okrelonej klasy z platformy .NET programista musi wykona dwie operacje. Po pierwsze, tworzona aplikacja musi posiada odniesienie do podzespou, ktry
zawiera dan klas. Po drugie, aplikacja musi importowa przestrze nazw, ktra jest
przypisana do danej klasy.
W wikszoci przypadkw programista nie musi martwi si o tworzenie odniesienia do
niezbdnych podzespow, poniewa odniesienia do najczciej wykorzystywanych podzespow s tworzone automatycznie. Jednake, jeli zachodzi konieczno uycia wyspecjalizowanego podzespou, naley wyranie doda odniesienie do tego podzespou.

40

Cz I Tworzenie stron ASP.NET


Przykadowo, jeeli programista musi pracowa z usug Active Directory1 za pomoc
klas z przestrzeni nazw System.ActiveDirectory, wtedy w tworzonej aplikacji powinien
doda odniesienie do podzespou System.DirectoryServices.dll.
Kady klasa opisana w dokumentacji .NET Framework SDK zawiera nazw podzespou
i przestrzeni nazw przypisanych do danej klasy. Przykadowo po wyszukaniu w dokumentacji klasy MessageQueue Czytelnik odkryje, e ta klasa jest umieszczona w przestrzeni
nazw System.Messaging pooonej w podzespole System.Messaging.dll.
Jeeli programista uywa pakietu Visual Web Developer, wwczas istnieje moliwo
doczenia odniesienia do podzespou poprzez wybranie opcji Add Reference z menu Website, a nastpnie zaznaczeniu nazwy podzespou, do ktrego jest wymagane utworzenie
odniesienia. Przykadowo dodanie odniesienia do podzespou System.Messaging powoduje doczenie do aplikacji pliku konfiguracyjnego przedstawionego na listingu 1.2.

Listing 1.2. Web.Config


<?xml version="1.0"?>
<configuration>
<system.web>
<compilation>
<assemblies>
<add
assembly="System.Messaging, Version=2.0.0.0,
Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
</assemblies>
</compilation>
</system.web>
</configuration>

Programici, ktrzy nie wykorzystuj pakietu Visual Web Developer, mog doda odniesienie do podzespou System.Messaging po prostu po przez rczne utworzenie pliku przedstawionego na listingu 1.2.

Zrozumienie rodowiska Common Language Runtime


Drug czci platformy .NET jest rodowisko Common Language Runtime (CLR). Jest
ono odpowiedzialne za wykonanie kodu tworzonej aplikacji.
W trakcie pisania aplikacji platformy .NET za pomoc jzyka programowania takiego jak
Visual Basic .NET lub C# tworzony kod rdowy nie bdzie nigdy bezporednio skompilowany do postaci kodu maszynowego. Zamiast tego kompilator Visual Basic .NET
lub C# skonwertuje tworzony kod do specjalnego jzyka o nazwie MSIL (Microsoft Intermediate Language).

Active Directory usuga katalogowa dla systemw Windows 2000 oraz Windows Server 2003 zgodna ze
specyfikacj LDAP 3.0 (chocia istnieje kilka odstpstw od tej specyfikacji). Wicej informacji znajduje si
na stronach http://pl.wikipedia.org/wiki/Active_Directory oraz http://www.microsoft.com/windowsserver2003/
technologies/directory/activedirectory/default.mspx (w jzyku angielskim) przyp. tum.

Rozdzia 1. Oglny opis platformy ASP.NET

41

Jzyk MSIL jest bardzo podobny do jzyka asemblerowego zorientowanego obiektowo,


jednake, w przeciwiestwie do typowego jzyka asemblerowego nie zosta utworzony
pod ktem okrelonego procesora. MSIL jest wic niezalenym od platformy sprztowej
jzykiem niskiego poziomu.
Kiedy nastpuje rzeczywiste wykonanie aplikacji, kod MSIL jest w danym momencie
kompilowany przez JITTER (kompilator typu Just-In-Time) do postaci kodu maszynowego. Zazwyczaj caa aplikacja nie jest kompilowana z jzyka MSIL do postaci kodu
maszynowego zamiast tego nastpuje kompilowanie metod, ktre s faktycznie wywoywane w trakcie uruchamiania aplikacji.
W rzeczywistoci platforma .NET rozumie tylko jeden jzyk, MSIL, jednake programista moe tworzy aplikacje, wykorzystujc jzyki takie jak Visual Basic .NET i C#,
poniewa platforma .NET zawiera kompilatory umoliwiajce skompilowanie tworzonego w wymienionych jzykach kodu do postaci MSIL.
Kod dla platformy .NET mona tworzy, uywajc dziesitek rnych jzykw programowania, midzy innymi:

Ada

Apl

Caml

COBOL

Eiffel

Forth

Fortran

JavaScript

Oberon

PERL

Pascal

PHP

Python

RPG

Scheme

Small Talk

Przewaajca wikszo programistw tworzcych aplikacje ASP.NET wykorzystuje


w tym celu albo jzyk Visual Basic .NET albo C#. Wiele innych jzykw wymienionych
na powyszej licie moemy zaliczy do grupy eksperymentw czysto akademickich.

42

Cz I Tworzenie stron ASP.NET


W przeszoci, jeli Czytelnik chcia zosta programist, musia skupi si na biegej znajomoci danego jzyka programowania. Przykadowo mona byo zosta programist C++,
programist COBOL-a lub programist jzyka Visual Basic.
Jednake, kiedy mwimy o platformie .NET, wtedy kwestia znajomoci konkretnego jzyka
programowania nie jest tak szczeglnie istotna. Wybr wykorzystywanego jzyka programowania do tworzenia aplikacji .NET jest w duym stopniu wyborem opierajcym
si na osobistych preferencjach i upodobaniach. Jeeli programista lubi nawiasy klamrowe i polecenia rozrniajce wielko liter, wwczas powinien wybra C#, natomiast,
jeli jest nieco leniwy w kwestii dotyczcej wielkoci liter i nie lubi rednikw, wtedy
powinien pisa kod w jzyku Visual Basic .NET.
Wszystkie rzeczywiste dziaania w platformie .NET zachodz w rodowisku Framework
Class Library. Jeeli Czytelnik chciaby zosta dobrym programist wykorzystujcym technologie firmy Microsoft, wwczas powinien si nauczy, w jaki sposb uywa metod,
waciwoci i zdarze tych 13 000 klas doczonych do platformy .NET. Z punktu widzenia platformy .NET naprawd nie ma znaczenia, czy dane klasy s uywane z poziomu
aplikacji Visual Basic .NET czy aplikacji C#.
Wszystkie przykadowe fragmenty kodw przedstawione w tej ksice zostay napisane
zarwno w jzyku Visual Basic .NET, jak i C#. Przykady w jzyku C# oraz VB .NET
znajduj si na pycie CD doczonej do tej ksiki.

Zrozumienie kontrolek ASP.NET


Kontrolki ASP.NET s sercem platformy ASP.NET. Kontrolka ASP.NET jest klas .NET,
ktra jest wykonywana na serwerze i generuje w przegldarce internetowej okrelon
zawarto.
Przykadowo na pierwszej stronie ASP.NET, utworzonej na pocztku biecego rozdziau, kontrolka Label zostaa uyta do wywietlenia biecej daty i czasu. Platforma
ASP.NET skada si z okoo 70-ciu kontrolek, ktre umoliwiaj programicie realizacj
kadego zadania, poczwszy od wywietlania listy rekordw bazy danych a do wywietlania cyklicznie zmieniajcego si i losowo wybranego banera reklamowego.
W tym podrozdziale przedstawiony zostanie oglny opis kontrolek doczonych do platformy ASP.NET. Czytelnik dowie si rwnie, w jaki sposb obsugiwa zdarzenia wywoywane przez kontrolki i jak wykorzysta zalety stanu widoku.

Oglny opis kontrolek ASP.NET


Platforma ASP.NET w wersji 2.0 zawiera okoo 70 kontrolek. Te kontrolki mog zosta
podzielone na nastpujcych osiem grup:

Kontrolki standardowe kontrolki standardowe umoliwiaj wygenerowanie


standardowych elementw formularza, takich jak przyciski, pola wprowadzania
danych oraz etykiety. Kontrolki te zostan szczegowo omwione w rozdziale 2.

Rozdzia 1. Oglny opis platformy ASP.NET

Kontrolki sprawdzania poprawnoci danych kontrolki sprawdzania


poprawnoci danych umoliwiaj weryfikacj poprawnoci danych formularza
przed wysaniem tych danych do serwera. Przykadowo programista moe
wykorzysta kontrolk RequiredFieldValidator do sprawdzenia, czy uytkownik
poda warto w polu, ktrego wypenienie jest wymagane. Te kontrolki zostan
szczegowo omwione w rozdziale 3.

Kontrolki zaawansowane kontrolki wzbogacone umoliwiaj wygenerowanie


elementw takich jak kalendarze, przyciski przesyania plikw, zmieniajce si
cyklicznie banery reklamowe i kreatory skadajce si z wielu etapw. Te kontrolki
zostan szczegowo omwione w rozdziale 4.

Kontrolki danych kontrolki danych umoliwiaj prac z danymi, takimi jak


dane pochodzce z bazy danych. Przykadowo programista moe uy tych
kontrolek do wysania nowych rekordw do tabeli bazy danych lub do wywietlenia
listy rekordw bazy danych. Kontrolki te zostan szczegowo omwione w trzeciej
czci tej ksiki.

Kontrolki nawigacyjne kontrolki nawigacyjne umoliwiaj wywietlanie


standardowych elementw nawigacyjnych takich jak menu, drzewka widoku
oraz elementy typu jeste tutaj. Te kontrolki zostan szczegowo omwione
w rozdziale 17.

Kontrolki logowania kontrolki logowania umoliwiaj wywietlanie


formularzy logowania, zmiany hasa oraz formularzy rejestracyjnych. Zostan
one szczegowo omwione w rozdziale 20.

Kontrolki Web Part kontrolki Web Part umoliwiaj budowanie


spersonalizowanych aplikacji portali internetowych. Kontrolki te zostan
szczegowo omwione w smej czci ksiki.

Kontrolki HTML kontrolki HTML umoliwiaj konwersj dowolnego


znacznika HTML do postaci kontrolki serwerowej. Ta grupa kontrolek zostanie
szczegowo przeanalizowana w kolejnym podrozdziale biecego rozdziau.

43

Za wyjtkiem kontrolek HTML deklarowanie i uywanie na stronie wszystkich kontrolek


ASP.NET nastpuje w dokadnie ten sam sposb. Przykadowo, jeeli programista chce
wywietli na stronie pole wprowadzania tekstu, wwczas moe w nastpujcy sposb
zadeklarowa kontrolk TextBox:
<asp:TextBox id="TextBox1" runat="Server" />

Powysza deklaracja kontrolki wyglda podobnie do deklaracji znacznika HTML, jednake naley pamita, e w przeciwiestwie do kontrolki HTML to powysza kontrolka
jest klas .NET, ktra zostanie wykonana na serwerze, a nie w przegldarce internetowej.
Kiedy kontrolka TextBox jest generowana do przegldarki internetowej, przyjmuje nastpujc posta:
<input name="TextBox1" type="text" id="TextBox1" />

Pierwsza cz deklaracji kontrolki, prefiks asp:, wskazuje przestrze nazw dla danej
kontrolki. Wszystkie kontrolki standardowe ASP.NET s zawarte w przestrzeni nazw
System.Web.UI.WebControls. Wymieniony prefiks asp: reprezentuje t przestrze nazw.

44

Cz I Tworzenie stron ASP.NET


Nastpnie deklaracja zawiera nazw deklarowanej kontrolki. W omawianym przypadku
zostaje zadeklarowana kontrolka TextBox.
Deklaracja zawiera rwnie atrybut ID, ktry jest uywany w celu odniesienia si do
danej kontrolki z poziomu kodu. Kada kontrolka musi posiada unikalny atrybut ID.
Naley zawsze przypisywa atrybut ID do kadej kontrolki, nawet jeli nie bdzie
koniecznoci uzyskania programowego dostpu do tej kontrolki. Jeli programista
nie dostarczy atrybutu ID, wtedy okrelone funkcje platformy ASP.NET (takie jak
dwukierunkowe wizanie danych) nie bd funkcjonoway.

Powysza deklaracja kontrolki zawiera take atrybut runat="Server". Wymieniony atrybut


wskazuje, e znacznik przedstawia kontrolk serwerow. Jeli ten atrybut zostanie pominity, wwczas kontrolka TextBox bdzie przekazana bez wykonania do przegldarki internetowej, ktra po prostu zignoruje ten znacznik.
Na kocu warto zwrci uwag, e kontrolka koczy si ukonikiem. Wspomniany ukonik jest skrconym zapisem znacznika zamykajcego </asp:TextBox>. Programista moe
oczywicie zadeklarowa kontrolk TextBox w sposb nastpujcy:
<asp:TextBox id="TextBox1" runat="Server"></asp:TextBox>

W takim przypadku znacznik otwierajcy nie posiada ukonika, a na kocu jest umieszczony znacznik zamykajcy.

Zrozumienie kontrolek HTML


Kontrolki HTML s deklarowane w inny sposb ni standardowe kontrolki ASP.NET.
Platforma ASP.NET umoliwia pobranie dowolnego znacznika HTML (rzeczywistego lub
wyimaginowanego) i doczenie do tego znacznika atrybutu runat="Server". Wymieniony
atrybut runat="Server" konwertuje znacznik HTML do postaci serwerowej kontrolki
ASP.NET.
Znacznik <span> znajdujcy si na stronie zawartej w pliku Rozdzial01\HtmlControls.aspx
wyglda podobnie jak zwyka kontrolka HTML <span>, za wyjtkiem dodatkowego atrybutu runat="Server".
Poniewa znacznik <span> ze strony zawartej w pliku Rozdzial01\HtmlControls.aspx jest
kontrolk serwerow HTML, to istnieje moliwo jej programowania. W pliku Rozdzial01\
HtmlControls.aspx bieca data i czas s przypisane znacznikowi <span> w metodzie Page_Load().
Kontrolki HTML zostay doczone do platformy ASP.NET, aby uatwi konwersj istniejcych stron HTML do uycia platformy ASP.NET. W tej ksice rzadko bdziemy
uywa kontrolek HTML, poniewa kontrolki standardowe ASP.NET w zasadzie zapewniaj wszystkie te same funkcje, a nawet dostarczaj jeszcze wicej moliwoci.

Rozdzia 1. Oglny opis platformy ASP.NET

45

Zrozumienie i obsuga zdarze kontrolek


Wikszo kontrolek ASP.NET obsuguje jedno lub wiksz ilo zdarze. Przykadowo
kontrolka ASP.NET Button obsuguje zdarzenie Click. Wspomniane zdarzenie Click
jest wywoywane na serwerze po klikniciu przez uytkownika przycisku, ktry zosta
wygenerowany w przegldarce internetowej przez kontrolk Button.
Strona zawarta w pliku Rozdzial01\ShowButtonClick.aspx demonstruje, w jaki sposb
mona napisa kod, ktry bdzie wykonywany po klikniciu przez uytkownika przycisku wygenerowanego przez kontrolk Button. Innymi sowy, przykad pokazuje, jak
programista moe utworzy obsug zdarze Click.
Warto zauway, e kontrolka Button zawarta na stronie z pliku Rozdzial01\ShowButtonClick.aspx zawiera atrybut OnClick. Wymieniony atrybut wskazuje na procedur o nazwie
btnSubmit_Click(). Procedura btnSubmit_Click() jest obsug dla zdarzenia Click kontrolki Button. Procedura ta zostanie wykonana, gdy uytkownik kliknie przycisk (zobacz
rysunek 1.5).
Rysunek 1.5.
Wywoywanie
zdarzenia Click

W takcie korzystania z pakietu Visual Web Developer programista moe automatycznie


doda do kontrolki obsug zdarze na wiele rnych sposobw. W trybie Source view
naley zaznaczy dan kontrolk z lewej grnej rozwijanej listy, a nastpnie wybra
odpowiednie zdarzenie z prawej grnej listy rozwijanej. Kod obsugi zdarze zostanie
automatycznie doczony do strony (zobacz rysunek 1.6).
Z kolei w trybie Design view, aby doda do kontrolki domyln obsug zdarze, programista moe dwukrotnie klikn kontrolk. Dwukrotne kliknicie kontrolki spowoduje
przejcie do trybu Source view i doczenie obsugi zdarze.

46

Cz I Tworzenie stron ASP.NET

Rysunek 1.6. Dodawanie obsugi zdarze w trybie Source view

Na koniec w trybie Design view po zaznaczeniu kontrolki w oknie roboczym istnieje moliwo dodania obsugi zdarze z okna Properties poprzez kliknicie przycisku Events
(symbol byskawicy), a nastpnie dwukrotne kliknicie obok wybranego zdarzenia (zobacz
rysunek 1.7).
Jest bardzo wane, aby zrozumie, e wszystkie zdarzenia kontrolek ASP.NET zachodz
po stronie serwera. Przykadowo zdarzenie Click nie jest faktycznie wykonywane po klikniciu przycisku przez uytkownika. Zdarzenie Click nie bdzie wywoane do chwili, dopki
strona zawierajca kontrolk Button nie zostanie przekazana z powrotem do serwera.
Platforma ASP.NET jest platform aplikacji sieciowych po stronie serwera. Kod napisany
przez programist jest wykonywany przez platform .NET na serwerze, a nie w przegldarce internetowej. Z punktu widzenia ASP.NET, dopki strona nie zostanie przekazana z powrotem do serwera, na ktrym platforma .NET bdzie moga wykona swoje
zadania, to nic si nie zdarzyo.
Warto zwrci uwag na dwa parametry przekazywane metodzie btnSubmit_Click() w kodzie z pliku Rozdzial01\ShowButtonClick.aspx. Wszystkie obsugi zdarze kontrolek
ASP.NET posiadaj t sam ogln sygnatur.
Pierwszy parametr, obiekt o nazwie sender, reprezentuje kontrolk, ktra wywoaa zdarzenie. Innymi sowy, w omawianym przypadku bdzie to kontrolka Button kliknita przez
uytkownika.

Rozdzia 1. Oglny opis platformy ASP.NET

47

Rysunek 1.7. Dodawanie obsugi zdarze za pomoc okna Properties

Programista moe poczy wiele kontrolek na stronie z jedn procedur obsugi zdarze,
a nastpnie uywa pierwszego parametru w celu okrelenia kontrolki, ktra wywoaa
zdarzenie. Przykadowo strona zawarta w pliku Rozdzial01\ButtonCounters.aspx zawiera
dwie kontrolki Button. Kiedy uytkownik kliknie dowoln kontrolk Button, wwczas
tekst wywietlany przez kontrolk Button zostanie uaktualniony (zobacz rysunek 1.8).
Drugim parametrem przekazywanym do obsugi zdarze Click jest parametr EventArgs
o nazwie e reprezentujcy wszystkie dodatkowe informacje o zdarzeniu, ktre s z tym
zdarzeniem zwizane. W chwili kliknicia przycisku nie zostaj przypisane do zdarzenia
adne dodatkowe informacje, tak wic ani w pliku Rozdzial01\ShowButtonClick.aspx, ani
w pliku Rozdzial01\ButtonCounters.aspx drugi parametr nie zawiera adnych uytecznych informacji.
Z drugiej strony, gdy uytkownik kliknie kontrolk ImageButton zamiast Button, wwczas
do obsugi zdarze zostan przekazane dodatkowe informacje o zdarzeniu. Kiedy uytkownik kliknie kontrolk ImageButton, to do obsugi zdarze zostan przekazane wsprzdne X i Y miejsca, w ktrym nastpio kliknicie.

48

Cz I Tworzenie stron ASP.NET

Rysunek 1.8. Obsugiwanie dwch kontrolek Button za pomoc jednej procedury obsugi zdarze

Strona zawarta w pliku Rozdzial01\ShowEventArgs.aspx zawiera kontrolk ImageButton


wywietlajc obrazek. Kiedy uytkownik kliknie ten obrazek, wtedy w kontrolce Label
zostan wywietlone wsprzdne X i Y miejsca, w ktrym nastpio kliknicie (zobacz
rysunek 1.9).

Rysunek 1.9. Klikanie kontrolki ImageButton

Rozdzia 1. Oglny opis platformy ASP.NET

49

Warto zauway, e drugi parametr przekazywany do metody btnElephant_Click() jest


parametrem typu ImageClickEventArgs. Kiedykolwiek drugi parametr nie jest domylnym parametrem EventArgs, wtedy Czytelnik powinien wiedzie, e do obsugi zdarze s
przekazywane dodatkowe informacje dotyczce tego zdarzenia.

Zrozumienie stanu widoku


Protok HTTP, ktry stanowi fundamentalny protok dla sieci WWW, jest protokoem bezstanowym. Za kadym razem, gdy nastpuje danie wywietlenia strony internetowej z witryny, to z punktu widzenia witryny internetowej uytkownik jest zupenie
inn osob.
Jednake platforma ASP.NET wykracza poza to ograniczenie protokou HTTP. Przykadowo jeli programista przypisze warto waciwoci Text kontrolki Label, to kontrolka
Label zachowa t warto w trakcie wielu da wywietlenia strony.
Zastanwmy si nad przykadem strony zawartej w pliku Rozdzial01\ShowViewState.aspx.
Ta strona zawiera kontrolki Button i Label. Za kadym razem, gdy zostanie kliknita
kontrolka Button, warto wywietlana przez kontrolk Label bdzie zwikszona o jednostk (zobacz rysunek 1.10). W jaki sposb kontrolka Label zachowuje swoj warto
w trakcie wielokrotnego przekazywania strony do serwera?
Rysunek 1.10.
Utrzymywanie stanu
kontrolki w trakcie
wielokrotnego
przekazywania strony
do serwera

Platforma ASP.NET wykorzystuje sztuczk o nazwie stan widoku (View State). Jeeli
uytkownik otworzy w przegldarce internetowej stron zawart w pliku Rozdzial01\
ShowViewState.aspx i wybierze opcj Poka rdo z menu Widok, wwczas zauway, e
wygenerowana strona zawiera ukryte pole formularza sieciowego o nazwie _VIEWSTATE.
Wspomniane pole przedstawia si nastpujco:
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"
value="/wEPDwUKLTc2ODE1OTYxNw9kFgICBA9kFgIC Aw8PFgIeBFRleHQFATFkZGT3tMnThg9KZpGak
55p367vfInj1w==" />

50

Cz I Tworzenie stron ASP.NET


Powysze ukryte pole formularza zawiera warto waciwoci Text kontrolki Label (oraz
wartoci wszystkich pozostaych waciwoci kontrolki, ktre s przechowywane w stanie
widoku). Kiedy strona zostanie przekazana z powrotem do serwera, platforma ASP.NET
pobiera te cigi tekstowe, a nastpnie ponownie utworzy wartoci dla wszystkich waciwoci przechowywanych w stanie widoku. W ten sposb platforma ASP.NET zachowuje stan waciwoci kontrolek podczas przekazywania strony do serwera.
Domylnie stan widoku jest dostpny dla kadej kontrolki z platformy ASP.NET. Jeli
programista zmieni kolor ta w kontrolce Calendar, nowy kolor zostanie zapamitany
i zachowany podczas przekazywania strony do serwera. Po zmianie zaznaczonego elementu na licie kontrolki DropDownList zaznaczony element zostanie zapamitany i zachowany podczas przekazywania strony do serwera. Wartoci tych waciwoci s automatycznie przechowywane w stanie widoku.
Stan widoku jest dobrym mechanizmem, ale zdarzaj si sytuacje, w ktrych dobrych
mechanizmw jest zbyt wiele. Ukryte pole _VIEWSTATE formularza WWW moe osign
olbrzymie rozmiary. Umieszczenie zbyt wielu danych w stanie widoku moe prowadzi
do spowolnienia procesu generowania strony, poniewa zawarto ukrytego pola formularza musi by przekazana pomidzy serwerem a przegldark internetow.
Dziki wczeniu mechanizmu ledzenia strony programista moe okreli, jak cz
stanu widoku zuywa kada kontrolka umieszczona na stronie (zobacz rysunek 1.11).
Strona zawarta w pliku Rozdzial01\ShowTrace.aspx zawiera w dyrektywie <%@ Page %>
atrybut Trace="true", ktry wcza ledzenie strony.

Rysunek 1.11. Wywietlanie wielkoci stanu widoku dla kadej kontrolki

Rozdzia 1. Oglny opis platformy ASP.NET

51

Kiedy uytkownik otworzy w przegldarce internetowej stron zawart w pliku Rozdzial01\


ShowTrace.aspx, wwczas w dolnej czci strony zostan doczone informacje dodatkowe odnonie teje strony. Kontrolka Tree wywietla wielko stanu widoku zajmowan przez kad kontrolk ASP.NET umieszczon na danej stronie.
Kada kontrolka ASP.NET posiada waciwo o nazwie EnableViewState. Jeli wymienionej waciwoci zostanie przypisana warto false, wtedy stan widoku bdzie dla tej
kontrolki wyczony. W takim przypadku, wartoci waciwoci tej kontrolki nie bd
zapamitane w trakcie przekazywania strony do serwera.
Przykadowo strona zawarta w pliku Rozdzial01\DisableViewState.aspx zawiera dwie
kontrolki Label oraz kontrolk Button. Stan widoku dla pierwszej kontrolki zosta wyczony, natomiast druga kontrolka posiada wczony stan widoku. Kiedy uytkownik kliknie przycisk, to tylko warto drugiej kontrolki Label zostanie zwikszona o jednostk.
Czasami programista chciaby wyczy stan widoku, nawet jeli nie obawia si wielkoci ukrytego pola _VIEWSTATE formularza sieciowego. Przykadowo jeli kontrolka Label
jest uywana w celu wywietlania komunikatu bdu dotyczcego sprawdzania poprawnoci danych, to w trakcie kadego wysyania strony chcemy, aby kontrolka rozpoczynaa
dziaanie w swoim pierwotnym stanie. W takim przypadku wystarczy po prostu wyczy stan widoku dla wskazanej kontrolki Label.
Platforma ASP.NET w wersji 2.0 zawiera now funkcj o nazwie stan kontrolki (Control
State). Wspomniany stan kontrolki jest bardzo podobny do stanu widoku, za wyjtkiem
faktu, e jest uywany jedynie do zachowania istotnych informacji odnonie stanu.
Przykadowo kontrolka GridView uywa stanu kontrolki do przechowywania zaznaczonego
rekordu. Nawet jeli stan widoku zostanie wyczony, to kontrolka GridView i tak bdzie
pamitaa, ktry rekord zosta zaznaczony.

Zrozumienie stron ASP.NET


W niniejszym podrozdziale zostan w bardziej szczegowy sposb przedstawione strony
ASP.NET. Czytelnik dowie si o kompilacji dynamicznej oraz plikach ukrytego kodu.
Dokonamy rwnie analizy zdarze obsugiwanych przez klas Page.

Zrozumienie zagadnie kompilacji dynamicznej


To dziwne, ale kiedy programista tworzy stron ASP.NET, wtedy faktycznie tworzy kod
rdowy dla klasy .NET. Nastpuje utworzenie nowego egzemplarza klasy System.Web.UI.
Caa zawarto strony ASP.NET, wczajc w to wszystkie skrypty oraz kod HTML,
zostaje skompilowana do postaci klasy .NET.
W trakcie dania wywietlenia strony ASP.NET platforma ASP.NET poszukuje klasy
.NET odpowiadajcej danej stronie. Jeli odpowiadajca stronie klasa nie istnieje, wwczas platforma automatycznie kompiluje stron do postaci nowej klasy. Skompilowana
klasa (podzesp) jest przechowywana w katalogu Temporary ASP.NET Files dostpnym
pod nastpujc ciek dostpu:
\WINDOWS\Microsoft.NET\Framework\[version]\Temporary ASP.NET Files

52

Cz I Tworzenie stron ASP.NET


Podczas kolejnego dania wywietlenia tej samej strony ta strona nie bdzie ponownie
kompilowana. Zamiast tego nastpi wykonanie poprzednio skompilowanej klasy, a wyniki
zostan zwrcone do przegldarki internetowej.
Nawet po fizycznym wyczeniu serwera sieciowego i przeniesieniu si na trzy lata na
wysp Borneo po ponownym wczeniu serwera sieciowego, jeli ktokolwiek zgosi danie wywietlenia tej strony, nie bdzie ona ponownie kompilowana. Skompilowana
klasa jest a do chwili zmodyfikowania kodu rdowego aplikacji przechowywana
w katalogu Temporary ASP.NET Files.
Kiedy klasa zostaje dodana do katalogu Temporary ASP.NET Files, nastpuje utworzenie
zalenoci plikowej midzy klas a oryginaln stron ASP.NET. Jeeli strona ASP.NET
zostanie zmodyfikowana w jakikolwiek sposb, wwczas odpowiadajca jej klasa .NET
bdzie usunita. Podczas kolejnego dania wywietlenia strony, platforma automatycznie
skompiluje zmodyfikowany kod rdowy strony do postaci nowej klasy .NET.
Omwiony powyej proces nosi nazw kompilacji dynamicznej. Wspomniana kompilacja dynamiczna umoliwia aplikacji ASP.NET jednoczesn obsug tysicy uytkownikw.
W przeciwiestwie do na przykad klasycznej strony ASP, strona ASP.NET nie musi by
analizowana i kompilowana w trakcie kadego dania jej wywietlenia. Strona ASP.NET
jest kompilowana jedynie wwczas, gdy nastpi zmodyfikowanie aplikacji.
Za pomoc narzdzia wiersza polece o nazwie aspnet_compiler.exe programista moe
prekompilowa ca aplikacj ASP.NET. Jeli aplikacja zostanie prekompilowana, wtedy
uytkownicy nie bd naraeni na opnienie w trakcie pierwszego dania wywietlenia
strony, ktre jest zwizane z kompilacj teje strony.
Dziki atrybutowi CompilationMode kompilacja dynamiczna moe zosta wyczona dla
pojedynczej strony, dla stron w podanym katalogu lub dla caej aplikacji. Kiedy atrybut
CompilationMode jest uywany z dyrektyw <%@ Page %>, umoliwia wyczenie kompilacji
dynamicznej dla pojedynczej strony. Z kolei uycie atrybutu CompilationMode w elemencie
pages umieszczonym w pliku konfiguracyjnym aplikacji umoliwia wyczenie kompilacji
dynamicznej dla caego katalogu lub aplikacji.
Wyczenie kompilacji jest uyteczne wtedy, gdy w witrynie internetowej posiadamy
tysice stron i nie chcemy, aby dla kadej strony podzesp by wczytywany do pamici.
Po ustawieniu wartoci Never atrybutowi CompilationMode strona nie bdzie nigdy
kompilowana, a wic dla tej strony nie zostanie wygenerowany podzesp. Interpretacja
strony nastpi w trakcie uruchomienia aplikacji.
Nie istnieje moliwo wyczenia kompilacji dla stron zawierajcych kod wykonywany
po stronie serwera. W szczeglnoci strona, ktra nie jest kompilowana, nie moe
zawiera bloku <script>...</script> wykonywanego po stronie serwera. Z drugiej jednak
strony nieskompilowana strona moe posiada kontrolki ASP.NET oraz wyraenia
wizania danych.

Dla zainteresowanych Czytelnikw w pliku Rozdzial01\FirstPage.aspx.vb zosta przedstawiony kod rdowy klasy, ktra odpowiada przedstawionej wczeniej stronie Rozdzial01\FirstPage.aspx (kod zosta odrobin oczyszczony w celu zmniejszenia jego objtoci). Przedstawiony kod zosta skopiowany z pliku umieszczonego w katalogu Temporary
ASP.NET Files po wczeniejszym wczeniu debugowania aplikacji.

Rozdzia 1. Oglny opis platformy ASP.NET

53

Klasa zawarta w pliku Rozdzial01\FirstPage.aspx.vb dziedziczy po klasie System.Web.UI.


Page. Metoda ProcessRequest() jest wywoywana przez platform ASP.NET w trakcie wywietlania strony. Wymieniona metoda jest odpowiedzialna za zbudowanie drzewa kontrolek strony, ktre jest tematem kolejnego punktu.

Zrozumienie drzewa kontrolek


W poprzednim punkcie dowiedzielimy si, e strona ASP.NET w rzeczywistoci jest
kodem rdowym klasy .NET. Ewentualnie Czytelnik moe wyobrazi sobie stron
ASP.NET jako zbir kontrolek. Jest to dokadniejsze okrelenie, poniewa niektre
kontrolki mog zawiera kontrolki potomne. Stron ASP.NET moemy wic okreli mianem drzewka kontrolek.
Przykadowo strona zawarta w pliku Rozdzial01\ShowControlTree.aspx zawiera kontrolki DropDownList oraz Button. Co wicej, poniewa dyrektywa <%@ Page %> posiada
atrybut Trace="true", to dla tej strony zostao wczone ledzenie.
Kiedy uytkownik otworzy w przegldarce internetowej stron zawart w pliku Rozdzial01\
ShowControlTree.aspx, wwczas zobaczy drzewko kontrolek strony, ktre zostao doczone w dolnej czci strony. Wspomniane drzewko jest zaprezentowane poniej:
__Page ASP.showcontroltree_aspx
ctl02 System.Web.UI.LiteralControl
ctl00 System.Web.UI.HtmlControls.HtmlHead
ctl01 System.Web.UI.HtmlControls.HtmlTitle
ctl03 System.Web.UI.LiteralControl
form1 System.Web.UI.HtmlControls.HtmlForm
ctl04 System.Web.UI.LiteralControl
DropDownList1 System.Web.UI.WebControls.DropDownList
ctl05 System.Web.UI.LiteralControl
Button1 System.Web.UI.WebControls.Button
ctl06 System.Web.UI.LiteralControl
ctl07

Wze nadrzdny w drzewku kontrolek jest stron waciw. Strona posiada atrybut
ID o wartoci __Page. Klasa strony zawiera wszystkie pozostae kontrolki w jej zbiorach
kontrolek potomnych.
Drzewko kontrolek posiada rwnie egzemplarz klasy HtmlForm o nazwie form1. Ta kontrolka jest serwerowym znacznikiem form umieszczonym na stronie. Wymieniony znacznik
zawiera wszystkie pozostae kontrolki formularza DropDownList oraz Button jako
kontrolki podrzdne.
Naley rwnie zwrci uwag na kilka kontrolek LiteralControl, ktre funkcjonuj
w charakterze porednika midzy innymi kontrolkami w drzewku kontrolek. Czym s
wspomniane kontrolki?
Trzeba pamita, e wszystko na stronie ASP.NET zostaje skonwertowane do postaci klasy
.NET, wczajc w to kod HTML oraz dowoln zawarto tekstow strony. Klasa LiteralControl przedstawia zawarto HTML na stronie (cznie z obecnymi na stronie midzy
znacznikami znakami nowego wiersza).

54

Cz I Tworzenie stron ASP.NET


Zazwyczaj programista odnosi si do kontrolki umieszczonej na stronie za pomoc
jej atrybutu ID, jednake istniej sytuacje, w ktrych nie jest to moliwe. W takich
przypadkach mona wykorzysta metod FindControl() klasy Control w celu pobrania
kontrolki o okrelonym identyfikatorze ID. Metoda FindControl() jest podobna do
metody JavaScript getElementById().

Uywanie stron ukrytego kodu


Platforma ASP.NET (oraz pakiet Visual Web Developer) umoliwia utworzenie dwch
odmiennych rodzajw stron ASP.NET. Istnieje wic moliwo utworzenia stron ASP.NET
skadajcych si z pojedynczego pliku lub z dwch plikw.
Wszystkie przykadowe fragmenty kodu przedstawione w tej ksice zostay napisane
z wykorzystaniem stron ASP.NET skadajcych si z pojedynczego pliku. W stronie
ASP.NET pojedynczego pliku kod strony oraz kontrolki strony znajduj si w jednym
pliku. Kod strony jest umieszczony wewntrz znacznika <script runat="server">.
Alternatyw dla stron ASP.NET skadajcych si z pojedynczego pliku s strony ASP.NET
posiadajce dwa pliki. Skadajca si z dwch plikw strona ASP.NET nosi nazw strony
ukrytego kodu. Na stronie ukrytego kodu kod strony jest umieszczony w oddzielnym
pliku.
Strony ukrytego kodu dziaaj zupenie w inny sposb w platformie ASP.NET 2.0, ni
miao to miejsce w przypadku platformy ASP.NET 1.x. W platformie ASP.NET 1.x dwie
powki strony ukrytego kodu byy ze sob powizane za pomoc dziedziczenia, natomiast
w platformie ASP.NET 2.0 dwie powki strony ukrytego kodu s ze sob powizane
za pomoc poczenia klas czciowych oraz dziedziczenia.

Przykadowo pliki Rozdzial01\FirstPageCodeBehind.aspx oraz Rozdzial01\FirstPageCode


Behind.aspx.vb zawieraj dwie powki strony ukrytego kodu.
Uwaga dla uytkownikw pakietu Visual Web Developer
W przypadku korzystania z pakietu Visual Web Developer stron ukrytego kodu mona utworzy
po wybraniu opcji Add New Item z menu Website, a nastpnie zaznaczeniu elementu Web Form
oraz pola wyboru Place Code in Separate File przed dodaniem strony do aplikacji.

Strona zawarta w pliku Rozdzial01\FirstPageCodeBehind.aspx nosi nazw strony prezentacyjnej i zawiera kontrolki Button oraz Label. Jednake strona ta nie posiada jakiegokolwiek kodu. Cay kod j obsugujcy zosta umieszczony w pliku ukrytego kodu.
Uwaga dla uytkownikw pakietu Visual Web Developer
Przejcie do pliku ukrytego kodu strony nastpuje po klikniciu danej strony prawym przyciskiem
myszy i wybraniu opcji View Code.

Plik ukrytego kodu Rozdzial01\FirstPageCodeBehind.aspx.vb zawiera obsug zdarze


Page_Load() i Button1_Click(). Plik ten nie zawiera jednak adnych kontrolek.

Rozdzia 1. Oglny opis platformy ASP.NET

55

Warto zwrci uwag, e strona z pliku Rozdzial01\FirstPageCodeBehind.aspx zawiera


atrybuty CodeFile oraz Inherits w dyrektywie <%@ Page %>. Wymienione atrybuty powoduj poczenie strony z jej plikiem ukrytego kodu.

W jaki sposb dziaa ukryty kod?


W poprzedniej wersji platformy ASP.NET (ASP.NET 1.x) przez stron ukrytego kodu
byy generowane dwie klasy. Pierwsza odpowiadaa stronie prezentacyjnej, natomiast druga
plikowi ukrytego kodu. Te dwie klasy byy ze sob powizane za pomoc mechanizmu
dziedziczenia. Klasa strony prezentacyjnej dziedziczya po klasie pliku ukrytego kodu.
Problem zwizany z tak metod przypisania stron prezentacyjnych do ich plikw ukrytego
kodu by bardzo bezwzgldny dziedziczenie jest zwizkiem jednokierunkowym. Wszystko to, co jest prawd w przypadku matki, jest rwnie prawd w przypadku crki, ale
nie na odwrt. Kada kontrolka zadeklarowana na stronie prezentacyjnej musiaa zosta
take zadeklarowana w pliku ukrytego kodu. Co wicej, kontrolka powinna zosta zadeklarowana z dokadnie tym samym identyfikatorem ID. W przeciwnym przypadku zaleno dziedziczenia nie zostanie dotrzymana i zdarzenia wywoywane przez kontrolk nie
bd mogy by obsuone w pliku ukrytego kodu.
W wersji beta ASP.NET 2.0 zastosowano zupenie inn metod przypisywania stron prezentacyjnych do ich plikw ukrytego kodu. Ta nowa metoda jest znacznie mniej bezwzgldna. Dwie poowy strony ukrytego kodu nie s duej powizane za pomoc dziedziczenia, ale przy uyciu nowej technologii o nazwie klasy czciowe, ktra jest obsugiwana przez platform .NET 2.0.
Szczegowa analiza klas czciowych zostanie przedstawiona w rozdziale 14.

Klasy czciowe umoliwiaj zadeklarowanie klasy nie tylko w jednym fizycznym pliku.
W trakcie kompilowania klasy jest ona generowana ze wszystkich klas czciowych.
Wszystkie elementy jednej klasy czciowej wczajc w to wszystkie prywatne pola,
metody i waciwoci s dostpne w innej klasie czciowej tej samej klasy. Jest to
cakiem logiczne rozwizanie, poniewa klasy czciowe s ostatecznie czone w celu
utworzenia klasy kocowej.
Zalet uywania klas czciowych jest to, e programista nie musi deklarowa kontrolki
zarwno na stronie prezentacyjnej, jak i w pliku ukrytego kodu. Wszystkie elementy,
ktre zostan zadeklarowane na stronie prezentacyjnej, staj si automatycznie dostpne
w pliku ukrytego kodu, natomiast wszystko, co zostao zadeklarowane w pliku ukrytego
kodu, jest automatycznie dostpne na stronie prezentacyjnej.
Wersja beta platformy ASP.NET 2.0 uywaa klas czciowych w celu poczenia strony
prezentacyjnej z jej plikiem ukrytego kodu, jednake pewne zaawansowane funkcje platformy ASP.NET 1.x nie zachoway zgodnoci podczas wykorzystywania klas czciowych. Aby obsuy te zaawansowane funkcje, w kocowej wersji platformy ASP.NET
zostay zastosowane bardziej zoone metody powizania stron prezentacyjnych z ich plikami ukrytego kodu.

56

Cz I Tworzenie stron ASP.NET


Platforma ASP.NET 1.x umoliwia programicie utworzenie klasy podstawowej Page
oraz dziedziczenie kadej strony ASP.NET w danej aplikacji po tej wasnej klasie Page.
Powizanie stron oraz plikw ukrytego kodu z klasami czciowymi spowodowao
powstanie konfliktw dotyczcych dziedziczenia po wasnej klasie bazowej Page.
W ostatecznej wersji platformy ASP.NET 2.0 programista moe ponownie utworzy
wasn klas podstawow Page. Przykad utworzenia wasnej klasy podstawowej Page
zostanie przedstawiony w ostatnim podrozdziale rozdziau 5.

W celu powizania stron prezentacyjnych z plikami ukrytego kodu ostateczna wersja platformy ASP.NET 2.0 uywa poczenia dziedziczenia oraz klas czciowych. Gdy programista tworzy plik ukrytego kodu, wtedy platforma ASP.NET 2.0 generuje trzy klasy.
Pierwsze dwie klasy odpowiadaj stronie prezentacyjnej. Przykadowo po utworzeniu strony
FirstPageCodeBehind.aspx w katalogu Temporary ASP.NET Files zostan automatycznie
wygenerowane nastpujce klasy:
Partial Public Class FirstPageCodeBehind
Protected WithEvents Button1 As Global.System.Web.UI.WebControls.Button
Protected WithEvents Label1 As Global.System.Web.UI.WebControls.Label
... miejsce na dodatkowy kod klasy ...
End Class
Public Class firstpagecodebehind_aspx
Inherits FirstPageCodeBehind
... miejsce na dodatkowy kod klasy ...
End Class

Trzecia wygenerowana klasa odpowiada plikowi ukrytego kodu. Dla pliku FirstPageCodeBehind.vb zostanie wic wygenerowana nastpujca klasa:
Partial Class FirstPageCodeBehind
Inherits System.Web.UI.Page
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Handles Button1.Click
Label1.Text = "Dzikuj!"
End Sub
End Class

Klasa firstpagecodebehind_aspx jest wykonywana, gdy w przegldarce internetowej pojawi si danie wywietlenia strony FirstPageCodeBehind.aspx. Wymieniona klasa
dziedziczy po klasie FirstPageCodeBehind, ktra jest klas czciow. Klasa zostaje
wygenerowana dwukrotnie: raz przez stron prezentacyjn oraz ponownie przez plik
ukrytego kodu.
W celu powizania stron prezentacyjnych oraz plikw ukrytego kodu kocowe wydanie
platformy ASP.NET 2.0 uywa poczenia klas czciowych oraz dziedziczenia. Poniewa strona oraz klasy ukrytego kodu s klasami czciowymi, to w przeciwiestwie do
poprzedniej wersji ASP.NET programista nie musi duej dwukrotnie deklarowa kontrolek zarwno na stronie prezentacyjnej, jak i w pliku ukrytego kodu. Kada kontrolka

Rozdzia 1. Oglny opis platformy ASP.NET

57

zadeklarowana na stronie prezentacyjnej jest automatycznie dostpna w pliku ukrytego


kodu. Poniewa klasa strony dziedziczy po klasie ukrytego kodu, to platforma ASP.NET
2.0 nadal obsuguje zaawansowane funkcje platformy ASP.NET, takie jak wasne klasy
bazowe Page.

Decyzja pomidzy stronami skadajcymi si z pojedynczego pliku,


a stronami ukrytego kodu
Tak wic powstaje pytanie, kiedy programista powinien korzysta ze stron ASP.NET
skadajcych si z pojedynczego pliku, a kiedy powinien wykorzystywa strony ukrytego
kodu? Taka decyzja jest pochodn upodoba i osobistych preferencji programisty. W wielu
blogach dostpnych w internecie znajduj si mocne argumenty przemawiajce zarwno
za jednym, jak i za drugim rozwizaniem.
Pojawiaj si take gosy, e strony ukrytego kodu s waniejsze od stron skadajcych
si z pojedynczego pliku, poniewa strony ukrytego kodu umoliwiaj lepsze oddzielenie
interfejsu uytkownika od warstwy logicznej aplikacji. Problem dotyczcy tego argumentu jest taki, e zwykle usprawiedliwieniem oddzielenia interfejsu uytkownika od
logiki aplikacji jest ponowne uycie kodu. Tworzenie stron ukrytego kodu w rzeczywistoci nie zachca do ponownego uywania koda. Lepszym sposobem ponownego uywania logiki aplikacji na wielu stronach jest zbudowanie oddzielnych komponentw bibliotek
(ten temat zostanie przedstawiony w czci czwartej ksiki).
Wyborem autora teje ksiki jest budowanie aplikacji za pomoc stron ASP.NET skadajcych si z pojedynczego pliku, poniewa takie podejcie wymaga zarzdzania znacznie
mniejsz liczb plikw, jednake autor tworzy rwnie wiele aplikacji, uywajc modelu
stron ukrytego kodu (na przykad niektre ASP.NET Starter Kits) bez adnych strasznych
konsekwencji.
Poprzednia wersja Visual Studio .NET nie obsugiwaa tworzenia stron ASP.NET
skadajcych si z pojedynczego pliku. Jeeli Czytelnik chce tworzy strony ASP.NET
w postaci pojedynczego pliku za pomoc poprzedniej wersji ASP.NET, to musi wykorzysta
alternatywne rodowiska programistyczne, takie jak Web Matrix lub na przykad aplikacj
Notatnik systemu Windows.

Obsuga zdarze strony


Podczas kadego dania wywietlenia strony ASP.NET zostaje wykonany okrelony
zbir zdarze w ustalonej kolejnoci. Wspomniana kolejno zdarze nosi nazw cyklu
ycia strony.
Przykadowo w poprzednich przykadach przedstawionych w biecym rozdziale zostao
wykorzystane zdarzenie Load. Wymienione zdarzenie Load jest zwykle uywane w celu
inicjalizacji waciwoci kontrolek, ktre s umieszczone na stronie, jednake zdarzenie
Load jest tylko jednym ze zdarze obsugiwanych przez klas Page.

58

Cz I Tworzenie stron ASP.NET


Poniej zostaa przedstawiona kolejno zdarze, ktre s wywoywane w trakcie dania wywietlenia strony:
1. PreInit
2. Init
3. InitComplete
4. PreLoad
5. Load
6. LoadComplete
7. PreRender
8. PreRenderComplete
9. SaveStateComplete
10. Unload

Dlaczego na powyszej licie znajduje si tak wiele zdarze? Na kolejnych etapach cyklu
ycia strony zachodz rne zdarzenia oraz s udostpniane rozmaite informacje.
Przykadowo stan widoku nie zostanie w peni wczytany przed wywoaniem zdarzenia
InitComplete. Dane przekazywane z kontrolki, na przykad TextBox, do serwera rwnie
nie bd dostpne przed wywoaniem wymienionego zdarzenia.
W dziewidziesiciu dziewiciu procentach sytuacji programista nie bdzie obsugiwa
wymienionych na powyszej licie zdarze za wyjtkiem zdarze Load i PreRender. Rnica
midzy wskazanymi zdarzeniami polega na tym, e zdarzenie Load wystpuje przed jakimikolwiek zdarzeniami kontrolki, a zdarzenie PreRender wystpuje po wywoaniu wszystkich zdarze kontrolek.
Strona zawarta w pliku Rozdzial01\ShowPageEvents.aspx prezentuje rnic midzy zdarzeniami Load i PreRender. Strona zawiera wic trzy procedury obsugi zdarze: jedn
dla zdarzenia Load, drug dla zdarzenia Button Click oraz trzeci dla zdarzenia PreRender.
Kada obsuga zdarze dodaje do kontrolki Label wasny komunikat (zobacz rysunek 1.12).
Kiedy uytkownik kliknie kontrolk Button, zdarzenie Click zostanie wywoane na serwerze po zdarzeniu Load, ale jeszcze przed wystpieniem zdarzenia PreRender.
Inn kwesti odnonie pliku Rozdzial01\ShowPageEvents.aspx, na ktr warto zwrci
uwag, jest sposb poczenia procedur obsugi zdarze ze zdarzeniami klasy Page.
ASP.NET obsuguje wczon domylnie funkcj o nazwie AutoEventWireUp. Jeeli procedura bdzie miaa nazw Page_Load(), wwczas procedura automatycznie obsuy zdarzenie Load klasy Page, natomiast nazwa procedury w postaci Page_PreRender() spowoduje automatyczn obsug zdarzenia PreRender klasy Page.
Funkcja AutoEventWireUp nie dziaa w przypadku kadego zdarzenia strony. Przykadowo
funkcja nie dziaa dla zdarzenia Page_InitComplete().

Rozdzia 1. Oglny opis platformy ASP.NET

59

Rysunek 1.12.
Wywietlanie kolejnoci
wystpowania zdarze
strony

Uywanie waciwoci Page.IsPostBack


Klasa Page posiada waciwo o nazwie IsPostBack, ktra moe zosta uyta w celu
okrelenia, czy strona zostaa ju przekazana z powrotem do serwera.
Z powodu istnienia stanu widoku, gdy programista inicjalizuje waciwo kontrolki,
nie chce inicjalizowa tej waciwoci podczas kadego wczytywania strony. Skoro stan
widoku zapisuje midzy wieloma odwieeniami strony stan waciwoci kontrolki, wic
programista zwykle jednokrotnie inicjalizuje waciwo kontrolki podczas pierwszego
wczytania strony.
W rzeczywistoci wiele kontrolek nie dziaa prawidowo, jeeli ich waciwoci s ponownie inicjalizowane w czasie kadego wczytywania strony. W takich przypadkach
programista musi uywa waciwoci IsPostBack, aby okreli, czy strona zostaa czy
nie zostaa odwieona.
Strona zawarta w pliku Rozdzial01\ShowIsPostback.aspx prezentuje technik uywania
waciwoci Page.IsPostBack podczas dodawania elementw do kontrolki DropDownList.
W pliku Rozdzial01\ShowPageEvents.aspx kod zawarty w obsudze zdarzenia Page_Load()
jest wykonywany tylko jednokrotnie, podczas pierwszego wczytywania strony. Kiedy strona bdzie odwieona, wwczas waciwo IsPostBack zwrci warto true, co spowoduje pominicie wykonywania kodu umieszczonego w zdarzeniu Page_Load().
Jeeli programista usunie z metody Page_Load() wiersz zawierajcy sprawdzenie wartoci
waciwoci IsPostBack, wwczas moe otrzyma bardzo dziwne wyniki. Kontrolka
DropDownList zawsze wywietli pierwszy element jako zaznaczony. Doczenie listy

60

Cz I Tworzenie stron ASP.NET


elementw do kontrolki DropDownList spowoduje ponown inicjalizacj kontrolki DropDownList dlatego te chcemy, aby kontrolka DropDownList zostaa doczona tylko raz,
podczas pierwszego wczytywania strony.

Debugowanie i ledzenie stron ASP.NET


Smutny fakt dotyczcy ycia jest taki, e wikszo czasu spdzona w trakcie budowy
aplikacji WWW jest wykorzystywana na debugowanie tej aplikacji.
W niniejszym punkcie dowiemy si, w jaki sposb uzyska szczegowy komunikat bdu
podczas programowania stron ASP.NET. Nauczymy si wywietla wasne komunikaty
ledzenia strony, ktrych moemy uy w trakcie debugowania strony.

Debugowanie stron ASP.NET


Jeeli w trakcie wykonywania strony programista musi wywietli szczegowe komunikaty bdw, to w takim przypadku powinno zosta wczone debugowanie dla strony
lub dla caej aplikacji. Wczenie debugowania dla podanej strony odbywa si za pomoc
atrybutu Debug="true" umieszczonego w dyrektywie <%@ Page %>. Przykadowo strona
zawarta w pliku Rozdzial01\ShowError.aspx ma wczone debugowanie.
Kiedy strona z pliku Rozdzial01\ShowError.aspx zostanie otwarta w przegldarce internetowej, wwczas pojawi si szczegowy komunikat bdu (zobacz rysunek 1.13).

Rysunek 1.13. Wywietlanie szczegowego komunikatu bdu

Rozdzia 1. Oglny opis platformy ASP.NET

61

Przed umieszczeniem aplikacji w produkcji naley si upewni o wyczeniu


debugowania. Gdy aplikacja znajduje si w trybie debugowania, kompilator nie moe
wykona okrelonych zada optymalizacyjnych.

Zamiast wcza debugowanie dla pojedynczej strony, programista moe wczy debugowanie dla caej aplikacji poprzez dodanie do aplikacji przedstawionego na listingu 1.3
pliku konfiguracyjnego.
Listing 1.3. Web.Config
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" />
</system.web>
</configuration>

Podczas debugowania aplikacji ASP.NET umieszczonej na zdalnym serwerze sieciowym


naley zablokowa wywietlanie wasnych bdw. Domylnie, z powodw bezpieczestwa, platforma ASP.NET nie wywietla komunikatw bdw, gdy danie wywietlenia
strony pochodzi ze zdalnego komputera. Kiedy wywietlanie komunikatw o wasnych
bdach zostanie wczone, wtedy nie bd wywietlane komunikaty bdw powstaych
na zdalnym komputerze. Zmodyfikowana wersja pliku konfiguracyjnego aplikacji sieciowej, ktra wycza wywietlanie komunikatw wasnych bdw, zostaa przedstawiona na listingu 1.4.
Listing 1.4. Web.Config
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" />
<customErrors mode="Off" />
</system.web>
</configuration>

Debugowanie stron za pomoc pakietu Visual Web Developer


Jeeli programista uywa pakietu Visual Web Developer, wwczas moe wywietli komunikaty bdw kompilacji poprzez zbudowanie strony lub caej aplikacji. W tym celu naley wybra opcj Build Page lub Build Web Site z menu Build. Lista komunikatw bdw
kompilacji oraz ostrzee zostanie wywietlona w oknie Error List (zobacz rysunek 1.14).
Po dwukrotnym klikniciu dowolnego z przedstawionych bdw nastpi bezporednie
przejcie do fragmentu kodu, ktry spowodowa wystpienie kliknitego bdu.
Kiedy zachodzi konieczno przeprowadzenia bardziej zaawansowanego debugowania,
wtedy mona skorzysta z debugera pakietu Visual Web Developer. Wspomniany debuger
umoliwia ustawienie punktw kontrolnych i przechodzenie przez kod wiersz po wierszu.

62

Cz I Tworzenie stron ASP.NET

Rysunek 1.14. Proces budowania strony w pakiecie Visual Web Developer

Ustawienie punktu kontrolnego nastpuje po klikniciu w trybie Source view skrajnej


lewej kolumny. Po dodaniu punktu kontrolnego na ekranie pojawi si czerwone kko
(zobacz rysunek 1.15).
Po ustawieniu punktu kontrolnego uruchomienie aplikacji nastpuje po wybraniu opcji
Start Debugging z menu Debug. Wykonywanie aplikacji zostanie wstrzymane po osigniciu ustawionego punktu kontrolnego. W tym miejscu programista moe umieci
wskanik myszy nad dowoln zmienn lub waciwoci kontrolki i pozna biec
warto zmiennej lub waciwoci kontrolki.
Istnieje moliwo wyznaczenia jednej ze stron aplikacji jako strony pocztkowej. W ten
sposb w trakcie kadego uruchomienia aplikacji zostanie wykonana wskazana strona,
niezalenie od tego, ktra strona bya wczeniej otwarta. Ustawienie strony jako strony
pocztkowej nastpuje po jej klikniciu w oknie Solution Explorer i wybraniu z menu
kontekstowego opcji Set As Start Page.

Po osigniciu punktu kontrolnego programista moe kontynuowa wykonywanie aplikacji za pomoc polece Step Into, Step Over i Step Out dostpnych w menu Debug lub
na pasku narzdziowym. Poniej znajduje si objanienie kadej z wymienionych wczeniej opcji:

Step Into powoduje wykonanie kolejnego wiersza kodu.

Step Over powoduje wykonanie kolejnego wiersza kodu bez opuszczanie


biecej metody.

Step Out powoduje wykonanie kolejnego wiersza kodu oraz powrt do metody,
ktra wywoaa biec metod.

Rozdzia 1. Oglny opis platformy ASP.NET

63

Rysunek 1.15.
Ustawienie punktu
kontrolnego

Kiedy debugowanie strony zostanie zakoczone, wwczas mona kontynuowa, zatrzyma lub uruchomi ponownie dziaanie aplikacji poprzez wybr odpowiedniej opcji z menu
Debug lub paska narzdziowego.

ledzenie wykonywania strony


Jeeli programista chce ledzi komunikaty danych wyjciowych podczas wykonywania
strony, moe wczy ledzenie danej strony lub caej aplikacji. Platforma ASP.NET obsuguje zarwno ledzenie na poziomie strony, jak i ledzenie na poziomie caej aplikacji.
Strona zawarta w pliku Rozdzial01\PageTrace.aspx prezentuje, w jaki sposb moemy
wykorzysta zalety pynce z procesu ledzenia na poziomie strony.
Warto zwrci uwag, e dyrektywa <%@ Page %> zawarta w pliku Rozdzial01\PageTrace.aspx zawiera atrybut trace="true". Atrybut ten powoduje wczenie ledzenia
oraz dodanie w dolnej czci strony sekcji Trace Information (zobacz rysunek 1.16).
Co wicej, warto zauway, e obsuga zdarze Page_Load() uywa metody Trace.Warn()
do zapisania komunikatu w sekcji Trace Information. Do sekcji Trace Information moe
zosta przekazany dowolny cig tekstowy. Kod zawarty w pliku Rozdzial01\PageTrace.aspx
powoduje wywietlenie w sekcji Trace Information biecej wartoci zmiennej o nazwie
counter.

64

Cz I Tworzenie stron ASP.NET

Rysunek 1.16. Wywietlanie informacji pochodzcych ze ledzenia strony

Programista powinien wykorzysta zalety pynce ze ledzenia strony, gdy musi dokadnie
wiedzie, jakie zachodz zdarzenia w trakcie uruchomienia strony. Metod Trace.Warn()
mona wywoa w dowolnym miejscu kodu. Poniewa sekcja Trace Information pojawia
si w miejscu wystpienia bdu, to ledzenie strony bdzie przydatn technik diagnozowania powodu powstawiania bdw na stronie.
Jedyn wad ledzenia strony jest fakt, e kada osoba na wiecie moe zobaczy informacje pochodzce ze ledzenia strony. Ominiciem tego problemu moe by wykorzystanie zalet ledzenia na poziomie aplikacji. Kiedy zostanie wczone ledzenie na poziomie aplikacji, wwczas informacje pochodzce ze ledzenia zostan wywietlone
jedynie po wystpieniu dania wywietlenia strony o nazwie Trace.axd.
W celu wczenia ledzenia na poziomie aplikacji do aplikacji naley doda plik konfiguracyjny, ktry jest przedstawiony na listingu 1.5.
Listing 1.5 Web.Config
<?xml version="1.0"?>
<configuration>
<system.web>
<trace enabled="true" />
</system.web>
</configuration>

Rozdzia 1. Oglny opis platformy ASP.NET

65

Po dodaniu do aplikacji pliku konfiguracyjnego przedstawionego na listingu 1.5 programista moe zgosi danie wywietlenia strony Trace.axd w przegldarce internetowej. Na podanej stronie zostanie wywietlonych ostatnich 10 da strony po wczeniu
ledzenia na poziomie aplikacji (zobacz rysunek 1.17).

Rysunek 1.17. Wywietlanie informacji pochodzcych ze ledzenia aplikacji


Domylnie strona Trace.axd nie moe by wywoana ze zdalnego komputera. Jeeli
zachodzi potrzeba zdalnego uzyskania dostpu do strony Trace.axd, wwczas
do elementu trace w pliku konfiguracyjnym naley doda atrybut localOnly="false".

Jeli uytkownik kliknie cze View Details znajdujce si obok kadego dania wywietlenia strony, wwczas bdzie mg pozna wszystkie komunikaty pochodzce ze ledzenia wygenerowane przez dan stron. Komunikaty zapisywane za pomoc metody
Trace.Warn() zostan wywietlone przez stron Trace.axd nawet wtedy, gdy ledzenie
na poziomie strony zostao wyczone.
Istnieje moliwo wykorzystania nowego atrybutu writeToDiagnosticsTrace elementu
trace w celu zapisania w oknie Output pakietu Visual Web Developer wszystkich
komunikatw pochodzcych ze ledzenia aplikacji po jej uruchomieniu. Atrybut
mostRecent powoduje wywietlenie ostatnich dziesiciu da strony zamiast dziesiciu
da strony po wczeniu ledzenia.

66

Cz I Tworzenie stron ASP.NET

Instalowanie platformy ASP.NET


Najatwiejszym sposobem zainstalowania platformy ASP.NET jest instalacja pakietu Visual
Web Developer Express. Pakiet Visual Web Developer Express zosta umieszczony na
pycie CD doczonej do ksiki (najnowsz wersj pakietu mona rwnie pobra z witryny http://www.asp.net/ bdcej oficjaln witryn Microsoft ASP.NET).
Instalowanie pakietu Visual Web Developer Express powoduje rwnie zainstalowanie
nastpujcych komponentw:

Microsoft .NET Framework w wersji 2.0

SQL Server Express

Pakiet Visual Web Developer Express jest zgodny z nastpujcymi systemami operacyjnymi:

Windows 2000 Service Pack 4

Windows XP Service Pack 2

Windows Server 2003 Service Pack 1

Windows x64

Windows Vista

Zaleca si take pobranie pakietu .NET Framework SDK (Software Development Kit).
Pakiet SDK zawiera dodatkow dokumentacj, przykadowe fragmenty kodu oraz narzdzia do budowania aplikacji ASP.NET. Wspomniany pakiet SDK jest dostpny do
pobrania na witrynie internetowej Microsoft MSDN znajdujcej si pod adresem http://
msdn.microsoft.com/.
Instalacja pakietu Visual Web Developer Express moe zosta przeprowadzona na komputerze z zainstalowanym pakietem Visual Studio .NET 2003. Obydwa rodowiska programistyczne mog ze sob koegzystowa bez problemw.
Co wicej, ten sam serwer sieciowy moe obsuy strony utworzone zarwno w technologii ASP.NET 1.1, jak i ASP.NET 2.0. Kada wersja platformy .NET jest zainstalowana
w nastpujcym katalogu:
C:\WINDOWS\Microsoft.NET\Framework

Przykadowo na komputerze autora znajduj si trzy zainstalowane wersje platformy .NET


(wersja 1.0, wersja 1.1 oraz wersja 2.0):
C:\WINDOWS\Microsoft.NET\Framework\v1.0.3705
C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727

Kady z wymienionych katalogw zawiera narzdzie wiersza polecenia o nazwie aspnet_


regiis.exe. Jest ono uywane do przypisania okrelonego katalogu wirtualnego na komputerze lokalnym do danej platformy .NET.

Rozdzia 1. Oglny opis platformy ASP.NET

67

Przykadowo uruchomienie z wiersza polecenia poniszego polecenia spowoduje wczenie okrelonej wersji ASP.NET dla katalogu wirtualnego o nazwie MojaAplikacja:
aspnet_regiis -s W3SVC/1/ROOT/MojaAplikacja

Uruchomienie narzdzia aspnet_regiis.exe umieszczonego w rnych katalogach wersji


.NET Framework umoliwia programicie mapowanie okrelonego katalogu wirtualnego
do dowolnej wersji platformy ASP.NET.

Podsumowanie
W rozdziale znalaz si wstp do platformy ASP.NET 2.0. W pierwszej kolejnoci zbudowalimy prost stron ASP.NET. Poznalimy trzy gwne elementy strony ASP.NET:
dyrektywy, bloki deklarowania kodu oraz bloki generowania strony.
Nastpnie dokonalimy analizy platformy .NET. Dowiedzielimy si przy okazji o istnieniu okoo 13 000 klas zawartych w bibliotece Framework Class Library oraz o funkcjach
rodowiska Common Language Runtime.
Rozdzia ten zaprezentowa rwnie oglny opis kontrolek ASP.NET. Dowiedzielimy si
o rnych grupach kontrolek, ktre zostay umieszczone w platformie .NET. Nauczylimy
si take sposb obsugiwa zdarzenia kontrolek i wykorzystywa zalety stanu widoku.
Przeanalizowalimy rwnie strony ASP.NET i dowiedzielimy si, w jaki sposb strony
ASP.NET s dynamicznie kompilowane w trakcie pierwszego dania ich wywietlenia.
Poznalimy techniki podziau strony ASP.NET skadajcej si z pojedynczego pliku na
stron ukrytego kodu, a ponadto, nauczylimy si metod debugowania i ledzenia wykonywania strony ASP.NET.
Na kocu zostay przedstawione kwestie zwizane z uruchomieniem platformy ASP.NET.
Dowiedzielimy si, w jaki sposb mapowa rne katalogi wirtualne do rnych wersji
platformy ASP.NET.

You might also like