You are on page 1of 55

ASP.NET 3.

5
z wykorzystaniem C# i VB.
Zaawansowane programowanie
Autor: Bill Evjen, Scott Hanselman, Devin Rader
Tumaczenie: Pawe Dyl, Marek Paczyski
ISBN: 978-83-246-1852-1
Tytu oryginau: Professional ASP.NET 3.5: in C# and VB
Format: 172x245 , stron: 1792
Oprawa: twarda
Kompletne rdo informacji na temat ASP.NET!
Jak rozpocz prac z ASP.NET?
Jakie kontrolki dostarcza ASP.NET?
Jak wykorzysta technologi AJAX?
ASP.NET powsta jako odpowied firmy Microsoft na rosnc popularno aplikacji internetowych.
Jest on czci technologii .NET oraz bezporednim nastpc rozwizania ASP, dostpnym na
rynku od stycznia 2002 roku. Od tego czasu ASP.NET zdobywa sobie coraz wiksz popularno.
Teraz dziki wykorzystaniu technologii .NET moesz projektowa dynamiczne strony, korzystajc
z dowolnego jzyka obsugujcego to rozwizanie.
Dziki tej ksice dowiesz si, jak to robi przy uyciu jzykw C# i Visual Basic. Jednak zanim
napiszesz pierwsz lini kodu, warto pozna nowe rodowisko pracy,tak aby tworzenie stron
przebiegao szybko, wygodnie i bezproblemowo. W kolejnych rozdziaach zdobdziesz wiedz
na temat dostpnych kontrolek, metod pracy ze stronami wzorcowymi oraz sposobw
stosowania kompozycji i skrek. Ponadto nauczysz si wykorzystywa rda danych
oraz zarzdza informacjami przy uyciu ADO.NET. Ksika ta sprawdzi si znakomicie zarwno
w rkach pocztkujcego, jak i zaawansowanego programisty.
rodowisko pracy
Dyrektywy strony ASP.NET 3.5
Obsuga zdarze
Wykorzystanie kontrolek serwerowych
Wykonywanie skryptw po stronie klienta
Walidacja danych
Zastosowanie kompozycji i skrek
rda danych
Zarzdzanie danymi przy uyciu ADO.NET
Tworzenie zapyta z wykorzystaniem LINQ
Konfiguracja i uruchomienie usugi IIS7
Model dostawcw
Platformy portalowe
Wsparcie dla HTML i CSS
Wykorzystanie technologii AJAX
Bezpieczestwo aplikacji internetowych w ASP.NET
Obsuga sytuacji wyjtkowych
Debugowanie kodu
Wykorzystanie plikw i strumieni
Obsuga da HTTP
Moliwoci Silverlight
Twrz dynamiczne rozwizania, korzystajc z nowoczesnych technologii!

Spis treci
Wstp ....................................................................................................................................................... 25
Rozdzia 1. rodowiska do tworzenia aplikacji i stron ......................................................................... 49
Opcje lokalizacji aplikacji .............................................................................................. 49
Wbudowany serwer WWW ........................................................................................ 50
IIS ......................................................................................................................... 51
FTP ........................................................................................................................ 52
Strony internetowe wymagajce FrontPage Extensions ............................................... 53
Opcje struktury strony ASP.NET ..................................................................................... 54
Model inline ........................................................................................................... 56
Model code-behind .................................................................................................. 58
Dyrektywy strony ASP.NET 3.5 ....................................................................................... 61
@Page ................................................................................................................... 62
@Master ................................................................................................................ 64
@Control ................................................................................................................ 66
@Import ................................................................................................................. 67
@Implements ......................................................................................................... 69
@Register .............................................................................................................. 69
@Assembly ............................................................................................................. 70
@PreviousPageType ................................................................................................ 70
@MasterType .......................................................................................................... 70
@OutputCache ........................................................................................................ 71
@Reference ............................................................................................................ 71
Zdarzenia strony ASP.NET ............................................................................................. 72
Praca z mechanizmem postback .................................................................................... 74
Mechanizm cross-page posting ...................................................................................... 74
Katalogi aplikacji ASP.NET ............................................................................................ 81
Katalog \AppCode .................................................................................................. 81
Katalog \App_Data ................................................................................................. 86
Katalog \App_Themes ............................................................................................. 86
Katalog \App_GlobalResources ................................................................................ 87
\App_LocalResources ............................................................................................. 87
\App_WebReferences ............................................................................................. 87
\App_Browsers ....................................................................................................... 87

ASP.NET 3.5 z wykorzystaniem C# i VB. Zaawansowane programowanie


Kompilacja .................................................................................................................. 88
Build Providers ............................................................................................................. 92
Korzystanie z wbudowanych klas BuildProvider .......................................................... 93
Korzystanie z wasnych klas BuildProvider ................................................................. 94
Global.asax ................................................................................................................. 99
Praca z klasami w VS 2008 ........................................................................................ 103
Podsumowanie .......................................................................................................... 108

Rozdzia 2. Kontrolki serwerowe ASP.NET i skrypty po stronie klienta .............................................109


Kontrolki serwerowe ASP.NET ...................................................................................... 109
Typy kontrolek serwerowych ................................................................................... 110
Tworzenie aplikacji z wykorzystaniem kontrolek serwerowych .................................... 112
Praca ze zdarzeniami kontrolek serwerowych ........................................................... 114
Dodawanie stylu do kontrolek serwerowych .................................................................. 117
Przegld wsplnych waciwoci kontrolek .............................................................. 117
Zmiana stylu za pomoc kaskadowych arkuszy stylw .............................................. 118
Kontrolki serwerowe HTML .......................................................................................... 122
Omwienie klasy bazowej HtmlControl .................................................................... 125
Omwienie klasy HtmlContainerControl ................................................................... 126
Omwienie wszystkich klas HTML ........................................................................... 127
Praca z klas HtmlGenericControl ........................................................................... 128
Zarzdzanie stronami i kontrolkami serwerowymi za pomoc JavaScript ......................... 129
Korzystanie z Page.ClientScript.RegisterClientScriptBlock ......................................... 131
Korzystanie z Page.ClientScript.RegisterStartupScript .............................................. 133
Korzystanie z Page.ClientScript.RegisterClientScriptInclude ...................................... 135
Funkcja zwrotna po stronie klienta ............................................................................... 135
Porwnanie postback z funkcj zwrotn .................................................................. 135
Korzystanie z moliwoci funkcji zwrotnej proste podejcie ................................... 138
Korzystanie z funkcji zwrotnych z jednym parametrem .............................................. 142
Uycie mechanizmu funkcji zwrotnej przykad bardziej zaawansowany .................... 145
Podsumowanie .......................................................................................................... 150

Rozdzia 3. Kontrolki serwerowe Web ASP.NET ....................................................................................151


Wprowadzenie do kontrolek serwerowych Web .............................................................. 151
Kontrolka serwerowa Label ......................................................................................... 153
Kontrolka serwerowa Literal ........................................................................................ 155
Kontrolka serwerowa TextBox ...................................................................................... 155
Uycie metody Focus() ........................................................................................... 157
Uycie AutoPostBack ............................................................................................. 157
Uycie AutoCompleteType ...................................................................................... 159
Kontrolka serwerowa Button ....................................................................................... 160
Waciwo CausesValidation ................................................................................ 160
Waciwo CommandName .................................................................................. 160
Przyciski, ktre wsppracuj z JavaScript po stronie klienta ..................................... 162
Kontrolka serwerowa LinkButton .................................................................................. 164
Kontrolka serwerowa ImageButton ............................................................................... 164
Kontrolka serwerowa HyperLink ................................................................................... 166
Kontrolka serwerowa DropDownList ............................................................................. 166
Wizualne usuwanie elementw z kolekcji ...................................................................... 169

Spis treci

Kontrolka serwerowa ListBox ...................................................................................... 171


Umoliwienie wyboru kilku pozycji ........................................................................... 171
Przykad uycia kontrolki ListBox ............................................................................ 171
Dodawanie elementw do kolekcji .......................................................................... 174
Kontrolka serwerowa CheckBox ................................................................................... 174
W jaki sposb sprawdzi, czy pole wyboru jest zaznaczone ....................................... 175
Przypisanie wartoci do pola wyboru ....................................................................... 176
Wyrwnywanie tekstu kontrolki CheckBox ................................................................ 176
Kontrolka serwerowa CheckBoxList .............................................................................. 177
Kontrolka serwerowa RadioButton ............................................................................... 180
Kontrolka serwerowa RadioButtonList .......................................................................... 182
Kontrolka serwerowa Image ........................................................................................ 183
Kontrolka serwerowa Table ......................................................................................... 184
Kontrolka serwerowa Calendar .................................................................................... 187
Wybieranie daty za pomoc kontrolki Calendar ........................................................ 187
Wybieranie formatu daty pobieranej z kalendarza ..................................................... 189
Wybr dni, tygodni lub miesicy .............................................................................. 189
Praca z zakresami dat ........................................................................................... 190
Zmiana stylu i zachowania kalendarza .................................................................... 192
Kontrolka serwerowa AdRotator ................................................................................... 196
Kontrolka serwerowa Xml ............................................................................................ 198
Kontrolka serwerowa Panel ......................................................................................... 199
Kontrolka serwerowa PlaceHolder ................................................................................ 201
Kontrolka serwerowa BulletedList ................................................................................ 202
Kontrolka serwerowa HiddenField ................................................................................ 207
Kontrolka serwerowa FileUpload .................................................................................. 209
Pobieranie plikw za pomoc kontrolki FileUpload ................................................... 209
Nadawanie ASP.NET waciwych praw do pobierania plikw ...................................... 212
Zrozumienie limitw rozmiaru plikw ....................................................................... 214
Wczytywanie wielu plikw na tej samej stronie ......................................................... 215
Przekazywanie pobranego pliku do obiektu Stream .................................................. 218
Przenoszenie zawartoci pliku z obiektu Stream do tablicy bajtw ............................. 219
Kontrolki serwerowe MultiView oraz View ..................................................................... 220
Kontrolka serwerowa Wizard ....................................................................................... 224
Dostosowanie nawigacji po stronach ...................................................................... 226
Uycie atrybutu AllowReturn ................................................................................... 226
Praca z atrybutem StepType ................................................................................... 227
Wstawianie nagwka w kontrolce Wizard ................................................................ 228
Praca z systemem nawigacji kontrolki Wizard .......................................................... 228
Obsuga zdarze kontrolki Wizard ........................................................................... 229
Uycie kontrolki Wizard do pokazania elementw formularza ..................................... 231
Kontrolka serwerowa ImageMap .................................................................................. 236
Podsumowanie .......................................................................................................... 238

Rozdzia 4. Walidacyjne kontrolki serwerowe ...................................................................................239


Zrozumienie procesu walidacji ..................................................................................... 239
Walidacja po stronie klienta a walidacja po stronie serwera ........................................... 240
Kontrolki walidacyjne ASP.NET .................................................................................... 242
Przyczyny walidacji ................................................................................................ 243
Kontrolka serwerowa RequiredFieldValidator ........................................................... 244
Kontrolka serwerowa CompareValidator .................................................................. 249

ASP.NET 3.5 z wykorzystaniem C# i VB. Zaawansowane programowanie


Kontrolka serwerowa RangeValidator ...................................................................... 252
Kontrolka serwerowa RegularExpressionValidator .................................................... 257
Kontrolka serwerowa CustomValidator .................................................................... 258
Kontrolka serwerowa ValidationSummary ................................................................ 263
Wyczanie walidacji po stronie klienta ......................................................................... 266
Korzystanie z obrazkw i d wikw w powiadomieniach o bdach .................................. 268
Praca z grupami walidacyjnymi ..................................................................................... 269
Podsumowanie .......................................................................................................... 273

Rozdzia 5. Praca ze stronami wzorcowymi .......................................................................................275


Do czego s nam potrzebne strony wzorcowe? ............................................................. 275
Podstawy stron wzorcowych ........................................................................................ 278
Pisanie kodu stron wzorcowych ................................................................................... 279
Pisanie kodu strony z zawartoci ............................................................................... 282

czenie rnych typw stron i jzykw ................................................................... 286


Okrelanie, ktrej strony wzorcowej uy ................................................................. 288
Praca z tytuem strony ........................................................................................... 289
Praca z kontrolkami i waciwociami strony wzorcowej ............................................ 290
Okrelanie domylnej zawartoci na stronie wzorcowej .................................................. 297
Programowe przypisywanie strony wzorcowej ................................................................ 299
Osadzanie stron wzorcowych ....................................................................................... 300
Strony wzorcowe dostosowane do przegldarek ............................................................ 304
Porzdek wywoywania zdarze .................................................................................... 306
Buforowanie stron wzorcowych .................................................................................... 306
ASP.NET AJAX i strony wzorcowe ................................................................................. 307
Podsumowanie .......................................................................................................... 310

Rozdzia 6. Kompozycje i skrki ............................................................................................................311


Korzystanie z kompozycji ASP.NET ............................................................................... 311
Przypisywanie kompozycji pojedynczej stronie ASP.NET ............................................ 311
Stosowanie stylw do caej aplikacji ....................................................................... 313
Usuwanie kompozycji z kontrolek serwerowych ........................................................ 314
Usuwanie kompozycji ze stron ................................................................................ 315
Stosowanie kompozycji podczas korzystania ze stron wzorcowych ............................. 316
Dziaanie atrybutu StyleSheetTheme ....................................................................... 316
Tworzenie wasnych kompozycji ................................................................................... 317
Tworzenie waciwej struktury katalogw ................................................................. 317
Tworzenie skrki ................................................................................................... 318
Umieszczanie w kompozycjach plikw CSS .............................................................. 320
Wstawianie do kompozycji obrazkw ....................................................................... 323
Definiowanie wielu opcji skrek ................................................................................... 326
Programowa praca z kompozycjami .............................................................................. 328
Programowe przypisywanie kompozycji strony .......................................................... 328
Programowe przypisanie waciwoci SkinID kontrolki .............................................. 329
Kompozycje, skrki i wasne kontrolki .......................................................................... 330
Podsumowanie .......................................................................................................... 334

Rozdzia 7. Wizanie danych w ASP.NET 3.5 ........................................................................................335


Kontrolki rde danych ............................................................................................... 335
Kontrolka SqlDataSource ....................................................................................... 337
Kontrolka LinqDataSource ..................................................................................... 350
Kontrolka AccessDataSource ................................................................................. 355

Spis treci

Kontrolka XmlDataSource ...................................................................................... 356


Kontrolka ObjctDataSource .................................................................................... 357
Kontrolka SiteMapDataSource ............................................................................... 362
Konfiguracja buforowania kontrolki rda danych ......................................................... 362
Przechowywanie informacji o poczeniu ....................................................................... 363
Uycie kontrolek list umoliwiajcych wizanie z kontrolkami rde danych ..................... 366
GridView ............................................................................................................... 366
Edycja danych rekordu GridView ............................................................................. 383
Usuwanie danych GridView .................................................................................... 390
DetailsView .......................................................................................................... 393
Wstawianie, modyfikacja i usuwanie danych za pomoc DetailsView ......................... 398
ListView ............................................................................................................... 400
FormView ............................................................................................................. 410
Inne kontrolki umoliwiajce wizanie danych ............................................................... 414
DropDownList, ListBox, RadioButtonList oraz CheckBoxList ...................................... 414
TreeView .............................................................................................................. 415
AdRotator ............................................................................................................. 415
Menu ................................................................................................................... 416
Skadnia rozwijanego wizania danych ......................................................................... 416
Zmiany w skadni wizania danych .......................................................................... 417
Wizanie danych XML ............................................................................................ 418
Wyraenia i klasy do budowania wyrae ...................................................................... 419
Podsumowanie .......................................................................................................... 424

Rozdzia 8. Zarzdzanie danymi za pomoc ADO.NET ..........................................................................425


Podstawowe moliwoci ADO.NET ................................................................................ 426
Podstawowe zadania ADO.NET ............................................................................... 426
Pobieranie danych ................................................................................................. 427
Wstawianie danych ............................................................................................... 428
Aktualizacja danych ............................................................................................... 429
Usuwanie danych .................................................................................................. 430
Podstawowe przestrzenie nazw i klasy ADO.NET ...................................................... 431
Korzystanie z obiektu Connection ........................................................................... 432
Korzystanie z obiektu Command ............................................................................. 434
Korzystanie z obiektu DataReader .......................................................................... 435
Korzystanie z DataAdapter ..................................................................................... 438
Korzystanie z parametrw ...................................................................................... 440
Opis obiektw DataSet oraz DataTable ................................................................... 443
Typowany DataSet ................................................................................................ 448
Korzystanie z bazy danych Oracle i ASP.NET ............................................................ 449
Kontrolka serwerowa DataList ..................................................................................... 451
Przegld dostpnych wzorcw ................................................................................ 452
Praca z ItemTemplate ............................................................................................ 452
Praca z innymi wzorcami ukadw graficznych .......................................................... 455
Praca z wieloma kolumnami ................................................................................... 457
Kontrolka serwerowa ListView ..................................................................................... 458
Przegld dostpnych wzorcw ................................................................................ 458
Korzystanie ze wzorcw ......................................................................................... 459
Tworzenie wzorca ukadu graficznego ...................................................................... 461
Tworzenie ItemTemplate ........................................................................................ 462
Tworzenie EditItemTemplate .................................................................................. 463

ASP.NET 3.5 z wykorzystaniem C# i VB. Zaawansowane programowanie


Tworzenie EmptyItemTemplate ............................................................................... 464
Tworzenie InsertItemTemplate ................................................................................ 464
Wyniki .................................................................................................................. 465
Wykorzystanie Visual Studio do zada ADO.NET ............................................................ 466
Tworzenie poczenia ze rdem danych ................................................................. 467
Praca z projektantem DataSet ................................................................................ 470
Korzystanie z obiektu DataSet CustomersOrders ..................................................... 475
Asynchroniczne wywoywanie polece ........................................................................... 479
Asynchroniczne metody klasy SqlCommand ............................................................. 480
Interfejs IAsyncResult ............................................................................................ 481
AsyncCallback ...................................................................................................... 482
Klasa WaitHandle ................................................................................................. 482
Sposoby przetwarzania asynchronicznego w ADO.NET .............................................. 483
Asynchroniczne poczenia .................................................................................... 500
Podsumowanie .......................................................................................................... 501

Rozdzia 9. Zapytania z wykorzystaniem LINQ ....................................................................................503


LINQ to Objects .......................................................................................................... 503
Tradycyjne metody zapyta .................................................................................... 504
Zamiana tradycyjnych zapyta na LINQ .................................................................... 511
Grupowanie danych ............................................................................................... 519
Inne operatory LINQ .............................................................................................. 520
Zczenia LINQ ...................................................................................................... 520
Paginacja za pomoc LINQ ..................................................................................... 522
LINQ to XML .............................................................................................................. 523

czenie danych XML ............................................................................................ 526


LINQ to SQL ............................................................................................................... 528
Zapytania Insert, Update oraz Delete z wykorzystaniem LINQ .................................... 537
Rozszerzanie LINQ ................................................................................................ 542
Podsumowanie .......................................................................................................... 542

Rozdzia 10. Praca z XML oraz LINQ to XML .........................................................................................543


Podstawy XML ............................................................................................................ 544
XML InfoSet .......................................................................................................... 546
Definicja schematu XSD-XML ................................................................................. 547
Edycja plikw XML oraz schematw XML w Visual Studio 2008 ................................. 549
XmlReader oraz XmlWriter ........................................................................................... 552
Korzystanie z XDocument zamiast XmlReader ......................................................... 555
Korzystanie ze schematu oraz XmlTextReader ......................................................... 556
Walidacja wzgldem schematu przy uyciu XDocument ............................................. 558
Korzystanie z optymalizacji NameTable ................................................................... 560
Pobieranie typw .NET CLR z dokumentw XML ....................................................... 562
ReadSubtree oraz XmlSerialization ......................................................................... 564
Tworzenie obiektw CLR z dokumentw XML za pomoc LINQ to XML ....................... 566
Tworzenie XML za pomoc XmlWriter ...................................................................... 567
Tworzenie XML za pomoc LINQ to XML .................................................................. 569
Udoskonalenia obiektw XmlReader oraz XmlWriter w wersji 2.0 ............................... 572
XmlDocument oraz XPathDocument ............................................................................. 573
Problemy z DOM ................................................................................................... 573
XPath, XPathDocument oraz XmlDocument .............................................................. 574

Spis treci

Obiekty DataSet ......................................................................................................... 578


Zapisywanie obiektw DataSet w postaci XML ......................................................... 578
XmlDataDocument ................................................................................................ 580
Kontrolka XmlDataSource ........................................................................................... 582
XSLT ......................................................................................................................... 585
XslCompiledTransform ........................................................................................... 588
Debugowanie XSLT ............................................................................................... 592
XML i bazy danych ...................................................................................................... 593
FOR XML AUTO ..................................................................................................... 594
SQL Server 2005 oraz typ danych XML ................................................................... 598
Podsumowanie .......................................................................................................... 605

Rozdzia 11. IIS 7 .....................................................................................................................................607


Modularna architektura usugi IIS 7 ............................................................................. 607
Serwer sieci Web .................................................................................................. 609
Narzdzia do zarzdzania ....................................................................................... 612
Usuga publikowania za pomoc protokou FTP ........................................................ 612
Rozszerzalna struktura usugi IIS 7 .............................................................................. 613
Zintegrowany potok przetwarzania da serwera IIS 7 i rodowiska ASP.NET ................. 613
Przygotowanie serwera WWW zgodnie z wasnymi potrzebami ........................................ 615
Zalenoci pakietw instalacyjnych ......................................................................... 616
Instalacja usugi IIS 7 w systemie Windows Vista .................................................... 617
Instalacja usugi IIS 7 w systemie Windows Server 2008 ......................................... 617
Instalacja za pomoc programu wiersza polecenia ................................................... 618
Instalacja nienadzorowana ..................................................................................... 619
Uaktualnianie systemu .......................................................................................... 620
Meneder internetowych usug informacyjnych (IIS) ....................................................... 620
Pule aplikacji ........................................................................................................ 622
Witryny ................................................................................................................. 626
Hierarchiczna konfiguracja ..................................................................................... 628
Delegowanie funkcji .............................................................................................. 633
Przenoszenie aplikacji z serwera IIS 6 do serwera IIS 7 ................................................. 636
Podsumowanie .......................................................................................................... 637

Rozdzia 12. Wprowadzenie do modelu dostawcw ............................................................................639


Zrozumienie modelu dostawcw .................................................................................. 640
Model dostawcw w ASP.NET 3.5 ................................................................................ 641
Ustawianie dostawcy, aby wsppracowa z Microsoft SQL Server 7.0, 2000, 2005
lub 2008 ........................................................................................................... 643
Dostawcy czonkostwa ........................................................................................... 649
Dostawcy rl ......................................................................................................... 653
Dostawca personalizacji ........................................................................................ 658
Dostawca SiteMap ................................................................................................ 659
Dostawcy SessionState ......................................................................................... 661
Dostawcy WebEvent .............................................................................................. 664
Dostawcy konfiguracji ............................................................................................ 672
Dostawca WebParts .............................................................................................. 675
Konfigurowanie dostawcw ......................................................................................... 677
Podsumowanie .......................................................................................................... 678

10

ASP.NET 3.5 z wykorzystaniem C# i VB. Zaawansowane programowanie


Rozdzia 13. Rozszerzanie modelu dostawcw ...................................................................................679
Dostawcy s jedn warstw w rozbudowanej architekturze ............................................. 679
Modyfikacja programowa z wykorzystaniem atrybutw ................................................... 680
Uatwienie wprowadzania hasa za pomoc SqlMembershipProvider .......................... 681
Nakadanie silnych restrykcji na haso za pomoc SqlMembershipProvider ................ 684
Analiza ProviderBase .................................................................................................. 685
Tworzenie wasnych klas dostawcw ............................................................................ 687
Tworzenie aplikacji CustomProvider ........................................................................ 687
Tworzenie wymaganego szkieletu klasy ................................................................... 689
Tworzenie magazynu danych XML ........................................................................... 692
Definiowanie instancji dostawcy w pliku web.config .................................................. 693
Niezaimplementowane metody i waciwoci klasy MembershipProvider .................... 694
Implementacja metod i waciwoci klasy MembershipProvider ................................. 695
Korzystanie z XmlMembershipProvider podczas logowania uytkownika ..................... 703
Rozszerzanie istniejcych dostawcw ........................................................................... 704
Ograniczenie moliwoci zarzdzania rolami
za pomoc nowego dostawcy LimitedSqlRoleProvider ............................................ 705
Korzystanie z nowej klasy dostawcy LimitedSqlRoleProvider ..................................... 709
Podsumowanie .......................................................................................................... 713

Rozdzia 14. Nawigacja portalu ..............................................................................................................715


Mapy portalu w postaci plikw XML ............................................................................. 716
Kontrolka serwerowa SiteMapPath .............................................................................. 718
Waciwo PathSeparator ..................................................................................... 720
Waciwo PathDirection ...................................................................................... 722
Waciwo ParentLevelsDisplayed ......................................................................... 722
Waciwo ShowToolTips ..................................................................................... 723
Elementy potomne kontrolki SiteMapPath ............................................................... 723
Kontrolka serwerowa TreeView .................................................................................... 724
Wbudowane style kontrolki TreeView ...................................................................... 728
Badanie skadnikw kontrolki TreeView ................................................................... 729
Wizanie kontrolki TreeView z plikiem XML .............................................................. 729
Wybr wielu opcji w kontrolce TreeView ................................................................... 732
Przypisywanie do kontrolki TreeView wasnych ikon .................................................. 736
Uywanie linii w celu poczenia wzw .................................................................. 737
Programistyczna praca z kontrolk TreeView ............................................................ 739
Kontrolka serwerowa Menu ......................................................................................... 745
Przypisywanie do kontrolki Menu rnych stylw ...................................................... 747
Zdarzenia Menu .................................................................................................... 752
Wizanie kontrolki Menu z plikiem XML ................................................................... 753
Dostawca danych SiteMap .......................................................................................... 755
ShowStartingNode ................................................................................................ 755
StartFromCurrentNode ........................................................................................... 756
StartingNodeOffset ............................................................................................... 757
StartingNodeUrl .................................................................................................... 758
SiteMap API ............................................................................................................... 758
Mapowanie URL ......................................................................................................... 761
Lokalizacja mapy portalu ............................................................................................. 762
Tworzenie pliku Web.sitemap korzystajcego z lokalizacji ......................................... 762
Wprowadzanie modyfikacji w pliku Web.config ......................................................... 763
Tworzenie plikw podzespow z zasobami (.resx) .................................................... 764
Testowanie wynikw .............................................................................................. 765

Spis treci

11

Security trimming ....................................................................................................... 767


Ustawienie zarzdzania rolami dla administratorw .................................................. 767
Ustawianie sekcji administratorw .......................................................................... 769
Wczanie security trimming ................................................................................... 770
Zagniedanie plikw SiteMap ..................................................................................... 772
Podsumowanie .......................................................................................................... 775

Rozdzia 15. Personalizacja ..................................................................................................................777


Model personalizacji ................................................................................................... 778
Tworzenie waciwoci personalizacji ........................................................................... 779
Dodawanie prostej waciwoci personalizacji ......................................................... 779
Korzystanie z waciwoci personalizacji ................................................................. 780
Dodawanie grup waciwoci personalizacji ............................................................. 784
Korzystanie z grupowanych waciwoci personalizacji ............................................. 785
Definiowanie typw waciwoci personalizacji ........................................................ 785
Korzystanie z wasnych typw ................................................................................. 786
Ustawianie wartoci domylnych ............................................................................ 789
Tworzenie waciwoci personalizacji tylko do odczytu .............................................. 789
Personalizacja anonimowa .......................................................................................... 790
Umoliwienie anonimowej identyfikacji uytkownikw ............................................... 790
Praca z anonimow identyfikacj ............................................................................ 793
Anonimowe opcje waciwoci personalizacji ........................................................... 794
Uwagi na temat przechowywania profilw anonimowych uytkownikw ....................... 795
Programowy dostp do personalizacji ........................................................................... 796
Migracja uytkownikw anonimowych ...................................................................... 796
Personalizacja profilw .......................................................................................... 798
Okrelanie, czy korzysta z automatycznego zapisu .................................................. 799
Dostawcy personalizacji .............................................................................................. 800
Praca z SQL Server Express Edition ........................................................................ 800
Praca z Microsoft SQL Server 7.0, 2000, 2005, 2008 ............................................. 801
Korzystanie z wielu dostawcw ............................................................................... 804
Zarzdzanie profilami aplikacji ..................................................................................... 804
Waciwoci klasy ProfileManager .......................................................................... 805
Metody klasy ProfileManager ................................................................................. 805
Tworzenie strony ProfileManager.aspx .................................................................... 806
Omwienie kodu strony ProfileManager.aspx ........................................................... 809
Uruchomienie strony ProfileManager.aspx ............................................................... 811
Podsumowanie .......................................................................................................... 812

Rozdzia 16. Czonkostwo i zarzdzanie rolami ....................................................................................813


Uwierzytelnianie ......................................................................................................... 814
Autoryzacja ................................................................................................................ 814
Uwierzytelnianie ASP.NET 3.5 ...................................................................................... 814
Ustalanie czonkostwa na portalach ........................................................................ 814
Wstawianie uytkownikw ...................................................................................... 818
Pobieranie danych uwierzytelniajcych .................................................................... 833
Praca z zarejestrowanymi uytkownikami ................................................................. 841
Pokazywanie liczby uytkownikw online .................................................................. 843
Obsuga hase ...................................................................................................... 845
Autoryzacja ASP.NET 3.5 ............................................................................................. 850
Korzystanie z kontrolki serwerowej LoginView .......................................................... 850
Konfiguracja systemu zarzdzania rolami na stronie ................................................ 853

12

ASP.NET 3.5 z wykorzystaniem C# i VB. Zaawansowane programowanie


Dodawanie i pobieranie rl w aplikacji .................................................................... 856
Usuwanie rl ........................................................................................................ 858
Dodawanie uytkownikw do rl ............................................................................. 859
Pobieranie wszystkich uytkownikw okrelonej roli ................................................. 860
Pobieranie wszystkich rl okrelonego uytkownika .................................................. 862
Usuwanie uytkownikw z rl ................................................................................. 863
Sprawdzanie, czy uytkownicy przypisani s do rl ................................................... 863
Wyjanienie sposobu buforowania rl ..................................................................... 865
Korzystanie z Web Site Administration Tool .................................................................. 866
Publiczne metody API czonkostwa ............................................................................... 867
Publiczne metody API rl ............................................................................................. 867
Podsumowanie .......................................................................................................... 868

Rozdzia 17. Platformy portalowe oraz Web Parts .............................................................................869


Wprowadzenie do Web Parts ....................................................................................... 870
Tworzenie dynamicznych i modularnych portali .............................................................. 871
Wprowadzenie do kontrolki WebPartManager ........................................................... 872
Praca z ukadami stref ........................................................................................... 873
Omwienie kontrolki WebPartZone ......................................................................... 877
Zezwolenie uytkownikowi na zmian trybu strony .................................................... 879
Modyfikacja stref .................................................................................................. 891
Praca z klasami platformy portalowej ........................................................................... 898
Tworzenie wasnych kontrolek Web Part ....................................................................... 902

czenie Web Parts .................................................................................................... 908


Tworzenie dostawcy Web Part ................................................................................ 909
Tworzenie kontrolki Web Part konsumenta .............................................................. 912

czenie obiektw Web Parts na stronie ASP.NET .................................................... 914


Trudnoci podczas pracy z kontrolkami Web Part oraz stronami wzorcowymi .............. 917
Podsumowanie .......................................................................................................... 918

Rozdzia 18. Projekt HTML oraz CSS w ASP.NET ...................................................................................919


Uwagi ........................................................................................................................ 920
Oglne informacje na temat HTML oraz CSS ................................................................. 920
Wprowadzenie do CSS ........................................................................................... 921
Tworzenie arkuszy stylw ....................................................................................... 922
Reguy CSS .......................................................................................................... 925
Dziedziczenie CSS ................................................................................................. 933
Ukad i pooenie elementw .................................................................................. 935
Praca z HTML oraz CSS w Visual Studio .................................................................. 943
ASP.NET 2.0 CSS Friendly Control Adapters ........................................................ 951
Podsumowanie .......................................................................................................... 951

Rozdzia 19. ASP.NET AJAX ....................................................................................................................953


Zrozumienie potrzeby stosowania AJAX ........................................................................ 953
Przed AJAX ................................................................................................................. 954
AJAX zmienia ten stan rzeczy ................................................................................. 955
ASP.NET AJAX oraz Visual Studio 2008 ........................................................................ 959
Technologie po stronie klienta ............................................................................... 959
Technologie dziaajce po stronie serwera .............................................................. 960
Tworzenie aplikacji za pomoc ASP.NET AJAX .......................................................... 961

Spis treci

13

Aplikacje ASP.NET AJAX .............................................................................................. 962


Tworzenie prostej strony ASP.NET niekorzystajcej z AJAX ........................................ 964
Tworzenie prostej strony ASP.NET z uyciem AJAX .................................................... 965
Kontrolki ASP.NET AJAX po stronie serwera .................................................................. 971
Kontrolka ScriptManager ....................................................................................... 972
Kontrolka ScriptManagerProxy ................................................................................ 974
Kontrolka Timer .................................................................................................... 975
Kontrolka UpdatePanel .......................................................................................... 977
Kontrolka UpdateProgress ..................................................................................... 982
Korzystanie z wielu kontrolek UpdatePanel ................................................................... 985
Podsumowanie .......................................................................................................... 988

Rozdzia 20. ASP.NET AJAX Control Toolkit ..........................................................................................989


Pobieranie i instalacja ................................................................................................ 989
Nowe wzorce Visual Studio .................................................................................... 991
Dodawanie nowych kontrolek do okna narzdziowego Visual Studio 2008 ................. 991
Kontrolki ASP.NET AJAX .............................................................................................. 993
Kontrolki rozszerzajce ASP.NET AJAX Control Toolkit .............................................. 996
AlwaysVisibleControlExtender ................................................................................. 996
AnimationExtender ................................................................................................ 999
AutoCompleteExtender ........................................................................................ 1000
CalendarExtender ................................................................................................ 1004
CollapsiblePanelExtender .................................................................................... 1005
ConfirmButtonExtender oraz ModalPopupExtender ................................................. 1007
DragPanelExtender .............................................................................................. 1009
DropDownExtender .............................................................................................. 1011
DropShadowExtender .......................................................................................... 1013
DynamicPopulateExtender ................................................................................... 1015
FilteredTextBoxExtender ...................................................................................... 1018
HoverMenuExtender ............................................................................................ 1020
ListSearchExtender ............................................................................................. 1021
MaskedEditExtender oraz MaskedEditValidator ...................................................... 1023
MutuallyExclusiveCheckBoxExtender ..................................................................... 1026
NumericUpDownExtender ..................................................................................... 1027
PagingBulletedListExtender .................................................................................. 1028
PopupControlExtender ......................................................................................... 1029
ResizableControlExtender .................................................................................... 1031
RoundedCornersExtender .................................................................................... 1033
SliderExtender .................................................................................................... 1035
SlideShowExtender ............................................................................................. 1036
TextBoxWatermarkExtender ................................................................................. 1039
ToggleButtonExtender .......................................................................................... 1041
UpdatePanelAnimationExtender ............................................................................ 1042
ValidationCalloutExtender .................................................................................... 1043
Kontrolki serwerowe ASP.NET AJAX Control Toolkit ...................................................... 1045
Kontrolka Accordion ............................................................................................ 1045
Kontrolka NoBot ................................................................................................. 1047
Kontrolka PasswordStrength ................................................................................ 1049
Kontrolka Rating ................................................................................................. 1050
Kontrolka TabContainer ....................................................................................... 1052
Podsumowanie ........................................................................................................ 1053

14

ASP.NET 3.5 z wykorzystaniem C# i VB. Zaawansowane programowanie


Rozdzia 21. Bezpieczestwo ...............................................................................................................1055
Uwierzytelnianie i autoryzacja .................................................................................... 1056
Techniki uwierzytelniania ........................................................................................... 1056
Wze <authentication> ....................................................................................... 1057
Uwierzytelnianie Windows .................................................................................... 1058
Uwierzytelnianie na podstawie formularzy .............................................................. 1068
Uwierzytelnianie z wykorzystaniem mechanizmu Microsoft Passport ........................ 1079
Uwierzytelnianie w dostpie do okrelonych plikw i katalogw .................................... 1079
Autoryzacja programowa ........................................................................................... 1080
Waciwo User.Identity ..................................................................................... 1081
Metoda User.IsInRole() ........................................................................................ 1082
Uzyskiwanie dodatkowych informacji z obiektu WindowsIdentity .............................. 1083
Element <identity> i tryb personifikacji ....................................................................... 1086
Zabezpieczenia serwera IIS ....................................................................................... 1089
Ograniczenie zakresu adresw IP i nazw domenowych ............................................ 1089
Rozszerzenia plikw ............................................................................................ 1091
Korzystanie z konsoli ASP.NET MMC ..................................................................... 1094
Konsola menedera usugi IIS 7.0 ........................................................................ 1095
Podsumowanie ........................................................................................................ 1096

Rozdzia 22. Zarzdzanie informacjami o stanie aplikacji ................................................................1097


Jakie opcje s do wyboru? ........................................................................................ 1098
Obiekt Session platformy ASP.NET ............................................................................ 1101
Sesje a model zdarze ........................................................................................ 1101
Konfiguracja mechanizmu zarzdzania sesj ......................................................... 1103
Sesje wewntrzprocesowe ................................................................................... 1104
Sesje pozaprocesowe .......................................................................................... 1113
Sesje zapisywane w serwerach SQL ..................................................................... 1119
Rozszerzenie sesji o inne mechanizmy dostawcw danych ..................................... 1123
Sesje bez plikw cookie ...................................................................................... 1124
Wybr odpowiedniego sposobu podtrzymywania sesji ............................................. 1126
Obiekt Application .................................................................................................... 1126

acuchy zapytania .................................................................................................. 1127


Dane cookie ............................................................................................................ 1128
Odsyanie danych i przekazywanie danych midzy stronami .......................................... 1129
Ukryte pola formularza, mechanizmy ViewState oraz ControlState ................................ 1131
Wykorzystanie kolekcji HttpContext.Current.Items
do przechowywania krtkookresowych wartoci ........................................................ 1136
Podsumowanie ........................................................................................................ 1138

Rozdzia 23. Buforowanie .................................................................................................................... 1139


Buforowanie ............................................................................................................ 1139
Buforowanie danych wyjciowych .......................................................................... 1140
Buforowanie czci strony (kontrolek uytkownika) ................................................. 1143
Podmiana wartoci w buforowanej treci ............................................................... 1145
Buforowanie po stronie klienta i obiekt HttpCachePolicy ......................................... 1147
Buforowanie programowe .......................................................................................... 1149
Buforowanie danych za pomoc obiektu Cache ...................................................... 1150
Nadzorowanie pracy pamici podrcznej rodowiska ASP.NET ................................ 1151
Zalenoci wpisw pamici podrcznej ................................................................. 1151

Spis treci

15

Zalenoci bufora SQL .............................................................................................. 1157


Dodanie bazy danych do listy bazy danych uwzgldnianych w zalenociach bufora SQL ... 1158
Dodanie tabeli do list tabel uwzgldnianych w zalenociach bufora SQL ................. 1159
Sprawdzenie zmian w konfiguracji usugi SQL Server 2000 ..................................... 1159
Analiza wczonych tabel ..................................................................................... 1161
Usunicie tabeli z listy tabel uwzgldnianych w zalenociach bufora SQL ............... 1161
Usunicie bazy danych z listy baz uwzgldnianych w zalenociach bufora SQL ........ 1161
Zalenoci bufora SQL w bazie danych SQL Server 2005 ....................................... 1162
Konfiguracja aplikacji ASP.NET .................................................................................. 1163
Testowanie mechanizmu uniewaniania danych bufora SQL ......................................... 1165
Odwoanie do wicej ni jednej tabeli w kodzie strony ............................................. 1168
Powizanie zalenoci bufora SQL z obiektem Request .......................................... 1168
Powizanie zalenoci bufora SQL z obiektem Cache ............................................. 1169
Podsumowanie ........................................................................................................ 1172

Rozdzia 24. Debugowanie i obsuga bdw ...................................................................................... 1173


Wsparcie w czasie projektowania ............................................................................... 1173
Powiadomienia o bdach skadni ......................................................................... 1174
Okna Immediate i Command ................................................................................ 1176
Lista zada ........................................................................................................ 1177
ledzenie kodu ........................................................................................................ 1178
Klasy System.Diagnostic.Trace oraz Page.Trace .................................................... 1178
ledzenie kodu na poziomie strony ....................................................................... 1179
ledzenie pracy aplikacji ...................................................................................... 1179
Przegldanie danych wynikowych .......................................................................... 1179
ledzenie pracy komponentw ............................................................................. 1184
Przekazywanie danych ze ledzenia kodu .............................................................. 1186
Obiekty TraceListener .......................................................................................... 1186
Przeczniki diagnostyczne ................................................................................... 1192
Zdarzenia sieciowe .............................................................................................. 1194
Debugowanie ........................................................................................................... 1196
Potrzebne elementy ............................................................................................. 1196
Usugi IIS i ASP.NET Development Server .............................................................. 1198
Uruchomienie sesji debugowania ......................................................................... 1199
Nowe narzdzia uatwiajce debugowanie ............................................................. 1203
Debugowanie klienckiego kodu JavaScript ............................................................. 1207
Debugowanie procedur skadowanych SQL ............................................................ 1209
Wyjtki i obsuga bdw ........................................................................................... 1210
Przechwytywanie wyjtku na stronie ...................................................................... 1211
Obsuga wyjtkw aplikacji ................................................................................... 1212
Kody statusowe HTTP .......................................................................................... 1213
Podsumowanie ........................................................................................................ 1215

Rozdzia 25. Pliki i strumienie ............................................................................................................. 1217


Dyski, katalogi i pliki ................................................................................................. 1218
Klasa DriveInfo ................................................................................................... 1218
Klasy Directory i DirectoryInfo .............................................................................. 1221
Klasy File i FileInfo .............................................................................................. 1228
Przetwarzanie cieek dostpu ............................................................................. 1233
Waciwoci plikw i katalogw, ich atrybuty oraz listy kontroli dostpu ................... 1237

16

ASP.NET 3.5 z wykorzystaniem C# i VB. Zaawansowane programowanie


Odczyt i zapis plikw ................................................................................................. 1244
Strumienie ......................................................................................................... 1245
Obiekty odczytu i zapisu ...................................................................................... 1249
Kompresowanie danych strumieni ........................................................................ 1254
Wykorzystanie portw szeregowych ............................................................................ 1260
Komunikacja sieciowa .............................................................................................. 1261
Klasy WebRequest i WebResponse ...................................................................... 1262
Przesyanie poczty elektronicznej .......................................................................... 1269
Podsumowanie ........................................................................................................ 1270

Rozdzia 26. Kontrolki uytkownika i kontrolki serwerowe ............................................................. 1271


Kontrolki uytkownika ............................................................................................... 1272
Utworzenie kontrolki uytkownika ......................................................................... 1272
Interakcje z kontrolkami uytkownika .................................................................... 1275
Dynamiczne adowanie kontrolek uytkownika ....................................................... 1277
Kontrolki serwerowe ................................................................................................. 1283
Przygotowanie projektu kontrolki WebControl ......................................................... 1283
Atrybuty sterujce ............................................................................................... 1289
Wywietlanie kontrolki ......................................................................................... 1291
Dodawanie atrybutw znacznikw ......................................................................... 1295
Definicje stylu HTML ............................................................................................ 1297
Motywy tematyczne i skrki .................................................................................. 1300
Dodanie elementw kodu klienckiego ................................................................... 1302
Wykrywanie parametrw przegldarki .................................................................... 1312
Mechanizm ViewState ......................................................................................... 1315
Wywoywanie zdarze powodujcych odesanie strony ............................................ 1319
Obsuga odsyanych danych ................................................................................. 1323
Kontrolki zoone ................................................................................................ 1325
Kontrolki szablonowe .......................................................................................... 1328
Zachowanie kontrolki w rodowisku projektowym ................................................... 1336
Podsumowanie ........................................................................................................ 1356

Rozdzia 27. Moduy HTTP i obsuga da ..........................................................................................1357


Przetwarzanie da HTTP ......................................................................................... 1357
IIS 5 (IIS 6) i ASP.NET ......................................................................................... 1358
IIS 7 i ASP.NET ................................................................................................... 1358
Przetwarzanie da ASP.NET .............................................................................. 1359
Moduy HTTP ............................................................................................................ 1360
Zmiana wynikowych danych HTTP ......................................................................... 1362
Przepisywanie adresw URL ................................................................................. 1365
Symbole wieloznaczne ......................................................................................... 1369
Procedury obsugi da HTTP .............................................................................. 1371
Odwzorowanie rozszerzenia pliku w serwerze IIS .................................................... 1376
Podsumowanie ........................................................................................................ 1379

Rozdzia 28. Obiekty biznesowe .......................................................................................................... 1381


Korzystanie z obiektw biznesowych w rodowisku ASP.NET 3.5 .................................. 1381
Tworzenie wstpnie skompilowanych obiektw biznesowych platformy .NET ............. 1382
Wykorzystanie wstpnie skompilowanych obiektw biznesowych w aplikacji ASP.NET .. 1385
Wykorzystanie komponentw COM w rodowisku .NET ................................................ 1387
Komponent Runtime Callable Wrapper .................................................................. 1387
Wykorzystanie obiektw COM w kodzie ASP.NET .................................................... 1389

Spis treci

17

Obsuga bdw .................................................................................................. 1394


Wdraanie komponentw COM w aplikacjach .NET ................................................. 1397
Odwoania do kodu .NET z poziomu kodu niezarzdzanego .......................................... 1399
Modu COM-Callable Wrapper ............................................................................... 1399
Wspdziaanie komponentw .NET z obiektami COM ............................................. 1402
Wczesne czy p ne wizanie ................................................................................ 1405
Obsuga bdw .................................................................................................. 1406
Wdraanie komponentw .NET z aplikacjami COM ................................................. 1408
Podsumowanie ........................................................................................................ 1410

Rozdzia 29. Budowanie i wykorzystywanie usug ............................................................................. 1411


Komunikacja midzy rozproszonymi systemami .......................................................... 1411
Budowa prostej XML-owej usugi sieciowej .................................................................. 1414
Dyrektywa WebService ......................................................................................... 1415
Plik klasy bazowej usugi sieciowej ....................................................................... 1416
Udostpnianie zbiorw danych w formie dokumentw SOAP ................................... 1417
Interfejs usugi sieciowej ..................................................................................... 1420
Korzystanie z nieskomplikowanych XML-owych usug sieciowych .................................. 1423
Dodawanie odwoania .......................................................................................... 1424
Wywoywanie usugi sieciowej w kodzie aplikacji klienckiej ...................................... 1426
Protokoy transportowe usug sieciowych .................................................................... 1429
dania HTTP GET .............................................................................................. 1430
dania HTTP POST ............................................................................................ 1433
dania SOAP ..................................................................................................... 1434
Przecianie metod sieciowych .................................................................................. 1434
Buforowanie odpowiedzi usug sieciowych .................................................................. 1438
Nagwki SOAP ........................................................................................................ 1439
Tworzenie usug sieciowych uwzgldniajcych nagwki SOAP ................................. 1439
Wykorzystanie nagwkw SOAP w odwoaniach do usugi sieciowej ........................ 1441
Wykorzystanie da SOAP 1.2 ............................................................................ 1444
Asynchroniczne odwoania do usug sieciowych ........................................................... 1446
Windows Communication Foundation ......................................................................... 1449
Krok w stron architektury bazujcej na usugach .................................................. 1450
Przegld technologii WCF ..................................................................................... 1451
Tworzenie usug WCF ........................................................................................... 1451
Aplikacja korzystajca z usugi WCF ........................................................................... 1460
Dodanie odwoania do usugi ............................................................................... 1460
Kontrakty danych ................................................................................................ 1464
Przestrzenie nazw ............................................................................................... 1469
Podsumowanie ........................................................................................................ 1469

Rozdzia 30. Lokalizacja oprogramowania ......................................................................................... 1471


Ustawienia kulturowe i regionalne .............................................................................. 1471
Typy kulturowe .................................................................................................... 1472
Wtki ASP.NET .................................................................................................... 1473
Ustawienia kulturowe serwera .............................................................................. 1477
Ustawienia kulturowe klienta ............................................................................... 1478
Tumaczenie wartoci i zmiana sposobu zachowania aplikacji ................................. 1480
Pliki zasobw ASP.NET 3.5 ....................................................................................... 1488
Wykorzystanie zasobw lokalnych ......................................................................... 1488
Wykorzystanie zasobw globalnych ....................................................................... 1495
Edytor zasobw ........................................................................................................ 1498
Podsumowanie ........................................................................................................ 1498

18

ASP.NET 3.5 z wykorzystaniem C# i VB. Zaawansowane programowanie


Rozdzia 31. Konfiguracja .....................................................................................................................1499
Oglne informacje na temat konfiguracji ..................................................................... 1500
Pliki konfiguracyjne serwera ................................................................................. 1501
Plik konfiguracyjny aplikacji .................................................................................. 1504
W jaki sposb s odczytywane ustawienia konfiguracyjne? ..................................... 1504
Wykrywanie zmian w plikach konfiguracyjnych ........................................................ 1505
Format pliku konfiguracyjnego .............................................................................. 1505
Wsplne ustawienia konfiguracyjne ............................................................................ 1506
Cigi pocze .................................................................................................... 1506
Konfiguracja stanu sesji ...................................................................................... 1508
Konfiguracja kompilacji ........................................................................................ 1512
Parametry przegldarek ....................................................................................... 1515
Niestandardowe komunikaty o bdach ................................................................. 1517
Uwierzytelnianie .................................................................................................. 1518
Identyfikacja uytkownikw anonimowych .............................................................. 1522
Autoryzacja ......................................................................................................... 1523
Blokowanie ustawie konfiguracyjnych .................................................................. 1525
Konfiguracja strony ASP.NET ................................................................................ 1526
Wczane pliki ..................................................................................................... 1528
Parametry pracy rodowiska ASP.NET ................................................................... 1529
Konfiguracja procesu roboczego ASP.NET ............................................................. 1532
Przechowywanie ustawie aplikacji ....................................................................... 1534
Programowe przetwarzanie plikw konfiguracyjnych ................................................ 1535
Ochrona ustawie konfiguracyjnych ...................................................................... 1542
Edycja pliku konfiguracyjnego ............................................................................... 1546
Tworzenie wasnych sekcji konfiguracyjnych ................................................................ 1549
Wykorzystanie obiektu NameValueFileSectionHandler ............................................ 1549
Wykorzystanie obiektu DictionarySectionHandler ................................................... 1551
Wykorzystanie obiektu SingleTagSectionHandler .................................................... 1552
Wykorzystanie wasnej procedury obsugi ustawie konfiguracyjnych ........................ 1553
Podsumowanie ........................................................................................................ 1555

Rozdzia 32. Narzdzia monitorujce prac serwisu ........................................................................1557


Dzienniki zdarze ..................................................................................................... 1557
Odczytywanie informacji z dziennika zdarze .......................................................... 1558
Zapis informacji w dzienniku zdarze .................................................................... 1561
Wska niki wydajnoci ............................................................................................... 1563
Przegldanie licznikw wydajnoci za pomoc narzdzi administracyjnych ................ 1564
Narzdzie administracyjne uruchamiane w przegldarce ......................................... 1567
ledzenie kodu aplikacji ........................................................................................... 1572
Monitorowanie kondycji aplikacji ................................................................................ 1572
Model dostawcy danych systemu monitorowania kondycji aplikacji .......................... 1573
Konfiguracja systemu monitorowania kondycji aplikacji .......................................... 1575
Zapis zdarze na podstawie parametrw konfiguracyjnych
uruchomienie przykadowej aplikacji .............................................................. 1583
Przekazywanie zdarze do serwera SQL ................................................................ 1584
Buforowanie zdarze sieciowych ........................................................................... 1587
Wysyanie informacji o zdarzeniach za pomoc poczty elektronicznej ....................... 1590
Podsumowanie ........................................................................................................ 1595

Spis treci

19

Rozdzia 33. Administracja i zarzdzanie ..........................................................................................1597


Aplikacja ASP.NET Web Site Administration Tool ......................................................... 1597
Zakadka Home .................................................................................................. 1599
Zakadka Security ............................................................................................... 1599
Zakadka Application ........................................................................................... 1609
Zakadka Provider ............................................................................................... 1613
Konfiguracja rodowiska ASP.NET w systemie Vista .................................................... 1615
Kompilacja platformy .NET ................................................................................... 1616
Globalizacja platformy .NET .................................................................................. 1617
Profil platformy .NET ............................................................................................ 1618
Role platformy .NET ............................................................................................ 1619
Poziomy zaufania platformy .NET .......................................................................... 1620
Uytkownicy platformy .NET .................................................................................. 1620
Ustawienia aplikacji ............................................................................................ 1622
Cigi poczenia .................................................................................................. 1622
Strony i formanty ................................................................................................ 1624
Dostawcy ........................................................................................................... 1624
Stan sesji ........................................................................................................... 1624
Poczta e-mail SMTP ............................................................................................. 1626
Podsumowanie ........................................................................................................ 1626

Rozdzia 34. Pakowanie i instalacja aplikacji .....................................................................................1627


Instalowane elementy ............................................................................................... 1628
Czynnoci poprzedzajce instalacj ........................................................................... 1628
Metody instalowania aplikacji WWW ........................................................................... 1629
Program XCopy ................................................................................................... 1629
Opcja Copy Web Site rodowiska Visual Studio ..................................................... 1632
Instalowanie wstpnie skompilowanej aplikacji WWW ............................................ 1636
Utworzenie programu instalatora .......................................................................... 1638
Szczegowa analiza opcji instalatora ......................................................................... 1648
Waciwoci projektu instalacyjnego ..................................................................... 1649
Edytor systemu plikw ......................................................................................... 1653
Edytor rejestru .................................................................................................... 1657
Edytor typw plikw ............................................................................................. 1658
Edytor interfejsu uytkownika ............................................................................... 1659
Edytor niestandardowych operacji ......................................................................... 1661
Edytor warunkw uruchomienia ............................................................................ 1663
Podsumowanie ........................................................................................................ 1664

Dodatek A Wykorzystanie projektw wczeniejszych wersji ASP.NET ...........................................1665


Przenoszenie nie jest trudne ..................................................................................... 1665
Rwnolega praca wielu wersji platformy ............................................................... 1666
Aktualizacja aplikacji ASP.NET .............................................................................. 1666

czenie wersji uwierzytelnianie na bazie formularzy ............................................... 1668


Aktualizacja zarezerwowane foldery ASP.NET .......................................................... 1669
Format XHTML stron ASP.NET 3.5 ............................................................................. 1670
Brak plikw .js w ASP.NET 3.5 ................................................................................... 1672
Konwertowanie aplikacji ASP.NET 1.x w rodowisku Visual Studio 2008 ....................... 1673
Przeniesienie aplikacji ze rodowiska ASP.NET 2.0 do 3.5 ........................................... 1678

20

ASP.NET 3.5 z wykorzystaniem C# i VB. Zaawansowane programowanie


Dodatek B Narzdzia wspomagajce prac w rodowisku ASP.NET ................................................ 1681

atwiejsze debugowanie ........................................................................................... 1682


Firebug ............................................................................................................... 1682
YSlow ................................................................................................................ 1683
IE Developer Toolbar oraz Firefox WebDeveloper .................................................... 1685
Aptana Studio rodowisko programistyczne jzyka JavaScript ............................. 1686
Narzdzia optymalizacji kodu dotTrace i ANTS ................................................... 1687
rda informacji ...................................................................................................... 1689
PositionIsEverything.net, QuirksMode.org oraz HTMLDog.com ................................ 1689
Visibone ............................................................................................................. 1689
www.asp.net ....................................................................................................... 1689
Czyszczenie kodu ..................................................................................................... 1690
Refactor! for ASP.NET .......................................................................................... 1690
Code Style Enforcer ............................................................................................. 1691
Packer for .NET narzdzie zmniejszajce rozmiar skryptu JavaScript .................... 1692
Dodatki do rodowiska Visual Studio ......................................................................... 1694
Dodatek do Visual Studio ASPX Edit Helper ........................................................... 1694
Power Toys Pack Installer .................................................................................... 1695
Rozszerzanie rodowiska ASP.NET ............................................................................. 1696
ASP.NET AJAX Control Toolkit ............................................................................... 1696
ELMAH rejestracja i obsuga bdw ................................................................. 1697
ISAPI_Rewrite ..................................................................................................... 1698
Narzdzia programistyczne oglnego przeznaczenia .................................................... 1700
Internetowy konwerter kodu ................................................................................. 1700
WinMerge i narzdzia wyszukujce rnice w kodzie ............................................... 1701
Reflector ............................................................................................................ 1701
CR_Documentor .................................................................................................. 1702
Process Explorer ................................................................................................. 1703
Podsumowanie ........................................................................................................ 1704

Dodatek C Silverlight ...........................................................................................................................1705


Rozszerzanie aplikacji ASP.NET za pomoc SilverLight ................................................ 1705
Krok 1. Prosta aplikacja ASP.NET .............................................................................. 1707
Wyszukiwanie grafiki wektorowej .......................................................................... 1708
Konwertowanie grafiki wektorowej na XAML ........................................................... 1711
Narzdzia do podgldu i edycji XAML .................................................................... 1712
Integracja z istniejc stron ASP.NET .................................................................. 1719
Obsuga zdarze Silverlight w JavaScript ............................................................... 1720
Dostp do elementw Silverlight w zdarzeniach JavaScript ..................................... 1722
Podsumowanie ........................................................................................................ 1724

Dodatek D Serwisy internetowe o ASP.NET ........................................................................................1725


Blogi autorw ksiki ................................................................................................ 1725
Inne blogi na temat ASP.NET ..................................................................................... 1725
Witryny internetowe .................................................................................................. 1726

Skorowidz ............................................................................................................................................1727

4
Walidacyjne kontrolki serwerowe
Patrzc na okno Toolbox w Visual Studio 2008 zwaszcza wtedy, gdy czyta si rozdziay
2. i 3., w ktrych omwiono rne kontrolki serwerowe pozostajce do dyspozycji mona
by poraonym iloci kontrolek serwerowych udostpnianych przez ASP.NET 3.5. W niniejszym rozdziale omwiono specyficzny typ kontrolek serwerowych, ktre mona znale
w oknie Toolbox: walidacyjne kontrolki serwerowe.
Walidacyjne kontrolki serwerowe s seri kontrolek, ktre pozwalaj pracowa z danymi
wprowadzonymi przez uytkownikw kocowych w elementach formularza tworzonej
aplikacji. Kontrolki pozwalaj zadba o poprawno danych wpisywanych na formularzu.
Zanim przejdziemy do omwienia sposobw ich uycia, przyjrzyjmy si dokadnie procesowi walidacji.

Zrozumienie procesu walidacji


Ludzie tworzyli aplikacje internetowe przez wiele lat. Zwykle byo to spowodowane potrzeb udostpnienia lub pobrania informacji. W tym rozdziale skupimy si na aspekcie pobierania informacji przez aplikacje internetowe. Podczas pobierania danych w aplikacji
wane jest to, aby byy to dane poprawne. Jeeli dane nie s poprawne, wtedy nie ma
wikszego sensu w gromadzeniu ich.
Walidacja jest procesem wielostopniowym i stanowi zbir regu, ktre nakada si na zbierane dane. Tych regu moe by duo lub mao i mog by cise lub do lune. Zaley
to jedynie od potrzeb twrcy aplikacji. Nie istnieje aden perfekcyjny sposb walidacji, poniewa niektrzy uytkownicy mog znale jaki sposb oszukania tych procedur, bez
wzgldu na zastosowane reguy. Cay problem tkwi w znalezieniu zotego rodka pomidzy
niewielk iloci zasad oraz cis kontrol, ktra nie bdzie miaa wpywu na uyteczno
aplikacji.

240

ASP.NET 3.5 z wykorzystaniem C# i VB. Zaawansowane programowanie


Dane zbierane do procesu walidacji pochodz z formularzy aplikacji. Formularze zbudowane s z rnych typw elementw HTML, ktre s tworzone za pomoc tradycyjnych
elementw HTML, kontrolek serwerowych HTML ASP.NET oraz kontrolek serwerowych
Web ASP.NET. Wszystko to na kocu i tak staje si zbiorem elementw HTML wchodzcym w skad formularzy. S to na przykad pola tekstowe, przyciski opcji, przyciski wyboru,
listy rozwijane i wiele innych.
Pracujc z przykadami zaprezentowanymi w tym rozdziale, bdzie mona zauway rne
typy regu walidacyjnych, ktre mona doda do elementw formularza. Naley pamita ,
e nie ma moliwoci sprawdzenia, czy dane s prawdziwe. Mona jedynie wprowadzi zasady,
ktre pomagaj odpowiedzie na pytania typu:
Q

Czy co zostao wpisane w polu tekstowym?

Czy dane wpisane w polu tekstowym posiadaj format adresu e-mail?

Warto take zwrci uwag na to, e moliwe jest zastosowanie wicej ni jednej reguy
walidacji do elementu formularza HTML (przykady zostan pokazane w dalszej czci tego
rozdziau). W rzeczywistoci do kadego elementu mona zastosowa tyle regu walidacyjnych, ile tylko potrzeba. Dodanie kolejnych regu do elementw zwiksza poziom sprawdzania
poprawnoci danych.
Naley pamita , e pobieranie danych na stronach internetowych jest jedn z najwaniejszych funkcji internetu. Naley wic zadba o to, aby zebrane dane posiaday pewn warto
i miay jakie znaczenie. Mona o to zadba , eliminujc przypadki, w ktrych zbierane informacje nie speniaj nakrelonych regu.

Walidacja po stronie klienta


a walidacja po stronie serwera
Pocztkujcy twrcy aplikacji internetowych mog nie by wiadomi rnicy pomidzy
walidacj po stronie klienta i walidacj po stronie serwera. Przypu my, e uytkownik
kocowy po uzupenieniu kontrolek formularza naciska przycisk Zatwierd . ASP.NET pakuje
formularz do postaci dania i wysya je do serwera, na ktrym ta aplikacja jest umieszczona. W tym punkcie cyklu danie odpowied mona przeprowadzi proces sprawdzania
poprawnoci wprowadzonych informacji. Takie podejcie nazywamy walidacj po stronie
serwera, poniewa wszystko dzieje si na serwerze.
Z drugiej strony mona umieci skrypt (zwykle pod postaci kodu JavaScript). Wysyany
jest on razem ze stron do uytkownika kocowego i umoliwia sprawdzenie poprawnoci
danych wprowadzonych do formularza, zanim zostanie on przesany do serwera aplikacji.
W tym przypadku mamy do czynienia z walidacj po stronie klienta.

Rozdzia 4.

Walidacyjne kontrolki serwerowe

241

Oba typy walidacji maj swoje wady i zalety. Programici Active Server Pages 2.0/3.0
(w czasach klasycznego ASP) mieli wiadomo wad i zalet tych rozwiza, poniewa cay
proces sprawdzania poprawnoci danych wykonywali wasnorcznie. Wielu programistw
spdzio wiele dni z klasycznym ASP. W tym czasie wprowadzili rne techniki walidacji,
ktre speniaj pewne wymagania zwizane z wydajnoci i bezpieczestwem.
Walidacja po stronie klienta jest szybka. Uytkownik natychmiast otrzymuje odpowied.
To co, czego spodziewaj si uytkownicy kocowi na kadym formularzu. Jeeli z formularzem co jest nie tak, wtedy walidacja po stronie klienta powoduje, e uytkownik
natychmiast jest o tym informowany. Walidacja po stronie klienta przerzuca obowizek
przetwarzania danych i sprawdzania ich poprawnoci na klienta. Oznacza to, e nie trzeba
uywa mocy obliczeniowej na serwerze do przetwarzania tych samych informacji, poniewa
klient wykona ju ca prac.
Jak mona si domyli na podstawie powyszego, walidacja po stronie klienta jest form
sprawdzania poprawnoci bardziej naraon na rne niebezpieczestwa. Gdy strona generowana jest w przegldarce uytkownika, wtedy mona do atwo podejrze jej rda
(poprzez kliknicie prawym przyciskiem myszy i wybranie opcji Poka rda). Po wykonaniu takiej czynno mona zobaczy cay kod HTML strony. Oprcz tego mona obejrze cay kod JavaScript, ktry na tej stronie zosta umieszczony. Jeeli poprawno danych
sprawdzana jest po stronie klienta, to dla sprawnego hakera nie stanowi adnego problemu
odesanie spreparowanego formularza (zawierajcego wartoci, ktre s przez niego podane). Serwer moe je wtedy odebra jako prawidowe. Istniej take takie przypadki, gdy
uytkownik zwyczajnie zablokuje w swojej przegldarce obsug skryptw w ten sposb
moe uczyni walidacj cakowicie bezuyteczn.
W zwizku z powyszym walidacja po stronie klienta powinna by rozwaana w kategoriach wygody i uatwienia ycia uytkownikowi kocowemu. Nigdy nie powinien to by
mechanizm zapewniajcy aplikacji bezpieczestwo.
Bezpieczniejsz form sprawdzania poprawnoci danych jest walidacja po stronie serwera.
Walidacja po stronie serwera oznacza, e wszystkie procedury kontrolujce poprawno
wykonywane s na serwerze, a nie na kliencie. Jest to bezpieczniejsze, poniewa tego etapu
nie da si w atwy sposb omin . Dane na formularzu sprawdzane s przez kod serwera
(C# lub VB) na serwerze. Jeeli formularz nie jest prawidowy, wtedy odsyany jest do
klienta jako nieprawidowy. Jest to bezpieczniejsze, ale taka walidacja po stronie serwera
moe by wolna. Dzieje si tak, poniewa strona musi by przesana do zdalnego komputera
i tam sprawdzona. Uytkownik kocowy na pewno nie bdzie zadowolony, gdy po odczekaniu
20 sekund na odpowied dowie si, e wpisa swj adres e-mail w nieprawidowym formacie.
Jaka jest zatem prawidowa cieka? Generalnie obie s dobre! Najlepszym podejciem jest
wykonanie walidacji po stronie klienta, a potem, po przejciu przez ten pierwszy etap
i przesaniu formularza na serwer, wykonywana jest walidacja po stronie serwera. Takie podejcie jest najlepsze spord wszystkich. Jest bezpieczne, poniewa hakerzy nie mog tak
zwyczajnie omin procesu walidacji. Mona oszuka walidacj po stronie klienta, ale dane
i tak zostan jeszcze raz sprawdzone po przesaniu ich na serwer. Taki sposb walidacji jest
take do efektywny pozwala uzyska szybko i elegancj walidacji po stronie klienta.

242

ASP.NET 3.5 z wykorzystaniem C# i VB. Zaawansowane programowanie

Kontrolki walidacyjne ASP.NET


W czasach klasycznego ASP.NET programici powicali duo czasu na obsug rnych
schematw walidacji. Z tego powodu wraz z pierwsz wersj ASP.NET wprowadzono seri
walidacyjnych kontrolek serwerowych, ktre pozwalaj w atwy sposb przeprowadzi
sprawdzenie poprawnoci danych formularza.
Samo wprowadzenie walidacyjnych kontrolek serwerowych przez ASP.NET to nie wszystko.
Kontrolki s wyjtkowo sprytne. Jak ju zostao wczeniej napisane, jednym z zada programistw klasycznego ASP byo zadecydowanie, gdzie przeprowadza walidacj czy
na kliencie, czy na serwerze. Walidacyjne kontrolki serwerowe eliminuj ten problem, poniewa ASP.NET wykrywa przegldark i na tej podstawie podejmuje waciw decyzj.
Oznacza to, e jeeli aplikacja obsuguje JavaScript, wtedy ASP.NET przeprowadza walidacj po stronie klienta. Jeeli przegldarka klienta nie obsuguje JavaScript i walidacji po
stronie klienta, wtedy kod JavaScript jest pomijany, a caa walidacja przeprowadzana jest
po stronie serwera.
Najlepsze z tego wszystkiego jest to, e pomimo pomylnego umieszczenia na stronie walidacji po stronie klienta ASP.NET w dalszym cigu przeprowadza walidacj po stronie serwera w momencie otrzymania danej strony. W ten sposb nie ma adnych kompromisw
zwizanych z bezpieczestwem. Decyzyjna natura walidacyjnych kontrolek serwerowych
oznacza, e mona tworzy strony ASP.NET tak dobre, jak tylko one mog by . Nie trzeba
szuka adnego wsplnego mianownika bezpieczestwa i szybkoci.
Obecnie w ASP.NET 3.5 dostpnych jest 6 kontrolek walidacyjnych. Od czasu wprowadzenia
pierwszej wersji technologii ASP.NET nie pojawiy si adne nowe kontrolki. W ASP.NET 2.0
wprowadzono jednak kilka nowych moliwoci, takich jak grupy walidacji oraz nowe moliwoci zastosowania JavaScript. Obie te techniki omwione s w tym rozdziale. Do dyspozycji mamy nastpujce walidacyjne kontrolki serwerowe:
Q

RequiredFieldValidator,

CompareValidator,

RangeValidator,

RegularExpressionValidator,

CustomValidator,

ValidationSummary.

Praca z walidacyjnymi kontrolkami serwerowymi ASP.NET nie rni si niczym od pracy
z innymi kontrolkami serwerowymi ASP.NET. Kada z tych kontrolek moe by przecignita i upuszczona na powierzchni projektow, ale moe by take wprowadzona bezporednio do kodu strony ASP.NET. Kontrolki mog by modyfikowane w taki sposb, aby
odpowiaday one potrzebom aplikacji. W ten sposb aplikacja moe uzyska unikalny wygld.
Wiele przykadw pracy z tymi kontrolkami pojawi si w dalszej czci rozdziau.

Rozdzia 4.

Walidacyjne kontrolki serwerowe

243

Jeeli walidacyjne kontrolki serwerowe nie speniaj wszystkich oczekiwa, wtedy zajdzie potrzeba napisania wasnych kontrolek walidacyjnych. Istniej jednak kontrolki
napisane przez osoby trzecie, na przykad takie jak Validation and More Petera Bluma
(VAM) z www.peterblum.com/VAM. Na wspomnianej stronie znajduje si ponad 40
kontrolek walidacyjnych ASP.NET.

W poniszej tabeli opisano funkcjonalno kadej z dostpnych walidacyjnych kontrolek


serwerowych.
Walidacyjna kontrolka serwerowa

Opis

RequiredFieldValidator

Dba o to, aby uytkownik nie opuci danego pola formularza.

CompareValidator

Pozwala porwna dane wprowadzone przez uytkownika


z innym elementem za pomoc operatora porwnania
(rwne, wiksze ni, mniejsze ni i tak dalej).

RangeValidator

Sprawdza, czy warto wprowadzona przez uytkownika


mieci si w podanym zakresie liczb lub znakw.

RegularExpressionValidator

Sprawdza, czy wpis uytkownika jest zgodny ze wzorcem


zdefiniowanym przez wyraenie regularne. To dobra kontrolka
do sprawdzenia adresu e-mail oraz numeru telefonu.

CustomValidator

Sprawdza wpis uytkownika za pomoc wasnej logiki


walidacyjnej.

ValidationSummary

Wywietla wszystkie komunikaty o bdach wszystkich


kontrolek walidacyjnych w jednym miejscu na stronie.

Przyczyny walidacji
Walidacja nie jest przeprowadzana nagle. Pojawia si w wyniku odpowiedzi na zdarzenie.
W wikszoci przypadkw jest to zdarzenie nacinicia przycisku. Kontrolki serwerowe
Button, LinkButton oraz ImageButton posiadaj moliwo uruchomienia procesu walidacji
na formularzu. Jest to zachowanie domylne. Po przecigniciu i upuszczeniu kontrolki
Button na formularz otrzymujemy nastpujcy rezultat:
<asp:Button ID="Button1" runat="server" Text="Button" />

Przegldajc waciwoci kontrolki Button, mona zauway , e waciwo CausesValidation


ustawiona jest na True. Jak ju wspomniano, jest to ustawienie domylne wszystkie przyciski na stronie, bez wzgldu na to, gdzie s, powoduj uruchomienie procesu walidacji.
Jeeli na stronie ASP.NET znajduje si wiele przyciskw i nie ma potrzeby, aby kady
z nich wywoywa proces walidacji, wtedy mona ustawi waciwo CausesValidation
na False dla tych przyciskw, ktre powinny zignorowa proces walidacji (na przykad
przycisk Anuluj):
<asp:Button ID="Button1" runat="server" Text="Anuluj" CausesValidation="false" />

244

ASP.NET 3.5 z wykorzystaniem C# i VB. Zaawansowane programowanie

Kontrolka serwerowa RequiredFieldValidator


Kontrolka RequiredFieldValidator zwyczajnie sprawdza, czy do elementu HTML formularza
zostao co wprowadzone. To prosta kontrolka walidacyjna, ale jest ona uywana najczciej.
Kontrolka RequiredFieldValidator musi by wstawiona dla wszystkich elementw, ktre
musz spenia regu postaci warto wymagana.
Na listingu 4.1 pokazano przykadowy sposb uycia kontrolki serwerowej Required
FieldValidator.
Listing 4.1. Przykadowy sposb uycia kontrolki serwerowej RequiredFieldValidator
VB
<%@ Page Language="VB" %>
<script runat="server">
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
If Page.IsValid Then
Label1.Text = "Strona jest prawidowa!"
End If
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server" id="Head1">
<title>RequiredFieldValidator</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="TextBox1" Runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1"
Runat="server" Text="Wymagane!" ControlToValidate="TextBox1">
</asp:RequiredFieldValidator>
<br />
<asp:Button ID="Button1" Runat="server" Text="Zatwierd"
OnClick="Button1_Click" />
<br />
<br />
<asp:Label ID="Label1" Runat="server"></asp:Label>
</div>
</form>
</body>
</html>
C#
<%@ Page Language="C#" %>
<script runat="server">
protected void Button1_Click(Object sender, EventArgs e) {
if (Page.IsValid) {
Label1.Text = " Strona jest prawidowa!";
}
}
</script>

Rozdzia 4.

Walidacyjne kontrolki serwerowe

245

Zbudujmy stron i sprbujmy j uruchomi . Na stronie pokae si proste pole tekstowe oraz
przycisk. Sprbujmy teraz pozostawi pole tekstowe puste i nacisn przycisk Zatwierd .
Wyniki pokazane s na rysunku 4.1.

Rysunek 4.1

Popatrzmy teraz na kod z przykadu. Na pocztku mona zauway , e przy kontrolkach TextBox,
Button i Label nic si nie zmienio. Wstawione s one tak, jakby nie bya stosowana adna
technika walidacji. Na stronie umieszczono jednak prost kontrolk RequiredFieldValidator.
Na kilka waciwoci tej kontrolki naley zwrci szczegln uwag, poniewa bd stosowane w kadej tworzonej walidacyjnej kontrolce serwerowej.
Pierwsz z tych wanych waciwoci jest Text. Warto tej waciwoci pokazywana jest
uytkownikowi kocowemu na stronie wtedy, gdy walidacja nie powiedzie si. W pokazanym przykadzie jest to zwyky acuch znakw Wymagane!. Drug waciwoci, o ktrej
warto wspomnie , jest ControlToValidate. Waciwo wykorzystywana jest do poczenia
walidacyjnej kontrolki serwerowej z tym elementem formularza ASP.NET, ktry ma by
sprawdzony. W tym przypadku waciwo wskazuje na jedyny element formularza pole
edycji.
W przykadzie mona zauway , e komunikat o bdzie tworzony jest na podstawie atrybutu kontrolki <asp:RequiredFieldValidator>. Zadanie realizowane jest za pomoc atrybutu
Text. Pokazano to na listingu 4.2.
Listing 4.2. Wykorzystanie atrybutu Text
<asp:RequiredFieldValidator ID="RequiredFieldValidator1"
Runat="server" Text="Wymagane!" ControlToValidate="TextBox1">
</asp:RequiredFieldValidator>

Ten sam komunikat o bdzie mona umieci pomidzy otwierajcym i zamykajcym wzem
<asp:RequiredFieldValidator>. Pokazano to na listingu 4.3.
Listing 4.3. Umieszczenie wartoci pomidzy wzami
<asp:RequiredFieldValidator ID="RequiredFieldValidator1"
Runat="server" ControlToValidate="TextBox1">
Wymagane!
</asp:RequiredFieldValidator>

246

ASP.NET 3.5 z wykorzystaniem C# i VB. Zaawansowane programowanie

Sprawdzanie wygenerowanych wynikw


Kontrolka RequiredFieldValidator uywa walidacji po stronie klienta, jeeli tylko przegldarka na to pozwala. Mona samemu przekona si o obecnoci walidacji po stronie klienta
(jeeli przegldarka pozwala), klikajc na stronie prawym przyciskiem myszy i wybierajc
z menu podrcznego podgld rda. W kodzie strony mona dostrzec funkcje JavaScript
pokazane na listingu 4.4.
Listing 4.4. Wygenerowany kod JavaScript
znaczniki strony usunite dla przejrzystoci
<script type="text/javascript">
<!-function WebForm_OnSubmit() {
if (ValidatorOnSubmit() == false) return false;
return true;
}
// -->
znaczniki strony usunite dla przejrzystoci
<script type="text/javascript">
<!-var Page_Validators = new Array(document.getElementById("RequiredFieldValidator1"));
// -->
</script>
<script type="text/javascript">
<!-var RequiredFieldValidator1 = document.all ? document.all["RequiredFieldValidator1"] :
document.getElementById("RequiredFieldValidator1");
RequiredFieldValidator1.controltovalidate = "TextBox1";
RequiredFieldValidator1.text = "Wymagane!";
RequiredFieldValidator1.evaluationfunction = "RequiredFieldValidatorEvaluateIsValid";
RequiredFieldValidator1.initialvalue = "";
// -->
</script>
znaczniki strony usunite dla przejrzystoci
<script type="text/javascript">
<!-var Page_ValidationActive = false;
if (typeof(ValidatorOnLoad) == "function") {
ValidatorOnLoad();
}
function ValidatorOnSubmit() {
if (Page_ValidationActive) {
return ValidatorCommonOnSubmit();
}
else {
return true;
}
}
// -->
</script>

Rozdzia 4.

Walidacyjne kontrolki serwerowe

247

W kodzie strony mona zauway kilka zmian w elementach formularza (zwykych kontrolkach formularza). Obsuguj one teraz zatwierdzanie formularza oraz skojarzon z tym
zdarzeniem walidacj.

Korzystanie z waciwoci InitialValue


Kolejn wan waciwoci podczas pracy z kontrolk RequiredFieldValidator jest waciwo InitialValue. Czasami istniej elementy, ktre zawieraj pewn domyln warto
pocztkow (na przykad pobran z jakiego rda danych). Takie elementy formularza
mog przedstawia pewn warto , ktra musi by zmieniona, zanim formularz zostanie
przesany na serwer.
Korzystajc z waciwoci InitialValue, okrela si w kontrolce RequiredFieldValidator
pocztkow warto elementu. Uytkownik kocowy musi zmieni warto tekstow tej kontrolki przed zatwierdzeniem formularza. Na listingu 4.5 pokazano przykad uycia tej waciwoci.
Listing 4.5. Praca z waciwoci InitialValue
<asp:TextBox ID="TextBox1" Runat="server">Moja warto
pocztkowa</asp:TextBox>
&nbsp;
<asp:RequiredFieldValidator ID="RequiredFieldValidator1"
Runat="server" Text="Warto
pola tekstowego musi by
zmieniona!"
ControlToValidate="TextBox1" InitialValue="Moja warto
pocztkowa">
</asp:RequiredFieldValidator>

W tym przypadku waciwo InitialValue zawiera warto Moja warto


pocztkowa.
Po zbudowaniu i uruchomieniu strony pole tekstowe rwnie zawiera t warto . Kontrolka
RequiredFieldValidator wymaga zmiany w tym polu. Tylko wtedy strona zostanie zakwalifikowana jako poprawna.

Uniemoliwienie pustych wpisw i rwnoczesne wymaganie zmian


W poprzednim przykadzie uycia waciwoci InitialValue pojawi si interesujcy problem.
Po pierwsze, jeeli aplikacja z takim kodem zostanie uruchomiona, wtedy uytkownik moe
przej przez proces walidacji, przesyajc stron bez adnej wartoci wpisanej w polu edycji.
Puste pole edycji nie spowoduje wygenerowania bdu walidacji, poniewa kontrolka
RequiredFieldValidator jest teraz przebudowana tak, aby zmusi uytkownika wycznie
do zmiany domylnej wartoci pola edycji (co uytkownik zrobi, usuwajc star warto ).
Zmieniajc kontrolk RequiredFieldValidator w ten sposb, nie nakada si adnego ograniczenia, ktre wymaga wpisania czego w polu edycji zmieniona musi by tylko warto
pocztkowa. Proces walidacji moe by ominity poprzez usunicie wszystkiego, co wpisano
w polu tekstowym.
Istnieje jednak sposb obejcia tego problemu. Dochodzimy tu do techniki, o ktrej ju
wczeniej wspomniano na formularzu mona umieci wiele regu walidacyjnych. Niektre z nich mog by przypisane do tego samego elementu. Aby naoy wymg zmiany

248

ASP.NET 3.5 z wykorzystaniem C# i VB. Zaawansowane programowanie


wartoci pocztkowej pola edycji i rwnoczenie zabroni pustego wpisu (przez co element
staje si elementem wymaganym), naley na stronie umieci dodatkow kontrolk
RequiredFieldValidator. Pokazano to na przykadzie z listingu 4.6.

Listing 4.6. Uycie dwch kontrolek RequiredFieldValidator dla jednego elementu formularza
<asp:TextBox ID="TextBox1" Runat="server">Moja warto
pocztkowa</asp:TextBox>&nbsp;
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" Runat="server"
Text="Zmie warto
pola" ControlToValidate="TextBox1"
InitialValue="Moja warto
pocztkowa"></asp:RequiredFieldValidator>
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" Runat="server"
Text="Nie zostawiaj pustego pola" ControlToValidate="TextBox1"
</asp:RequiredFieldValidator>

W pokazanym przykadzie mona zauway , e pole edycji rzeczywicie posiada dwie


skojarzone ze sob kontrolki RequiredFieldValidator. Pierwsza, RequiredFieldValidator1,
wymaga zmiany domylnej wartoci pola edycji poprzez uycie waciwoci InitialValue.
Druga kontrolka RequiredFieldValidator, RequiredFieldValidator2, sprawia, e kontrolka
TextBox1 staje si elementem formularza, ktry potrzebuje pewnej wartoci. Podane zachowanie mona uzyska , stosujc dwie reguy walidacji do pojedynczego elementu formularza.

Walidacja list rozwijanych za pomoc kontrolki RequiredFieldValidator


Do tej pory pokazalimy duo przykadw uycia kontrolki RequiredFieldValidator z seri
pl tekstowych. Kontrolka RequiredFieldValidator moe by jednak z powodzeniem stosowana wraz z innymi elementami.
Mona na przykad zastosowa kontrolk RequiredFieldValidator z kontrolk serwerow
<asp:DropDownList>. Przypu my, e mamy list rozwijan. Uytkownik musi wybra z tej
listy swj zawd. Pierwszy element listy rozwijanej zawiera instrukcje dla uytkownika
i informuje o tym, co lista zawiera. Ten element listy jest wymagany. Kod, ktry zrealizuje
zaprezentowany scenariusz, pokazano na listingu 4.7.
Listing 4.7. Walidacja listy rozwijanej
<asp:DropDownList id="DropDownList1" runat="server">
<asp:ListItem Selected="True">Wybierz zawd</asp:ListItem>
<asp:ListItem>Programista</asp:ListItem>
<asp:ListItem>Prawnik</asp:ListItem>
<asp:ListItem>Lekarz</asp:ListItem>
<asp:ListItem>Artysta</asp:ListItem>
</asp:DropDownList>
&nbsp;
<asp:RequiredFieldValidator id="RequiredFieldValidator1"
runat="server" Text="Wybierz element"
ControlToValidate="DropDownList1"
InitialValue="Wybierz zawd">
</asp:RequiredFieldValidator>

Rozdzia 4.

Walidacyjne kontrolki serwerowe

249

Tak samo jak podczas pracy z kontrolk edycji, tak i w tym przypadku kontrolka Required
FieldValidator skojarzona jest z kontrolk DropDownList za pomoc waciwoci
ControlToValidate. Lista rozwijana, do ktrej podpita jest kontrolka walidacyjna, posiada
warto pocztkow Wybierz zawd. Oczywicie taka warto nie jest waciwa w momencie przesyania formularza na serwer. Znw naley uy waciwoci InitialValue
kontrolki RequiredFieldValidator. Wartoci tej kontrolki jest warto pocztkowa listy
rozwijanej. Zmusza to oczywicie uytkownika do wyboru jednego z zawodw z listy rozwijanej. W przeciwnym razie nie bdzie on w stanie przesa strony na serwer.

Kontrolka serwerowa CompareValidator


Kontrolka CompareValidator pozwala wykonywa porwnania pomidzy dwoma elementami formularza, a take suy do porwnania dwch wartoci umieszczonych we wskazanych elementach formularza. Mona na przykad okreli , e wartoci elementu formularza
musi by liczba cakowita wiksza ni inna zadana warto . Mona take wskaza , e wartociami musz by acuchy znakw, daty lub inne typy, ktre s do dyspozycji.

Walidacja wzgldem innych kontrolek


Jednym z do czsto stosowanych sposobw wykorzystania kontrolki CompareValidator
jest uycie jej do porwnania dwch elementw formularza. Przypu my, e dana jest aplikacja, ktra w celu uzyskania dostpu do stron przez uytkownikw wymaga podania hasa.
Tworzymy zatem jedno pole edycji, ktre bdzie suyo do pobrania hasa, i drugie pole
tekstowe, ktre bdzie suyo do potwierdzenia tego hasa. W zwizku z tym, e pole tekstowe dziaa w trybie wprowadzania hasa, uytkownik kocowy nie widzi tego, co wpisuje
zna tylko liczb wprowadzonych znakw. Aby zmniejszy prawdopodobiestwo pomyki przy wpisywaniu hasa i zapobiec wprowadzeniu do systemu zego hasa, uytkownik proszony jest o potwierdzenie tego hasa. Po wprowadzeniu hase do systemu naley
porwna te dwa pola edycji i sprawdzi , czy wartoci w nich wpisane s takie same. Jeeli s
takie same, wtedy jest due prawdopodobiestwo, e uytkownik wpisa haso poprawnie
i moe ono by wprowadzone do systemu. Jeeli dwa pola tekstowe nie s zgodne, wtedy formularz naley traktowa jako nieprawidowy. W przykadzie z listingu 4.8 pokazano t sytuacj.
Listing 4.8. Wykorzystanie CompareValidator do porwnania wartoci z wartociami innych kontrolek
VB
<%@ Page Language="VB" %>
<script runat="server">
Protected Sub Button1_Click(sender As Object, e As EventArgs)
If Page.IsValid Then
Label1.Text = "Hasa s zgodne"
End If
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>CompareFieldValidator</title>

250

ASP.NET 3.5 z wykorzystaniem C# i VB. Zaawansowane programowanie


</head>
<body>
<form id="Form1" runat="server">
<p>
Haso<br>
<asp:TextBox ID="TextBox1" Runat="server"
TextMode="Password"></asp:TextBox>
&nbsp;
<asp:CompareValidator ID="CompareValidator1"
Runat="server" ErrorMessage="Hasa nie s zgodne!"
ControlToValidate="TextBox2"
ControlToCompare="TextBox1"></asp:CompareValidator>
</p>
<p>
Potwierd haso<br>
<asp:TextBox ID="TextBox2" Runat="server"
TextMode="Password"></asp:TextBox>
</p>
<p>
<asp:Button ID="Button1" OnClick="Button1_Click"
Runat="server" Text="Zaloguj"></asp:Button>
</p>
<p>
<asp:Label ID="Label1" Runat="server"></asp:Label>
</p>
</form>
</body>
</html>
C#
<%@ Page Language="C#" %>
<script runat="server">
protected void Button1_Click(Object sender, EventArgs e) {
if (Page.IsValid)
Label1.Text = "Hasa s zgodne";
}
</script>

Patrzc na kontrolk CompareValidator na formularzu, mona zauway , e jest ona


podobna do kontrolki FieldValidator. Kontrolka CompareValidator posiada waciwo
ControlToValidate, ktra czy si z jednym z elementw formularza na stronie. W tym
przypadku potrzebna jest tylko jedna kontrolka CompareValidator, poniewa wymagane jest
tylko jedno porwnanie. W pokazanym przykadzie sprawdzana jest zgodno wartoci pl
edycji TextBox2 oraz TextBox1. W zwizku z tym uyto waciwoci ControlToCompare.
Okrela si w ten sposb warto porwnywan z TextBox2. W tym przykadzie wartoci
jest TextBox1.
Jest to wyjtkowo proste. Jeeli dwa pola tekstowe w momencie zatwierdzania strony posiadaj rne wartoci, wtedy w przegldarce wywietlana jest warto waciwoci Text
kontrolki CompareValidator. Przykad pokazany jest na rysunku 4.2.

Rozdzia 4.

Walidacyjne kontrolki serwerowe

251

Rysunek 4.2

Walidacja wzgldem staej


Kontrolki CompareValidator mona uy nie tylko do walidacji wartoci wzgldem wartoci
w innych kontrolkach, ale te do porwnania wartoci wzgldem staych okrelonych typw
danych. Przypu my, e na formularzu rejestracyjnym umieszczono pole edycji, w ktrym
uytkownik wpisuje swj wiek. W wikszoci tego typu przypadkw celem jest pobranie
liczby cakowitej, a nie czego w postaci aa lub bb. Na listingu 4.9 pokazano, w jaki sposb
mona wymusi podanie liczby cakowitej.
Listing 4.9. Wykorzystanie CompareValidator do walidacji wzgldem staej
Wiek:
<asp:TextBox ID="TextBox1" Runat="server" MaxLength="3">
</asp:TextBox>
&nbsp;
<asp:CompareValidator ID="CompareValidator1" Runat="server"
Text="Musisz wpisa
liczb "
ControlToValidate="TextBox1" Type="Integer"
Operator="DataTypeCheck"></asp:CompareValidator>

W pokazanym przykadzie uytkownik kocowy musi wpisa w polu tekstowym liczb. Jeeli
sprbuje obej proces walidacji, wpisujc warto nieprawidow, ktra zawiera co innego
ni cyfry, wtedy strona bdzie traktowana jako nieprawidowa. Kontrolka CompareValidator
wywietla warto waciwoci Text.
Aby okreli typ danych wykorzystywany w porwnaniach, korzysta si z waciwoci Type.
Waciwo Type moe przyjmowa nastpujce wartoci:
Q

Currency,

Date,

Double,

Integer,

String.

252

ASP.NET 3.5 z wykorzystaniem C# i VB. Zaawansowane programowanie


Wprowadzenie ograniczenia ze wzgldu na typ to nie wszystko, co mona zrobi przy wykorzystaniu tej kontrolki. Mona take zadba o to, aby warto bya porwnywana z okrelon sta. Istnieje sposb na sprawdzenie, czy warto wpisana w elemencie formularza
jest wiksza ni, mniejsza ni, rwna, wiksza ni lub rwna i mniejsza ni lub rwna pewnej
wartoci. Przykad pokazano na listingu 4.10.

Listing 4.10. Wykonywanie porwna za pomoc kontrolki CompareValidator


Wiek:
<asp:TextBox ID="TextBox1" Runat="server"></asp:TextBox>
&nbsp;
<asp:CompareValidator ID="CompareValidator1" Runat="server"
Operator="GreaterThan" ValueToCompare="18"
ControlToValidate="TextBox1"
Text="Aby si zapisa
musisz mie
wi cej ni 18 lat" Type="Integer">
</asp:CompareValidator>

W tym przypadku kontrolka CompareValidator oprcz poczenia si z kontrolk oraz naoenia wymogu wprowadzenia liczby cakowitej robi co jeszcze. Wykorzystywane s rwnie atrybuty Operator oraz ValueToCompare. Dziki nim mona si upewni , e liczba jest
wiksza ni 18. Jeeli zatem uytkownik wprowadzi liczb rwn 18 lub mniejsz, wtedy
walidacja nie powiedzie si i strona bdzie traktowana jako nieprawidowa.
Waciwo Operator moe przyjmowa nastpujce wartoci:
Q

Equal,

NotEqual,

GreaterThan,

GreaterThanEqual,

LessThan,

LessThanEqual,

DataTypeCheck.

Waciwo ValueToCompare to miejsce, gdzie umieszcza si warto wykorzystywan


w porwnaniu. W pokazanym przykadzie jest to liczba 18.

Kontrolka serwerowa RangeValidator


Kontrolka RangeValidator jest podobna do kontrolki CompareValidator. Pozwala ona
sprawdzi , czy warto wprowadzona przez uytkownika lub jego wybr znajduje si
w podanym zakresie. Za pomoc kontrolki CompareValidator sprawdza si, czy warto jest
wiksza albo mniejsza ni wskazana staa. Jako przykad zastosowania kontrolki niech
posuy nieco zmodyfikowany przykad formularza pobierajcego wiek. Nieco inny jest
rodzaj walidacji wprowadzonej wartoci. Pokazano go na listingu 4.11.
Listing 4.11. Wykorzystanie kontrolki RangeValidator do sprawdzenia wartoci cakowitej
Wiek:
<asp:TextBox ID="TextBox1" Runat="server"></asp:TextBox>
&nbsp;
<asp:RangeValidator ID="RangeValidator1" Runat="server"

Rozdzia 4.

Walidacyjne kontrolki serwerowe

253

ControlToValidate="TextBox1" Type="Integer"
Text="Wiek musi by
pomi dzy 30 i 40"
MaximumValue="40" MinimumValue="30"></asp:RangeValidator>

W pokazanym przykadzie umieszczono pole edycji, za pomoc ktrego pobierany jest


wiek uytkownika. Kontrolka RangeValidator analizuje wprowadzon warto i sprawdza,
czy mieci si ona w zakresie od 30 do 40. Wykonywane jest to za pomoc waciwoci
MaximumValue oraz MinimumValue. Kontrolka RangeValidator pozwala take zadba o to, aby
wprowadzona warto bya liczb cakowit. W tym celu wykorzystywana jest waciwo
Type, ktra ustawiona jest na Integer. Kolekcja zrzutw ekranw na rysunku 4.3 pokazuje
dziaanie omawianej kontrolki.

Rysunek 4.3

254

ASP.NET 3.5 z wykorzystaniem C# i VB. Zaawansowane programowanie


Jak mona zauway na zrzutach ekranw z rysunku 4.3, warto mniejsza ni 30 zostaje
przez kontrolk RangeValidator zasygnalizowana. To samo dzieje si w przypadku wartoci wikszych ni 40. Warto pomidzy 30 i 40 (w tym przypadku 36) spenia warunki
naoone przez kontrolk walidacyjn.
Kontrolka RangeValidator nie jest stosowana wycznie do porwnywania liczb (w takich
sytuacjach jest jednak najczciej wykorzystywana). Moe ona posuy take do walidacji
zakresu acuchw znakw oraz innych elementw, wczajc w to daty pobrane z kalendarza.
Domylnie atrybut Type kadej z kontrolek walidacyjnych ustawiony jest na String. Kontrolka
RangeValidator moe posuy do sprawdzenia, czy warto w innej kontrolce serwerowej
(takiej jak na przykad Calendar) mieci si w podanym zakresie dat.
Przypu my, e tworzony jest formularz internetowy, ktry pozwala na pobranie od uytkownika daty przyjazdu. Data przyjazdu musi mieci si w zakresie dwch tygodni od daty
biecej. Kontrolka RangeValidator moe by z atwoci dostosowana do takich potrzeb.
W zwizku z tym, e zakres dat musi by generowany dynamicznie, atrybuty MaximumValue
oraz MinimumValue musz by przypisane programowo w zdarzeniu Page_Load. W oknie
projektanta przykadowa strona powinna wyglda podobnie do tej z rysunku 4.4.

Rysunek 4.4

Caa idea polega na tym, e uytkownik bdzie wybiera dat w kontrolce Calendar, a jego
wybr bdzie wywietlany w kontrolce TextBox. Potem, gdy uytkownik kliknie na formularzu przycisk, wtedy w przypadku wybrania nieprawidowej daty zostanie o tym powiadomiony. Jeeli wybrana data jest prawidowa, wtedy pokazywana jest ona przez kontrolk
Label. Kod przykadu pokazany jest na listingu 4.12.

Rozdzia 4.

Walidacyjne kontrolki serwerowe

255

Listing 4.12. Wykorzystanie kontrolki RangeValidator do sprawdzenia wartoci daty w postaci acucha znakw
VB
<%@ Page Language="VB" %>
<script runat="server">
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
RangeValidator1.MinimumValue = DateTime.Now.ToShortDateString()
RangeValidator1.MaximumValue = DateTime.Now.AddDays(14).ToShortDateString()
End Sub
Protected Sub Calendar1_SelectionChanged(ByVal sender As Object, _
ByVal e As System.EventArgs)
TextBox1.Text = Calendar1.SelectedDate.ToShortDateString()
End Sub
Protected Sub Button1_Click(ByVal sender As Object, _
ByVal e As System.EventArgs)
If Page.IsValid Then
Label1.Text = "Data przybycia ustawiona jest na: " & TextBox1.Text
End If
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Sprawdzenie poprawnoci daty</title>
</head>
<body>
<form id="form1" runat="server">
Data przyjazdu:
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>&nbsp;
<asp:RangeValidator ID="RangeValidator1" runat="server"
Text="Mona wybra
dat tylko na dwa tygodnie do przodu"
ControlToValidate="TextBox1" Type="Date"></asp:RangeValidator><br />
<br />
Wybierz dat przyjazdu:<br />
<asp:Calendar ID="Calendar1" runat="server"
OnSelectionChanged="Calendar1_SelectionChanged"></asp:Calendar>
&nbsp;
<br />
<asp:Button ID="Button1" runat="server" Text="Przycisk"
OnClick="Button1_Click" />
<br />
<br />
<asp:Label ID="Label1" runat="server"></asp:Label>
</form>
</body>
</html>
C#
<%@ Page Language="C#" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
RangeValidator1.MinimumValue = DateTime.Now.ToShortDateString();

256

ASP.NET 3.5 z wykorzystaniem C# i VB. Zaawansowane programowanie


RangeValidator1.MaximumValue = DateTime.Now.AddDays(14).ToShortDateString();
}
protected void Calendar1_SelectionChanged(object sender, EventArgs e)
{
TextBox1.Text = Calendar1.SelectedDate.ToShortDateString();
}
protected void Button1_Click(object sender, EventArgs e)
{
if (Page.IsValid)
{
Label1.Text = "Data przybycia ustawiona jest na: " +
TextBox1.Text.ToString();
}
}
</script>

W pokazanym kodzie wida , e podczas wczytywania strony atrybuty MinimumValue oraz


MaximumValue ustawiane s dynamicznie. W tym przypadku wartoci MinimumValue staje
si wynik wywoania DateTime.Now.ToShortDateString(), a wartoci MaximumValue data
pniejsza o 14 dni.
Po wybraniu daty przez uytkownika jej warto wywietlana jest w kontrolce TextBox1.
Wykonywane jest to w procedurze obsugi zdarzenia Calendar1_SelectionChanged. Po wybraniu daty i klikniciu przycisku na stronie wykonywana jest procedura obsugi zdarzenia
Button1_Click, a poprawno walidacji caej strony sprawdzana jest za pomoc waciwoci
Page.IsValid. Nieprawidowa strona pokae wyniki zaprezentowane na rysunku 4.5.

Rysunek 4.5

Rozdzia 4.

Walidacyjne kontrolki serwerowe

257

Kontrolka serwerowa RegularExpressionValidator


Jedn ze wspaniaych kontrolek, ktr programici najczciej wykorzystuj, jest Regular
ExpressionValidator. Kontrolka oferuje wysoki poziom elastycznoci podczas wprowadzania do formularza rnych regu. Wykorzystujc kontrolk RegularExpressionValidator,
mona sprawdzi zgodno wprowadzonych danych z pewnym wzorcem, wyraonym za
pomoc wyraenia regularnego.
Oznacza to, e mona zdefiniowa pewn struktur, ktra bdzie potem wykorzystywana
do sprawdzania zgodnoci z danymi wprowadzonymi przez uytkownika. Mona na przykad
zdefiniowa struktur, ktra wymusza wprowadzenie danych w postaci adresu e-mail lub
adresu internetowego URL. Jeeli warto nie jest zgodna z definicj, wtedy strona traktowana jest jako nieprawidowa. Na listingu 4.13 pokazano, w jaki sposb sprawdzi poprawno danych wprowadzonych do pola edycji pod ktem ich zgodnoci z formatem
adresu e-mail.
Listing 4.13. Sprawdzenie, czy pole edycji zawiera waciwy adres e-mail
E-mail:
<asp:TextBox ID="TextBox1" Runat="server"></asp:TextBox>
&nbsp;
<asp:RegularExpressionValidator ID="RegularExpressionValidator1"
Runat="server" ControlToValidate="TextBox1"
Text="Musisz wpisa
waciwy adres e-mail"
ValidationExpression="\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*">
</asp:RegularExpressionValidator>

Tak jak to jest w przypadku innych walidacyjnych kontrolek serwerowych, kontrolka


RegularExpressionValidator uywa waciwoci ContolToValidate do poczenia si z inn
kontrolk. Zawiera take waciwo Text, ktra zawiera tekst wywietlany na ekranie po
niepomylnym zakoczeniu si procesu walidacji. Unikatow waciwoci tej kontrolki jest
ValidationExpression. Waciwo przechowuje warto tekstow, ktra jest wyraeniem regularnym stosowanym przez kontrolk do sprawdzania poprawnoci danych wejciowych.
Dziki Visual Studio 2008 praca z wyraeniami regularnymi jest nieco atwiejsza. Wszystko
to dziki moduowi Regular Expression Editor. W edytorze umieszczono kilka najczciej uywanych wyrae regularnych, ktre mona zastosowa w kontrolce RegularExpressionValidator.
Aby przej do okna edytora, naley przeczy si na widok Design. Naley si jednoczenie upewni , e kontrolka serwerowa RegularExpressionValidator1 w widoku Design jest
podwietlona i pokazane s jej waciwoci. Teraz, aby uruchomi Regular Expression Editor,
naley w oknie Properties Visual Studio klikn obok waciwoci ValidationExpression.
Edytor pokazany jest na rysunku 4.6.
Korzystajc z tego edytora, mona odnale wyraenia regularne dla takich wartoci, jak na
przykad adresy e-mail, URL, kody pocztowe, numery telefonw, numery ubezpieczeniowe.
Narzdzie Regular Expression Editor pomaga w korzystaniu z tych do czsto skomplikowanych wyrae regularnych. Pokan kolekcj takich wyrae mona znale w internecie.
Na przykad na witrynie RegExLib pod adresem www.regexlib.com.

258

ASP.NET 3.5 z wykorzystaniem C# i VB. Zaawansowane programowanie

Rysunek 4.6

Kontrolka serwerowa CustomValidator


Do tej pory pokazalimy zestaw kontrolek walidacyjnych, ktre mona natychmiast wykorzysta . W wikszoci przypadkw pokazane kontrolki walidacyjne doskonale sprawdzaj si
podczas wprowadzania regu walidacyjnych na formularzach. Czasami jednak adna z tych
kontrolek nie bdzie odpowiednia i trzeba bdzie polega wycznie na tym, co si zrobi
samemu. To wanie do takich zastosowa stworzono kontrolk CustomValidator.
Kontrolka CustomValidator pozwala utworzy wasne algorytmy walidacji, ktre bd stosowane zarwno po stronie klienta, jak i po stronie serwera. Skorzystanie z takiej moliwoci pozwala sprawdzi poprawno wartoci lub oblicze wykonanych w warstwie danych
(na przykad w bazie danych) lub upewni si, czy na wejciu pojawia si liczba speniajca
pewne matematyczne zaoenia (na przykad czy jest parzysta, czy nieparzysta). Wszystko
to mona zrobi dziki kontrolce CustomValidator.

Korzystanie z walidacji po stronie klienta


Jedn z zalet kontrolki CustomValidator wartych uwagi jest moliwo atwego wprowadzenia mechanizmu walidacji po stronie klienta. Wikszo programistw ma swoje wasne
kolekcje funkcji JavaScript, ktre znajduj zastosowanie w ich aplikacjach. Dziki kontrolce
CustomValidator te funkcje mog by szybko i atwo zaimplementowane na stronie.
Przyjrzyjmy si prostemu formularzowi, ktry pobiera od uytkownika liczb. Wykorzystano
w nim kontrolk CustomValidator do wprowadzenia walidacji po stronie klienta. Jej zadaniem
jest sprawdzenie, czy liczba jest podzielna przez 5. Pokazano to na listingu 4.14.
Listing 4.14. Uycie kontrolki CustomValidator do przeprowadzenia walidacji po stronie klienta
VB
<%@ Page Language="VB" %>
<script runat="server">
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Label1.Text = "PRAWID OWA LICZBA!"
End Sub
</script>

Rozdzia 4.

Walidacyjne kontrolki serwerowe

259

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>CustomValidator</title>
<script type="text/javascript">
function validateNumber(oSrc, args) {
args.IsValid = (args.Value % 5 == 0);
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<p>
Liczba:
<asp:TextBox ID="TextBox1"
Runat="server"></asp:TextBox>
&nbsp;
<asp:CustomValidator ID="CustomValidator1"
Runat="server" ControlToValidate="TextBox1"
Text="Liczba musi by
podzielna przez 5"
ClientValidationFunction="validateNumber">
</asp:CustomValidator>
</p>
<p>
<asp:Button ID="Button1" OnClick="Button1_Click"
Runat="server" Text="Button"></asp:Button>
</p>
<p>
<asp:Label ID="Label1" Runat="server"></asp:Label>
</p>
</div>
</form>
</body>
</html>
C#
<%@ Page Language="C#" %>
<script runat="server">
protected void Button1_Click(Object sender, EventArgs e) {
Label1.Text = "PRAWID OWA LICZBA!";
}
</script>

W pokazanym formularzu mona zauway kilka rzeczy. Po pierwsze, jest to prosty formularz;
zawiera tylko jedno pole tekstowe, w ktrym uytkownik moe wprowadzi dane. Uytkownik naciska przycisk i wywoywana jest procedura obsugi zdarzenia Button1_Click,
ktra uzupenia na stronie zawarto kontrolki Label1. Caa ta operacja wykonywana jest
tylko wtedy, gdy na stronie wykonany zostanie proces walidacji, a dane wejciowe przejd
wszystkie testy.

260

ASP.NET 3.5 z wykorzystaniem C# i VB. Zaawansowane programowanie


Jedyn rzecz, ktra wyrnia t stron spord innych tego typu, jest obecno drugiego
bloku <script> w sekcji <head>. To wasny kod JavaScript. Naley zauway , e Visual
Studio 2008 umoliwia stosowanie tego typu konstrukcji. Dziaa to nawet wtedy, gdy zachodzi potrzeba przeczania si pomidzy widokami Design oraz Source to co, z czym
kiepsko radziy sobie poprzednie wersje Visual Studio. Funkcja validateNumber napisana
w JavaScript pokazana jest poniej:
<script type="text/javascript">
function validateNumber(oSrc, args) {
args.IsValid = (args.Value % 5 == 0);
}
</script>

Druga sekcja <script> jest kodem JavaScript uywanym w kontrolce CustomValidator


i jest wywoywana podczas przeprowadzania procesu sprawdzania poprawnoci danych
wpisanych w polu edycji. Wstawiane funkcje JavaScript uywaj waciwoci args.IsValid
i ustawiaj j na True lub False, w zalenoci od wyniku przeprowadzonych testw sprawdzajcych. W tym przypadku warto wprowadzona przez uytkownika (args.Value) jest
sprawdzana pod ktem podzielnoci przez 5. Zwrcona warto logiczna przypisywana jest
do waciwoci args.IsValid, ktra na ostatnim etapie tego procesu uywana jest przez
kontrolk CustomValidator.
Kontrolka CustomValidator, tak jak inne kontrolki przedstawione wczeniej, korzysta
z waciwoci ControlToValidate. Za pomoc tej waciwoci kontrolka moe by powizana
z okrelonym elementem strony. Waciwoci, ktr naley si w tym przypadku zainteresowa , jest ClientValidationFunction. Warto w postaci acucha znakw przypisywana do
tej funkcji okrela funkcj po stronie klienta, ktra ma by wywoana w momencie sprawdzania
formularza przez kontrolk CustomValidator. W tym przypadku jest to validateNumber:
ClientValidationFunction="validateNumber"

Po uruchomieniu strony i wprowadzeniu nieprawidowego wpisu mona otrzyma wynik


pokazany na rysunku 4.7.

Rysunek 4.7

Tworzc wasne procedury walidacji po stronie serwera, mona stworzy tak zaawansowane
algorytmy, jakie s tylko aplikacji potrzebne. Uycie walidacji po stronie serwera moe si
przyda wtedy, gdy zachodzi potrzeba sprawdzenia danych wprowadzonych przez uytkownika

Rozdzia 4.

Walidacyjne kontrolki serwerowe

261

i porwnania ich z dynamicznymi wartociami pochodzcymi z plikw XML, baz danych


lub innego rda.
Jako przykad wasnej walidacji po stronie serwera za pomoc kontrolki CustomValidator
moe posuy jej odpowiednik po stronie klienta. Zrbmy to samo. Stwrzmy procedur
walidujc po stronie serwera, ktra sprawdza podzielno liczby przez 5. Pokazano to na
listingu 4.15.
Listing 4.15. Wykorzystanie kontrolki CustomValidator do przeprowadzenia walidacji po stronie serwera
VB
<%@ Page Language="VB" %>
<script runat="server">
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
If Page.IsValid Then
Label1.Text = "PRAWID OWY WPIS!"
End If
End Sub
Sub ValidateNumber(sender As Object, args As ServerValidateEventArgs)
Try
Dim num As Integer = Integer.Parse(args.Value)
args.IsValid = ((num mod 5) = 0)
Catch ex As Exception
args.IsValid = False
End Try
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>CustomValidator</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<p>
Liczba:
<asp:TextBox ID="TextBox1"
Runat="server"></asp:TextBox>
&nbsp;
<asp:CustomValidator ID="CustomValidator1"
Runat="server" ControlToValidate="TextBox1"
Text="Liczba musi by
podzielna przez 5"
OnServerValidate="ValidateNumber"></asp:CustomValidator>
</p>
<p>
<asp:Button ID="Button1" OnClick="Button1_Click"
Runat="server" Text="Przycisk"></asp:Button>
</p>
<p>
<asp:Label ID="Label1" Runat="server"></asp:Label>
</p>
</div>
</form>

262

ASP.NET 3.5 z wykorzystaniem C# i VB. Zaawansowane programowanie


</body>
</html>
C#
<%@ Page Language="C#" %>
<script runat="server">
protected void Button1_Click(Object sender, EventArgs e) {
if (Page.IsValid) {
Label1.Text = "PRAWID OWY WPIS!";
}
}
void ValidateNumber(object source, ServerValidateEventArgs args)
{
try
{
int num = int.Parse(args.Value);
args.IsValid = ((num%5) == 0);
}
catch(Exception ex)
{
args.IsValid = false;
}
}
</script>

Zamiast umieszcza w kodzie funkcj JavaScript, w tym przykadzie wykorzystano funkcj


po stronie serwera ValidateNumber. Funkcja ValidateNumber, tak jak wszystkie funkcje
przystosowane do pracy z kontrolk CustomValidator, musi jako parametr przyjmowa
obiekt ServerValidateEventArgs. Dziki temu do funkcji sprawdzajcej zostan przekazane
waciwe dane. Funkcja ValidateNumber nie robi niczego ciekawego. Po prostu sprawdza,
czy liczba jest podzielna przez 5.
Wewntrz wasnej funkcji, ktra zostaa zaprojektowana do pracy z kontrolk CustomValidator,
otrzymujemy warto pochodzc z elementu formularza poprzez obiekt args.Value. Ustawiamy potem waciwo args.IsValid na True lub False, w zalenoci od wynikw procedury sprawdzajcej. W przykadzie mona zauway , e args.IsValid ustawiane jest na
False wtedy, gdy liczba nie jest podzielna przez 5, i wtedy, gdy wyrzucony zostanie wyjtek
(moe on zosta wygenerowany wtedy, gdy zamiast liczby z elementu formularza otrzymamy
jaki tekst). Po utworzeniu wasnej funkcji walidujcej naley przej do kolejnego kroku.
Wstawmy zatem kontrolk CustomValidator na stron, jak pokazano na poniszym listingu:
<asp:CustomValidator ID="CustomValidator1"
Runat="server" ControlToValidate="TextBox1"
Text="Liczba musi by
podzielna przez 5"
OnServerValidate="ValidateNumber"></asp:CustomValidator>

Aby skojarzy kontrolk CustomValidator z funkcj umieszczon w kodzie po stronie serwera,


korzysta si z atrybutu OnServerValidate. Wartoci przypisywan do tej waciwoci jest
nazwa funkcji w tym przypadku jest to ValidateNumber.

Rozdzia 4.

Walidacyjne kontrolki serwerowe

263

Wykonanie kodu z tego przykadu spowoduje wysanie strony z powrotem na serwer i tam
zostanie wykonana walidacja (dziki funkcji ValidateNumber). Potem strona jest przeadowywana i wywoywane jest zdarzenie Page_Load. Na listingu 4.15 mona zauway , e
sprawdzana jest warto okrelajca, czy strona jest prawidowa. Wykonywane jest to za
pomoc waciwoci Page.IsValid:
If Page.IsValid Then
Label1.Text = "PRAWID OWY WPIS!"
End If

Jednoczesne uycie walidacji po stronie serwera i po stronie klienta


Jak ju zostao wczeniej wspomniane, naley pomyle o bezpieczestwie formularzy
i zadba o to, aby zbierane przez formularz dane byy prawidowe. Z tego powodu, decydujc si na walidacj po stronie klienta (pokazano to na listingu 4.14), naley jednoczenie
przerobi funkcje dziaajce po stronie klienta na ich odpowiedniki po stronie serwera. Po
wykonaniu tego kroku powinno si skojarzy funkcje po stronie klienta i po stronie serwera
z kontrolk CustomValidator. W przypadku stosowania algorytmu walidujcego z listingu 4.14
i listingu 4.15 mona uy na stronie dwch funkcji walidacyjnych i tak zmodyfikowa kontrolk CustomValidator, aby wskazywaa na obie te funkcje. Pokazano to na listingu 4.16.
Listing 4.16. Kontrolka CustomValidator z walidacj po stronie klienta i po stronie serwera
<asp:CustomValidator ID="CustomValidator1"
Runat="server" ControlToValidate="TextBox1"
Text="Liczba musi by
podzielna przez 5"
ClientValidationFunction="validateNumber"
OnServerValidate="ValidateNumber"></asp:CustomValidator>

Jak wida na zaprezentowanym przykadzie, nie ma adnego problemu zwizanego z jednoczesnym uyciem atrybutw ClientValidationFunction oraz OnServerValidate.

Kontrolka serwerowa ValidationSummary


Kontrolka ValidationSummary nie jest kontrolk, ktra przeprowadza jakiego rodzaju testy
sprawdzajce poprawno danych wpisanych na formularzu. Jest to kontrolka typowo raportujca, ktra jest wykorzystywana przez inne kontrolki walidacyjne na stronie. Kontrolka walidacyjna ValidationSummary moe by uyta do zebrania wszystkich zgoszonych
bdw walidacyjnych na stronie i moe stanowi alternatyw wywietlania bdw przez
kad kontrolk walidacyjn indywidualnie.
Taka moliwo moe by wykorzystana na wikszych formularzach, ktre wykorzystuj
peny proces walidacji. W takim przypadku rozwizaniem bardziej przyjaznym dla uytkownika moe by umieszczenie wszystkich zgoszonych bdw w sposb jednolity i atwy
do ogarnicia. Takie komunikaty o bdach mog by wywietlone za pomoc listy, listy
wypunktowanej lub paragrafu.
Domylnie kontrolka ValidationSummary pokazuje list zgoszonych bdw walidacji w postaci listy wypunktowanej. Pokazano to na listingu 4.17.

264

ASP.NET 3.5 z wykorzystaniem C# i VB. Zaawansowane programowanie

Listing 4.17. Przykad fragmentu strony korzystajcej z kontrolki ValidationSummary


<p>Imi
<asp:TextBox ID="TextBox1" Runat="server"></asp:TextBox>
&nbsp;
<asp:RequiredFieldValidator ID="RequiredFieldValidator1"
Runat="server" ErrorMessage="Musisz wpisa
swoje imi "
ControlToValidate="TextBox1"></asp:RequiredFieldValidator>
</p>
<p>Nazwisko
<asp:TextBox ID="TextBox2" Runat="server"></asp:TextBox>
&nbsp;
<asp:RequiredFieldValidator ID="RequiredFieldValidator2"
Runat="server" ErrorMessage="Musisz wpisa
swoje nazwisko"
ControlToValidate="TextBox2"></asp:RequiredFieldValidator>
</p>
<p>
<asp:Button ID="Button1" OnClick="Button1_Click" Runat="server"
Text="Zatwierd"></asp:Button>
</p>
<p>
<asp:ValidationSummary ID="ValidationSummary1" Runat="server"
HeaderText="Otrzymae nast pujce b dy:">
</asp:ValidationSummary>
</p>
<p>
<asp:Label ID="Label1" Runat="server"></asp:Label>
</p>

Zadaniem przykadowego kodu jest pobranie imienia i nazwiska uytkownika. Kade pole
tekstowe na formularzu ma powizan ze sob kontrolk RequiredFieldValidator. Po zbudowaniu i uruchomieniu strony oraz naciniciu przez uytkownika przycisku Zatwierd
bez wpisywania w pola edycji adnych wartoci powstan dwa bdy. Wynik dziaania
aplikacji pokazany jest na rysunku 4.8.

Rysunek 4.8

Rozdzia 4.

Walidacyjne kontrolki serwerowe

265

We wczeniejszych przykadach walidacji kontrolek na formularzu bdy pojawiaj si


obok kadego z pl tekstowych. Mona jednak zauway , e kontrolka ValidationSummary
pokazuje bdy walidacyjne w postaci czerwonej listy wypunktowanej w miejscu, w ktrym ta kontrolka si znajduje. W wikszoci przypadkw nie ma potrzeby wywietlania
tych samych bdw na stronie dwukrotnie. Mona zmieni to zachowanie, korzystajc nie
tylko z waciwoci ErrorMessage, ale take z waciwoci Text kontrolek walidacyjnych,
tak jak byo to wykonywane w tym rozdziale do tej pory. Zaprezentowane podejcie pokazano na listingu 4.18.
Listing 4.18. Wykorzystanie waciwoci Text kontrolki walidacyjnej
<asp:RequiredFieldValidator ID="RequiredFieldValidator1"
Runat="server" ErrorMessage="Musisz wpisa
swoje imi " Text="*"
ControlToValidate="TextBox1"></asp:RequiredFieldValidator>

lub
<asp:RequiredFieldValidator ID="RequiredFieldValidator1"
Runat="server" ErrorMessage="Musisz wpisa
swoje imi "
ControlToValidate="TextBox1">*</asp:RequiredFieldValidator>

Na listingu 4.18 pokazano dwa sposoby wykonania tego samego zadania. Pierwszy z nich
polega na uyciu waciwoci Text. Drugi polega na umieszczeniu wartoci pomidzy
znacznikami elementu <asp:RequiredFieldValidator>. Wprowadzenie do kontrolek walidacyjnych takich zmian spowoduje powstanie wynikw pokazanych na rysunku 4.9.

Rysunek 4.9

Aby otrzyma taki wynik, naley pamita , e kontrolka ValidationSummary w celu wywietlenia bdw walidacji korzysta z waciwoci ErrorMessage. Waciwo Text jest
uywana przez kontrolki walidacyjne i nie jest w aden sposb przetwarzana przez kontrolk
ValidationSummary.

266

ASP.NET 3.5 z wykorzystaniem C# i VB. Zaawansowane programowanie


Oprcz list wypunktowanych mona stosowa inne formaty wywietlania wynikw. Zmian
mona dokona za pomoc waciwoci DisplayMode. Kontrolka moe przyjmowa nastpujce wartoci:
Q

BulletList,

List,

SingleParagraph.

Zamiast wywietla wyniki na stronie, mona take wykorzysta okno dialogowe. Na listingu 4.19 pokazano przykad takiego podejcia.
Listing 4.19. Wykorzystanie okna dialogowego do raportowania bdw walidacji
<asp:ValidationSummary ID="ValidationSummary1" Runat="server"
ShowMessageBox="True" ShowSummary="False"></asp:ValidationSummary>

W pokazanym przykadzie waciwo ShowSummary ustawiona jest na False, co oznacza, e


bdy walidacyjne nie bd wywietlane na stronie. Jednak w zwizku z tym, e waciwo ShowMessageBox ustawiona jest na True, wszystkie bdy walidacji bd wywietlone
w oknie dialogowym. Pokazano to na rysunku 4.10.

Rysunek 4.10

Wyczanie walidacji po stronie klienta


Walidacyjne kontrolki serwerowe automatycznie przeprowadzaj walidacj po stronie klienta
(jeeli aplikacja wysyajca danie potrafi poprawnie przetworzy utworzony kod JavaScript).
Czasami jednak zachodzi konieczno przejcia kontroli nad tego typu zachowaniem.
Mona wyczy walidacj tych kontrolek po stronie klienta w taki sposb, aby nie wysyay one do aplikacji dajcych adnych funkcji walidujcych. Takie podejcie umoliwia
przeprowadzanie wycznie walidacji po stronie serwera, bez wzgldu na rzeczywiste moliwoci kontrolek walidacyjnych. Istnieje kilka moliwoci wyczenia tego typu funkcjonalnoci.

Rozdzia 4.

Walidacyjne kontrolki serwerowe

267

Pierwszy sposb moe by zrealizowany na poziomie kontrolki. Kada z walidacyjnych


kontrolek serwerowych posiada waciwo o nazwie EnableClientScript. Waciwo jest
domylnie ustawiona na True. Ustawienie waciwoci na False blokuje wysyanie funkcji
JavaScript na stron klienta. Zamiast tego walidacja przeprowadzana jest na serwerze.
Przykad uycia tej waciwoci pokazany jest na listingu 4.20.
Listing 4.20. Zablokowanie w kontrolce walidacyjnej walidacji po stronie klienta
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" Runat="server"
Text="*" ControlToValidate="TextBox1" EnableClientScript="false">

Mona take zablokowa walidacj po stronie klienta programowo. Pokazano to na listingu 4.21.
Listing 4.21. Programowe blokowanie walidacji po stronie klienta
VB
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
RequiredFieldValidator1.EnableClientScript = False
End Sub
C#
protected void Page_Load(object sender, EventArgs e)
RequiredFieldValidator1.EnableClientScript = false;
End Sub

Kolejn opcj jest wyczenie walidacji na kliencie dla wszystkich kontrolek na stronie
w zdarzeniu Page_Load. Moe to by przydatne wtedy, gdy trzeba dynamicznie zadecydowa o zezwoleniu na walidacj po stronie klienta lub o jej zablokowaniu. Pokazano to na
listingu 4.22.
Listing 4.22. Blokowanie walidacji po stronie klienta dla wszystkich kontrolek w zdarzeniu Page_Load
VB
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
For Each bv As BaseValidator In Page.Validators
bv.EnableClientScript = False
Next
End Sub
C#
protected void Page_Load(object sender, EventArgs e) {
foreach(BaseValidator bv in Page.Validators)
{
bv.EnableClientScript = false;
}
}

Instrukcja For Each przegldajca kad instancj klasy BaseValidator w skadowej Validators
strony ASP.NET moe wyczy walidacj po stronie klienta wszystkich kontrolek, ktre
zostay umieszczone na tej stronie.

268

ASP.NET 3.5 z wykorzystaniem C# i VB. Zaawansowane programowanie

Korzystanie z obrazkw i d
wikw
w powiadomieniach o bdach
Do tej pory wywietlalimy proste wiadomoci tekstowe, ktre informoway o pojawieniu
si bdw w walidacyjnych kontrolkach serwerowych. W wikszoci przypadkw takie
rozwizanie jest wystarczajce prosty komunikat tekstowy informuje uytkownika kocowego o tym, e wprowadzi do formularza jak nieprawidow warto , ktra nie spenia
naoonych wymaga.
Interesujc wskazwk jest to, e nie trzeba wcale uywa tekstu w celu powiadomienia
uytkownika mona take uywa dwikw i obrazkw.
W tym celu korzysta si z waciwoci Text, ktra jest dostpna w kadej kontrolce walidacyjnej. Aby do zasygnalizowania bdu uy obrazka, mona po prostu przypisa do waciwoci waciwy kod HTML. Pokazano to na listingu 4.23.
Listing 4.23. Uywanie obrazkw do powiadomienia o bdach
<asp:RequiredFieldValidator ID="RequiredFieldValidator1"
Runat="server" Text='<img src="error.gif">'
ControlToValidate="TextBox1"></asp:RequiredFieldValidator>

Jak mona zauway na przykadzie, zamiast wywietla tekst na stronie, do waciwoci


przypisywany jest tekst HTML. Ten fragment tekstu HTML uywany jest do wywietlenia
obrazka. Naley zwrci szczegln uwag na obecno cudzysoww pojedynczych i podwjnych. W ten sposb po wygenerowaniu strony w przegldarce nie pojawi si adne
bdy. Kod pokazany na listingu 4.23 spowoduje wygenerowanie strony podobnej do tej
z rysunku 4.11.

Rysunek 4.11

Kolejnym interesujcym rozwizaniem jest moliwo dodania do strony powiadomienia


dwikowego, ktre bdzie uywane przy bdach. Mona to zrobi w taki sam sposb, jaki
zosta wykorzystany przy powiadomieniu obrazkowym. Na listingu 4.24 pokazano przykad.

Rozdzia 4.

Walidacyjne kontrolki serwerowe

269

Listing 4.24. Wykorzystanie d wiku do powiadomienia o bdach


<asp:RequiredFieldValidator ID="RequiredFieldValidator1"
Runat="server" Text='<bgsound src="C:\Windows\Media\tada.wav">'
ControlToValidate="TextBox1" EnableClientScript="False">
</asp:RequiredFieldValidator>

Duo rnych dwikw systemu Windows mona znale w katalogu C:\Windows\Media.


W tym przykadzie waciwo Text przyjmuje warto elementu <bgsound>. Zadaniem
tego elementu jest umieszczenie na formularzu dwiku (dziaa tylko z Internet Explorer).
Dwik odgrywany jest tylko w momencie wywoania przez uytkownika kontrolki walidacyjnej.
Pracujc z powiadomieniami dwikowymi, trzeba zablokowa skrypty po stronie klienta.
Jeeli si tego nie zrobi, wtedy dwik zostanie odegrany ju w momencie wczytania strony
w przegldarce, bez wzgldu na to, czy pojawi si jaki bd.

Praca z grupami walidacyjnymi


W wikszoci przypadkw programici umieszczali na jednej stronie wiksz ilo formularzy. W ASP.NET 1.0/1.1 byo to moliwe, poniewa kliknicia rnych przyciskw mogy
wywoywa rne zdarzenia. Korzystajc z takiego rozwizania, mona si byo narazi na
pewne problemy.
Jeden z tych problemw polega na tym, e pojawiay si pewne trudnoci z posiadaniem
walidacji dla wszystkich kontrolek na kadym formularzu strony. Rne kontrolki walidacyjne byy czsto przypisywane do dwch rnych formularzy na stronie. Gdy uytkownik
zatwierdza jeden z formularzy, wtedy uruchamiane byy procedury walidacyjne na drugim
formularzu (poniewa uytkownik nie pracowa z tym formularzem). Bdy na drugiej
stronie mog wic zablokowa zatwierdzenie pierwszego formularza.
Na rysunku 4.12 pokazano przykadow stron grupy uytkownikw ASP.NET, ktra zawiera
dwa formularze.
Jeden formularz jest przeznaczony dla czonkw grupy. Za jego pomoc podaje si nazw
uytkownika i haso, ktre s potrzebne do wejcia do strefy tylko dla czonkw. Drugi
formularz na stronie jest przeznaczony dla wszystkich uytkownikw i pozwala zapisa si
do newslettera. Kady z formularzy posiada swj przycisk i zwizane z nim kontrolki walidacyjne. Problem pojawia si wtedy, gdy kto przesya informacje za pomoc jednego formularza. Przypu my, e mamy do czynienia z czonkiem grupy, ktry wpisuje nazw
uytkownika, haso i naciska przycisk Zaloguj. Kontrolki walidacyjne dla newslettera mog
zasygnalizowa bd, poniewa w tym formularzu nie uzupeniono adresu e-mail. Jeeli
kto jest zainteresowany korzystaniem z newslettera, wtedy umieszcza tylko adres e-mail
w ostatnim polu i naciska przycisk Zapisz si. Kontrolka walidacyjna z pierwszego formularza sygnalizuje bd, poniewa nie wprowadzono nazwy uytkownika i hasa do pierwszego formularza.

270

ASP.NET 3.5 z wykorzystaniem C# i VB. Zaawansowane programowanie

Rysunek 4.12

W ASP.NET 3.5 pojawia si waciwo ValidationGroup, ktra pozwala podzieli kontrolki walidacyjne na kilka niezalenych grup. W momencie nacinicia przycisku na stronie pozwala ona aktywowa tylko okrelone kontrolki walidacyjne. Na listingu 4.25 pokazano przykad podzielenia kontrolek walidacyjnych na stronie grupy uytkownikw na dwie
rne grupy.
Listing 4.25. Korzystanie z waciwoci ValidationGroup
<%@ Page Language="VB" %>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Grupy walidacji</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<h1>Grupa uytkownikw ASP.NET</h1>
<p>Nazwa uytkownika:
<asp:TextBox ID="TextBox1" Runat="server"></asp:TextBox>&nbsp; Haso:
<asp:TextBox ID="TextBox2" Runat="server"
TextMode="Password"></asp:TextBox>&nbsp;
<asp:Button ID="Button1" Runat="server" Text="Zaloguj"
ValidationGroup="Login" />
<br />
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" Runat="server"
Text="* Musisz wpisa
nazw uytkownika!"

Rozdzia 4.

Walidacyjne kontrolki serwerowe

271

ControlToValidate="TextBox1" ValidationGroup="Login">
</asp:RequiredFieldValidator>
<br />
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" Runat="server"
Text="* Musisz wpisa
haso!"
ControlToValidate="TextBox2" ValidationGroup="Login">
</asp:RequiredFieldValidator>
<p>
Nasze gwne spotkania odbywaj si najcz ciej w ostatni poniedziaek
miesica. Czasami, ze wzgl du na wakacje lub inne wane okolicznoci
przekadamy spotkania na inne dni, ale rzadko si to zdarza. Aby uzyska

wi cej informacji na ten temat, sprawd nasz stron gwn. Grupy zajmujce
si innymi zagadnieniami spotykaj si w inne dni miesica. Sprawd stron
SIG w celu uzyskania dodatkowych informacji. Moesz take przejrze
nasz
kalendarz. Tam dowiesz si o najwaniejszych wydarzeniach.<br />
</p>
<h2>Zapisz si na newsletter!</h2>
<p>E-mail:
<asp:TextBox ID="TextBox3" Runat="server"></asp:TextBox>&nbsp;
<asp:Button ID="Button2" Runat="server" Text="Zapisz si "
ValidationGroup="Newsletter" />&nbsp;
<br />
<asp:RegularExpressionValidator ID="RegularExpressionValidator1"
Runat="server"
Text="* Musisz wpisa
waciwy adres e-mail!"
ControlToValidate="TextBox3" ValidationGroup="Newsletter"
ValidationExpression="\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*">
</asp:RegularExpressionValidator>
<br />
<asp:RequiredFieldValidator ID="RequiredFieldValidator3" Runat="server"
Text="* Zapomniae o adresie e-mail!"
ControlToValidate="TextBox3" ValidationGroup="Newsletter">
</asp:RequiredFieldValidator>
</p>
</div>
</form>
</body>
</html>

Waciwo ValidationGroup na przykadzie zostaa pogrubiona. Mona zauway , e


wartoci waciwoci jest acuch znakw. Warto take zwrci uwag na to, e nie tylko
kontrolki walidacyjne posiadaj t waciwo . Kluczowe kontrolki serwerowe take maj
waciwo ValidationGroup, poniewa zdarzenia takie jak kliknicia mysz take musz
by powizane z okrelon grup walidacyjn.
W pokazanym przykadzie kady z przyciskw przypisany jest do innej grupy walidacyjnej.
Pierwszy przycisk jako wartoci uywa Login, drugi z nich uywa wartoci Newsletter.
Kada z kontrolek walidacyjnych take powizana jest z okrelon grup walidacyjn.
Dziki takiemu rozrnieniu, jeeli uytkownik kliknie na stronie przycisk Zaloguj,
ASP.NET jest w stanie rozpozna grup. Konsekwencj jest to, e przycisk pracuje wycznie
z walidacyjnymi kontrolkami serwerowymi nalecymi do tej samej grupy. ASP.NET ignoruje
walidacyjne kontrolki przypisane do innych grup walidacyjnych.

272

ASP.NET 3.5 z wykorzystaniem C# i VB. Zaawansowane programowanie


Korzystajc z tego udogodnienia, mona zastosowa wiele grup z reguami walidacyjnymi,
ktre bd wywoywane tylko wtedy, gdy chcemy. Pokazano to na rysunku 4.13.

Rysunek 4.13

Kolejnym udogodnieniem dodanym do kontrolek walidacyjnych jest waciwo SetFocusOnError.


Waciwo pobiera warto typu logicznego. Jeeli podczas zatwierdzania formularza sygnalizowany jest bd, wtedy waciwo umieszcza fokus na elemencie, ktry ten bd zawiera. Waciwo SetFocusOnError pokazana jest na poniszym listingu:
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" Runat="server"
Text="* Musisz wpisa
nazw uytkownika!"
ControlToValidate="TextBox1" ValidationGroup="Login" SetFocusOnError="true">
</asp:RequiredFieldValidator>

Jeeli RequiredFieldValidator1 zasygnalizuje bd, poniewa uytkownik nie wstawi adnej wartoci w polu TextBox1, wtedy strona jest odrysowywana z fokusem ustawionym na
kontrolce TextBox1. Pokazano to na rysunku 4.14.
Naley take zwrci uwag na to, e wiele kontrolek walidacyjnych moe zawiera ustawion na True waciwo SetFocusOnError. Jeeli w takim przypadku wystpi wicej bdw
walidacji, wtedy fokus otrzyma pierwszy element formularza. Jako przykad wemy pokazany formularz. Jeeli zarwno pole tekstowe z nazw uytkownika (TextBox1), jak i pole
tekstowe z hasem (TextBox2) zawieraj bdy walidacji, wtedy fokus zostanie ustawiony na
polu tekstowym z nazw uytkownika. Jest to bowiem pierwsza kontrolka tego formularza
z bdem.

Rozdzia 4.

Walidacyjne kontrolki serwerowe

273

Rysunek 4.14

Podsumowanie
Kontrolki walidacyjne s miym dodatkiem dla tych programistw, ktrzy przenosz si
z Active Server Pages na ASP.NET. Skrywaj one wielkie moliwoci pod postaci atwej
w uyciu paczki i tak jak wiele rzeczy w wiecie .NET mog by w prosty sposb dostosowywane. Dziki temu bd dziaay dokadnie tak, jak sobie tego zayczymy.
Naley pamita , e celem formularzy jest zbieranie danych. Takie zbieranie danych nie
ma jednak wikszego sensu, gdy dane s nieprawidowe. Oznacza to, e trzeba zastosowa
pewne reguy sprawdzania poprawnoci danych, ktre bd implementowane na formularzach za pomoc zestawu rnych kontrolek walidacyjnych kontrolek serwerowych.
W niniejszym rozdziale omwiono rne walidacyjne kontrolki, wczajc w to:
Q

RequiredFieldValidator,

CompareValidator,

RangeValidator,

RegularExpressionValidator,

274

ASP.NET 3.5 z wykorzystaniem C# i VB. Zaawansowane programowanie


Q

RegularExpressionValidator,

CustomValidator,

ValidationSummary.

Oprcz zaprezentowania podstawowych kontrolek walidacyjnych w rozdziale poruszono


take zagadnienia zwizane ze stosowaniem walidacji po stronie klienta i walidacji po stronie serwera.

You might also like