ASP.NET 3.5
z wykorzystaniem C# i VB.
Zaawansowane programowanie
Autor: Bill Evjen, Scott Hanselman, Devin Rader
T³umaczenie: Pawe³ Dyl, Marek Pa³czyñski
ISBN: 978-83-246-1852-1
Tytu³ orygina³u:
Professional ASP.NET 3.5: in C# and VB
Format: 172x245 , stron: 1792
Oprawa: twarda
Kompletne Ÿród³o 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 rosn¹c¹ popularnoœæ aplikacji internetowych.
Jest on czêœci¹ technologii .NET oraz bezpoœrednim nastêpc¹ rozwi¹zania ASP, dostêpnym na
rynku od stycznia 2002 roku. Od tego czasu ASP.NET zdobywa sobie coraz wiêksz¹ popularnoœæ.
Teraz dziêki wykorzystaniu technologii .NET mo¿esz projektowaæ dynamiczne strony, korzystaj¹c
z dowolnego jêzyka obs³uguj¹cego to rozwi¹zanie.
Dziêki tej ksi¹¿ce dowiesz siê, jak to robiæ przy u¿yciu jêzyków C# i Visual Basic. Jednak zanim
napiszesz pierwsz¹ liniê kodu, warto poznaæ nowe œrodowisko pracy,tak aby tworzenie stron
przebiega³o szybko, wygodnie i bezproblemowo. W kolejnych rozdzia³ach zdobêdziesz wiedzê
na temat dostêpnych kontrolek, metod pracy ze stronami wzorcowymi oraz sposobów
stosowania kompozycji i skórek. Ponadto nauczysz siê wykorzystywaæ Ÿród³a danych
oraz zarz¹dzaæ informacjami przy u¿yciu ADO.NET. Ksi¹¿ka ta sprawdzi siê znakomicie zarówno
w rêkach pocz¹tkuj¹cego, jak i zaawansowanego programisty.
•
Œrodowisko pracy
•
Dyrektywy strony ASP.NET 3.5
•
Obs³uga zdarzeñ
•
Wykorzystanie kontrolek serwerowych
•
Wykonywanie skryptów po stronie klienta
•
Walidacja danych
•
Zastosowanie kompozycji i skórek
•
Źród³a danych
•
Zarz¹dzanie danymi przy u¿yciu ADO.NET
•
Tworzenie zapytañ z wykorzystaniem LINQ
•
Konfiguracja i uruchomienie us³ugi IIS7
•
Model dostawców
•
Platformy portalowe
•
Wsparcie dla HTML i CSS
•
Wykorzystanie technologii AJAX
•
Bezpieczeñstwo aplikacji internetowych w ASP.NET
•
Obs³uga sytuacji wyj¹tkowych
•
Debugowanie kodu
•
Wykorzystanie plików i strumieni
•
Obs³uga ¿¹dañ HTTP
•
Mo¿liwoœci Silverlight
Twórz dynamiczne rozwi¹zania, korzystaj¹c 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
4
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 wspólnych waciwoci kontrolek .............................................................. 117
Zmiana stylu za pomoc kaskadowych arkuszy stylów .............................................. 118
Kontrolki serwerowe HTML .......................................................................................... 122
Omówienie klasy bazowej HtmlControl .................................................................... 125
Omówienie klasy HtmlContainerControl ................................................................... 126
Omówienie 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
Porównanie 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, które wspópracuj z JavaScript po stronie klienta ..................................... 162
Kontrolka serwerowa LinkButton .................................................................................. 164
Kontrolka serwerowa ImageButton ............................................................................... 164
Kontrolka serwerowa HyperLink ................................................................................... 166
Kontrolka serwerowa DropDownList ............................................................................. 166
Wizualne usuwanie elementów z kolekcji ...................................................................... 169
Spis
treci
5
Kontrolka serwerowa ListBox ...................................................................................... 171
Umoliwienie wyboru kilku pozycji ........................................................................... 171
Przykad uycia kontrolki ListBox ............................................................................ 171
Dodawanie elementów do kolekcji .......................................................................... 174
Kontrolka serwerowa CheckBox ................................................................................... 174
W jaki sposób sprawdzi, czy pole wyboru jest zaznaczone ....................................... 175
Przypisanie wartoci do pola wyboru ....................................................................... 176
Wyrównywanie 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
Wybór 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 plików za pomoc kontrolki FileUpload ................................................... 209
Nadawanie ASP.NET waciwych praw do pobierania plików ...................................... 212
Zrozumienie limitów rozmiaru plików ....................................................................... 214
Wczytywanie wielu plików na tej samej stronie ......................................................... 215
Przekazywanie pobranego pliku do obiektu Stream .................................................. 218
Przenoszenie zawartoci pliku z obiektu Stream do tablicy bajtów ............................. 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 nagówka w kontrolce Wizard ................................................................ 228
Praca z systemem nawigacji kontrolki Wizard .......................................................... 228
Obsuga zdarze kontrolki Wizard ........................................................................... 229
Uycie kontrolki Wizard do pokazania elementów 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
6
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 obrazków i d wików 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 rónych typów stron i jzyków ................................................................... 286
Okrelanie, której 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 skórki ............................................................................................................311
Korzystanie z kompozycji ASP.NET ............................................................................... 311
Przypisywanie kompozycji pojedynczej stronie ASP.NET ............................................ 311
Stosowanie stylów 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 katalogów ................................................................. 317
Tworzenie skórki ................................................................................................... 318
Umieszczanie w kompozycjach plików CSS .............................................................. 320
Wstawianie do kompozycji obrazków ....................................................................... 323
Definiowanie wielu opcji skórek ................................................................................... 326
Programowa praca z kompozycjami .............................................................................. 328
Programowe przypisywanie kompozycji strony .......................................................... 328
Programowe przypisanie waciwoci SkinID kontrolki .............................................. 329
Kompozycje, skórki i wasne kontrolki .......................................................................... 330
Podsumowanie .......................................................................................................... 334
Rozdzia 7. Wizanie danych w ASP.NET 3.5 ........................................................................................ 335
Kontrolki róde danych ............................................................................................... 335
Kontrolka SqlDataSource ....................................................................................... 337
Kontrolka LinqDataSource ..................................................................................... 350
Kontrolka AccessDataSource ................................................................................. 355
Spis
treci
7
Kontrolka XmlDataSource ...................................................................................... 356
Kontrolka ObjctDataSource .................................................................................... 357
Kontrolka SiteMapDataSource ............................................................................... 362
Konfiguracja buforowania kontrolki róda danych ......................................................... 362
Przechowywanie informacji o poczeniu ....................................................................... 363
Uycie kontrolek list umoliwiajcych wizanie z kontrolkami róde 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 parametrów ...................................................................................... 440
Opis obiektów DataSet oraz DataTable ................................................................... 443
Typowany DataSet ................................................................................................ 448
Korzystanie z bazy danych Oracle i ASP.NET ............................................................ 449
Kontrolka serwerowa DataList ..................................................................................... 451
Przegld dostpnych wzorców ................................................................................ 452
Praca z ItemTemplate ............................................................................................ 452
Praca z innymi wzorcami ukadów graficznych .......................................................... 455
Praca z wieloma kolumnami ................................................................................... 457
Kontrolka serwerowa ListView ..................................................................................... 458
Przegld dostpnych wzorców ................................................................................ 458
Korzystanie ze wzorców ......................................................................................... 459
Tworzenie wzorca ukadu graficznego ...................................................................... 461
Tworzenie ItemTemplate ........................................................................................ 462
Tworzenie EditItemTemplate .................................................................................. 463
8
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 ródem 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 plików XML oraz schematów 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 typów .NET CLR z dokumentów XML ....................................................... 562
ReadSubtree oraz XmlSerialization ......................................................................... 564
Tworzenie obiektów CLR z dokumentów XML za pomoc LINQ to XML ....................... 566
Tworzenie XML za pomoc XmlWriter ...................................................................... 567
Tworzenie XML za pomoc LINQ to XML .................................................................. 569
Udoskonalenia obiektów XmlReader oraz XmlWriter w wersji 2.0 ............................... 572
XmlDocument oraz XPathDocument ............................................................................. 573
Problemy z DOM ................................................................................................... 573
XPath, XPathDocument oraz XmlDocument .............................................................. 574
Spis
treci
9
Obiekty DataSet ......................................................................................................... 578
Zapisywanie obiektów 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 pakietów 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 dostawców ............................................................................ 639
Zrozumienie modelu dostawców .................................................................................. 640
Model dostawców w ASP.NET 3.5 ................................................................................ 641
Ustawianie dostawcy, aby wspópracowa z Microsoft SQL Server 7.0, 2000, 2005
lub 2008 ........................................................................................................... 643
Dostawcy czonkostwa ........................................................................................... 649
Dostawcy ról ......................................................................................................... 653
Dostawca personalizacji ........................................................................................ 658
Dostawca SiteMap ................................................................................................ 659
Dostawcy SessionState ......................................................................................... 661
Dostawcy WebEvent .............................................................................................. 664
Dostawcy konfiguracji ............................................................................................ 672
Dostawca WebParts .............................................................................................. 675
Konfigurowanie dostawców ......................................................................................... 677
Podsumowanie .......................................................................................................... 678
10
ASP.NET 3.5 z wykorzystaniem C
# i VB. Zaawansowane programowanie
Rozdzia 13. Rozszerzanie modelu dostawców ................................................................................... 679
Dostawcy s jedn warstw w rozbudowanej architekturze ............................................. 679
Modyfikacja programowa z wykorzystaniem atrybutów ................................................... 680
Uatwienie wprowadzania hasa za pomoc SqlMembershipProvider .......................... 681
Nakadanie silnych restrykcji na haso za pomoc SqlMembershipProvider ................ 684
Analiza ProviderBase .................................................................................................. 685
Tworzenie wasnych klas dostawców ............................................................................ 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 dostawców ........................................................................... 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 plików 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 skadników kontrolki TreeView ................................................................... 729
Wizanie kontrolki TreeView z plikiem XML .............................................................. 729
Wybór wielu opcji w kontrolce TreeView ................................................................... 732
Przypisywanie do kontrolki TreeView wasnych ikon .................................................. 736
Uywanie linii w celu poczenia wzów .................................................................. 737
Programistyczna praca z kontrolk TreeView ............................................................ 739
Kontrolka serwerowa Menu ......................................................................................... 745
Przypisywanie do kontrolki Menu rónych stylów ...................................................... 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 plików podzespoów z zasobami (.resx) .................................................... 764
Testowanie wyników .............................................................................................. 765
Spis
treci
11
Security trimming ....................................................................................................... 767
Ustawienie zarzdzania rolami dla administratorów .................................................. 767
Ustawianie sekcji administratorów .......................................................................... 769
Wczanie security trimming ................................................................................... 770
Zagniedanie plików 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 typów waciwoci personalizacji ........................................................ 785
Korzystanie z wasnych typów ................................................................................. 786
Ustawianie wartoci domylnych ............................................................................ 789
Tworzenie waciwoci personalizacji tylko do odczytu .............................................. 789
Personalizacja anonimowa .......................................................................................... 790
Umoliwienie anonimowej identyfikacji uytkowników ............................................... 790
Praca z anonimow identyfikacj ............................................................................ 793
Anonimowe opcje waciwoci personalizacji ........................................................... 794
Uwagi na temat przechowywania profilów anonimowych uytkowników ....................... 795
Programowy dostp do personalizacji ........................................................................... 796
Migracja uytkowników anonimowych ...................................................................... 796
Personalizacja profilów .......................................................................................... 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 dostawców ............................................................................... 804
Zarzdzanie profilami aplikacji ..................................................................................... 804
Waciwoci klasy ProfileManager .......................................................................... 805
Metody klasy ProfileManager ................................................................................. 805
Tworzenie strony ProfileManager.aspx .................................................................... 806
Omówienie 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 uytkowników ...................................................................................... 818
Pobieranie danych uwierzytelniajcych .................................................................... 833
Praca z zarejestrowanymi uytkownikami ................................................................. 841
Pokazywanie liczby uytkowników 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 ról w aplikacji .................................................................... 856
Usuwanie ról ........................................................................................................ 858
Dodawanie uytkowników do ról ............................................................................. 859
Pobieranie wszystkich uytkowników okrelonej roli ................................................. 860
Pobieranie wszystkich ról okrelonego uytkownika .................................................. 862
Usuwanie uytkowników z ról ................................................................................. 863
Sprawdzanie, czy uytkownicy przypisani s do ról ................................................... 863
Wyjanienie sposobu buforowania ról ..................................................................... 865
Korzystanie z Web Site Administration Tool .................................................................. 866
Publiczne metody API czonkostwa ............................................................................... 867
Publiczne metody API ról ............................................................................................. 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
Omówienie 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 obiektów 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
Ogólne informacje na temat HTML oraz CSS ................................................................. 920
Wprowadzenie do CSS ........................................................................................... 921
Tworzenie arkuszy stylów ....................................................................................... 922
Reguy CSS .......................................................................................................... 925
Dziedziczenie CSS ................................................................................................. 933
Ukad i pooenie elementów .................................................................................. 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 plików i katalogów .................................... 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 adresów IP i nazw domenowych ............................................ 1089
Rozszerzenia plików ............................................................................................ 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 dostawców danych ..................................... 1123
Sesje bez plików cookie ...................................................................................... 1124
Wybór 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 krótkookresowych 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 wpisów 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 bdów ...................................................................................... 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 komponentów ............................................................................. 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 bdów ........................................................................................... 1210
Przechwytywanie wyjtku na stronie ...................................................................... 1211
Obsuga wyjtków 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 plików i katalogów, ich atrybuty oraz listy kontroli dostpu ................... 1237
16
ASP.NET 3.5 z wykorzystaniem C
# i VB. Zaawansowane programowanie
Odczyt i zapis plików ................................................................................................. 1244
Strumienie ......................................................................................................... 1245
Obiekty odczytu i zapisu ...................................................................................... 1249
Kompresowanie danych strumieni ........................................................................ 1254
Wykorzystanie portów 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 atrybutów znaczników ......................................................................... 1295
Definicje stylu HTML ............................................................................................ 1297
Motywy tematyczne i skórki .................................................................................. 1300
Dodanie elementów kodu klienckiego ................................................................... 1302
Wykrywanie parametrów 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 adresów 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 obiektów biznesowych w rodowisku ASP.NET 3.5 .................................. 1381
Tworzenie wstpnie skompilowanych obiektów biznesowych platformy .NET ............. 1382
Wykorzystanie wstpnie skompilowanych obiektów biznesowych w aplikacji ASP.NET .. 1385
Wykorzystanie komponentów COM w rodowisku .NET ................................................ 1387
Komponent Runtime Callable Wrapper .................................................................. 1387
Wykorzystanie obiektów COM w kodzie ASP.NET .................................................... 1389
Spis
treci
17
Obsuga bdów .................................................................................................. 1394
Wdraanie komponentów COM w aplikacjach .NET ................................................. 1397
Odwoania do kodu .NET z poziomu kodu niezarzdzanego .......................................... 1399
Modu COM-Callable Wrapper ............................................................................... 1399
Wspódziaanie komponentów .NET z obiektami COM ............................................. 1402
Wczesne czy pó ne wizanie ................................................................................ 1405
Obsuga bdów .................................................................................................. 1406
Wdraanie komponentów .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 zbiorów danych w formie dokumentów 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
Nagówki SOAP ........................................................................................................ 1439
Tworzenie usug sieciowych uwzgldniajcych nagówki SOAP ................................. 1439
Wykorzystanie nagówków 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 zasobów ASP.NET 3.5 ....................................................................................... 1488
Wykorzystanie zasobów lokalnych ......................................................................... 1488
Wykorzystanie zasobów globalnych ....................................................................... 1495
Edytor zasobów ........................................................................................................ 1498
Podsumowanie ........................................................................................................ 1498
18
ASP.NET 3.5 z wykorzystaniem C
# i VB. Zaawansowane programowanie
Rozdzia 31. Konfiguracja .....................................................................................................................1499
Ogólne informacje na temat konfiguracji ..................................................................... 1500
Pliki konfiguracyjne serwera ................................................................................. 1501
Plik konfiguracyjny aplikacji .................................................................................. 1504
W jaki sposób s odczytywane ustawienia konfiguracyjne? ..................................... 1504
Wykrywanie zmian w plikach konfiguracyjnych ........................................................ 1505
Format pliku konfiguracyjnego .............................................................................. 1505
Wspólne ustawienia konfiguracyjne ............................................................................ 1506
Cigi pocze .................................................................................................... 1506
Konfiguracja stanu sesji ...................................................................................... 1508
Konfiguracja kompilacji ........................................................................................ 1512
Parametry przegldarek ....................................................................................... 1515
Niestandardowe komunikaty o bdach ................................................................. 1517
Uwierzytelnianie .................................................................................................. 1518
Identyfikacja uytkowników 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 plików 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 liczników 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 parametrów 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
Szczegóowa analiza opcji instalatora ......................................................................... 1648
Waciwoci projektu instalacyjnego ..................................................................... 1649
Edytor systemu plików ......................................................................................... 1653
Edytor rejestru .................................................................................................... 1657
Edytor typów plików ............................................................................................. 1658
Edytor interfejsu uytkownika ............................................................................... 1659
Edytor niestandardowych operacji ......................................................................... 1661
Edytor warunków uruchomienia ............................................................................ 1663
Podsumowanie ........................................................................................................ 1664
Dodatek A Wykorzystanie projektów wczeniejszych wersji ASP.NET ...........................................1665
Przenoszenie nie jest trudne ..................................................................................... 1665
Równolega 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 plików .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
róda 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 bdów ................................................................. 1697
ISAPI_Rewrite ..................................................................................................... 1698
Narzdzia programistyczne ogólnego przeznaczenia .................................................... 1700
Internetowy konwerter kodu ................................................................................. 1700
WinMerge i narzdzia wyszukujce rónice 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 elementów Silverlight w zdarzeniach JavaScript ..................................... 1722
Podsumowanie ........................................................................................................ 1724
Dodatek D Serwisy internetowe o ASP.NET ........................................................................................1725
Blogi autorów 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 których omówiono róne kontrolki serwerowe pozostajce do dyspozycji — mona
by poraonym iloci kontrolek serwerowych udostpnianych przez ASP.NET 3.5. W ni-
niejszym rozdziale omówiono specyficzny typ kontrolek serwerowych, które mona znale
w oknie Toolbox: walidacyjne kontrolki serwerowe.
Walidacyjne kontrolki serwerowe s seri kontrolek, które pozwalaj pracowa z danymi
wprowadzonymi przez uytkowników kocowych w elementach formularza tworzonej
aplikacji. Kontrolki pozwalaj zadba o poprawno danych wpisywanych na formularzu.
Zanim przejdziemy do omówienia sposobów ich uycia, przyjrzyjmy si dokadnie proce-
sowi walidacji.
Zrozumienie procesu walidacji
Ludzie tworzyli aplikacje internetowe przez wiele lat. Zwykle byo to spowodowane po-
trzeb udostpnienia lub pobrania informacji. W tym rozdziale skupimy si na aspekcie po-
bierania 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 zbiór regu, które nakada si na zbie-
rane dane. Tych regu moe by duo lub mao i mog by cise lub do lune. Zaley
to jedynie od potrzeb twórcy aplikacji. Nie istnieje aden perfekcyjny sposób walidacji, po-
niewa niektórzy uytkownicy mog znale jaki sposób oszukania tych procedur, bez
wzgldu na zastosowane reguy. Cay problem tkwi w znalezieniu zotego rodka pomidzy
niewielk iloci zasad oraz cis kontrol, która 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 zbudo-
wane s z rónych typów elementów HTML, które s tworzone za pomoc tradycyjnych
elementów HTML, kontrolek serwerowych HTML ASP.NET oraz kontrolek serwerowych
Web ASP.NET. Wszystko to na kocu i tak staje si zbiorem elementów HTML wchodz-
cym 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 róne
typy regu walidacyjnych, które mona doda do elementów formularza. Naley pamita ,
e nie ma moliwoci sprawdzenia, czy dane s prawdziwe. Mona jedynie wprowadzi zasady,
które pomagaj odpowiedzie na pytania typu:
Q
Czy co zostao wpisane w polu tekstowym?
Q
Czy dane wpisane w polu tekstowym posiadaj format adresu e-mail?
Warto take zwróci 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 walidacyj-
nych, ile tylko potrzeba. Dodanie kolejnych regu do elementów zwiksza poziom sprawdzania
poprawnoci danych.
Naley pamita , e pobieranie danych na stronach internetowych jest jedn z najwaniej-
szych funkcji internetu. Naley wic zadba o to, aby zebrane dane posiaday pewn warto
i miay jakie znaczenie. Mona o to zadba , eliminujc przypadki, w których zbierane in-
formacje nie speniaj nakrelonych regu.
Walidacja po stronie klienta
a walidacja po stronie serwera
Pocztkujcy twórcy aplikacji internetowych mog nie by wiadomi rónicy 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 którym ta aplikacja jest umiesz-
czona. 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.
Q
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 programistów
spdzio wiele dni z klasycznym ASP. W tym czasie wprowadzili róne techniki walidacji,
które 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 for-
mularzem 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 róne niebezpieczestwa. Gdy strona gene-
rowana jest w przegldarce uytkownika, wtedy mona do atwo podejrze jej róda
(poprzez kliknicie prawym przyciskiem myszy i wybranie opcji Poka róda). Po wyko-
naniu takiej czynno mona zobaczy cay kod HTML strony. Oprócz tego mona obej-
rze cay kod JavaScript, który 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, które s przez niego po-
dane). Serwer moe je wtedy odebra jako prawidowe. Istniej take takie przypadki, gdy
uytkownik zwyczajnie zablokuje w swojej przegldarce obsug skryptów — w ten sposób
moe uczyni walidacj cakowicie bezuyteczn.
W zwizku z powyszym walidacja po stronie klienta powinna by rozwaana w katego-
riach 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 sposób 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 swój 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 po-
dejcie jest najlepsze sporód 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 sposób 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 rónych
schematów walidacji. Z tego powodu wraz z pierwsz wersj ASP.NET wprowadzono seri
walidacyjnych kontrolek serwerowych, które pozwalaj w atwy sposób 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 pro-
gramistów klasycznego ASP byo zadecydowanie, gdzie przeprowadza walidacj — czy
na kliencie, czy na serwerze. Walidacyjne kontrolki serwerowe eliminuj ten problem, po-
niewa ASP.NET wykrywa przegldark i na tej podstawie podejmuje waciw decyzj.
Oznacza to, e jeeli aplikacja obsuguje JavaScript, wtedy ASP.NET przeprowadza wali-
dacj 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 wali-
dacji po stronie klienta ASP.NET w dalszym cigu przeprowadza walidacj po stronie ser-
wera w momencie otrzymania danej strony. W ten sposób nie ma adnych kompromisów
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 wspólnego 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 moli-
woci zastosowania JavaScript. Obie te techniki omówione s w tym rozdziale. Do dyspo-
zycji mamy nastpujce walidacyjne kontrolki serwerowe:
Q
RequiredFieldValidator
,
Q
CompareValidator
,
Q
RangeValidator
,
Q
RegularExpressionValidator
,
Q
CustomValidator
,
Q
ValidationSummary
.
Praca z walidacyjnymi kontrolkami serwerowymi ASP.NET nie róni si niczym od pracy
z innymi kontrolkami serwerowymi ASP.NET. Kada z tych kontrolek moe by przeci-
gnita i upuszczona na powierzchni projektow, ale moe by take wprowadzona bezpo-
rednio do kodu strony ASP.NET. Kontrolki mog by modyfikowane w taki sposób, aby
odpowiaday one potrzebom aplikacji. W ten sposób aplikacja moe uzyska unikalny wygld.
Wiele przykadów pracy z tymi kontrolkami pojawi si w dalszej czci rozdziau.
Rozdzia 4.
Q
Walidacyjne kontrolki serwerowe
243
Jeeli walidacyjne kontrolki serwerowe nie speniaj wszystkich oczekiwa, wtedy zaj-
dzie 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 porówna dane wprowadzone przez uytkownika
z innym elementem za pomoc operatora porównania
(równe, wiksze ni, mniejsze ni i tak dalej).
RangeValidator
Sprawdza, czy warto wprowadzona przez uytkownika
mieci si w podanym zakresie liczb lub znaków.
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 przypadków 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 przyci-
ski na stronie, bez wzgldu na to, gdzie s, powoduj uruchomienie procesu walidacji.
Jeeli na stronie ASP.NET znajduje si wiele przycisków i nie ma potrzeby, aby kady
z nich wywoywa proces walidacji, wtedy mona ustawi waciwo
CausesValidation
na
False
dla tych przycisków, które 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 elementów, które
musz spenia regu postaci warto wymagana.
Na listingu 4.1 pokazano przykadowy sposób uycia kontrolki serwerowej
Required
´FieldValidator
.
Listing 4.1. Przykadowy sposób 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.
Q
Walidacyjne kontrolki serwerowe
245
Zbudujmy stron i spróbujmy j uruchomi . Na stronie pokae si proste pole tekstowe oraz
przycisk. Spróbujmy 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 zwróci szczególn uwag, poniewa bd sto-
sowane 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 pokaza-
nym przykadzie jest to zwyky acuch znaków
Wymagane!
. Drug waciwoci, o której
warto wspomnie , jest
ControlToValidate
. Waciwo wykorzystywana jest do poczenia
walidacyjnej kontrolki serwerowej z tym elementem formularza ASP.NET, który 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 atry-
butu 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 wyników
Kontrolka
RequiredFieldValidator
uywa walidacji po stronie klienta, jeeli tylko przegl-
darka 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 róda. 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.
Q
Walidacyjne kontrolki serwerowe
247
W kodzie strony mona zauway kilka zmian w elementach formularza (zwykych kon-
trolkach 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 wa-
ciwo
InitialValue
. Czasami istniej elementy, które zawieraj pewn domyln warto
pocztkow (na przykad pobran z jakiego róda danych). Takie elementy formularza
mog przedstawia pewn warto , która 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 kon-
trolki przed zatwierdzeniem formularza. Na listingu 4.5 pokazano przykad uycia tej wa-
ciwoci.
Listing 4.5. Praca z waciwoci InitialValue
<asp:TextBox ID="TextBox1" Runat="server">Moja warto
pocztkowa</asp:TextBox>
<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 równie zawiera t warto . Kontrolka
RequiredFieldValidator
wymaga zmiany w tym polu. Tylko wtedy strona zostanie zakwa-
lifikowana jako poprawna.
Uniemoliwienie pustych wpisów i równoczesne 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 sposób, nie nakada si adnego ogra-
niczenia, które 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 sposób obejcia tego problemu. Dochodzimy tu do techniki, o której ju
wczeniej wspomniano — na formularzu mona umieci wiele regu walidacyjnych. Nie-
które z nich mog by przypisane do tego samego elementu. Aby naoy wymóg zmiany
248
ASP.NET 3.5 z wykorzystaniem C
# i VB. Zaawansowane programowanie
wartoci pocztkowej pola edycji i równoczenie 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 dwóch kontrolek RequiredFieldValidator dla jednego elementu formularza
<asp:TextBox ID="TextBox1" Runat="server">Moja warto pocztkowa</asp:TextBox>
<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, który potrzebuje pewnej wartoci. Podane zacho-
wanie mona uzyska , stosujc dwie reguy walidacji do pojedynczego elementu formularza.
Walidacja list rozwijanych za pomoc kontrolki RequiredFieldValidator
Do tej pory pokazalimy duo przykadów uycia kontrolki
RequiredFieldValidator
z seri
pól tekstowych. Kontrolka
RequiredFieldValidator
moe by jednak z powodzeniem sto-
sowana 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 swój zawód. Pierwszy element listy rozwijanej zawiera instrukcje dla uytkownika
i informuje o tym, co lista zawiera. Ten element listy jest wymagany. Kod, który 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 zawód</asp:ListItem>
<asp:ListItem>Programista</asp:ListItem>
<asp:ListItem>Prawnik</asp:ListItem>
<asp:ListItem>Lekarz</asp:ListItem>
<asp:ListItem>Artysta</asp:ListItem>
</asp:DropDownList>
<asp:RequiredFieldValidator id="RequiredFieldValidator1"
runat="server" Text="Wybierz element"
ControlToValidate="DropDownList1"
InitialValue="Wybierz zawód">
</asp:RequiredFieldValidator>
Rozdzia 4.
Q
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 której podpita jest kontrolka walidacyjna, posiada
warto pocztkow —
Wybierz zawód
. Oczywicie taka warto nie jest waciwa w mo-
mencie przesyania formularza na serwer. Znów naley uy waciwoci
InitialValue
kontrolki
RequiredFieldValidator
. Wartoci tej kontrolki jest warto pocztkowa listy
rozwijanej. Zmusza to oczywicie uytkownika do wyboru jednego z zawodów z listy roz-
wijanej. W przeciwnym razie nie bdzie on w stanie przesa strony na serwer.
Kontrolka serwerowa CompareValidator
Kontrolka
CompareValidator
pozwala wykonywa porównania pomidzy dwoma elemen-
tami formularza, a take suy do porównania dwóch wartoci umieszczonych we wskaza-
nych elementach formularza. Mona na przykad okreli , e wartoci elementu formularza
musi by liczba cakowita wiksza ni inna zadana warto . Mona take wskaza , e warto-
ciami musz by acuchy znaków, daty lub inne typy, które s do dyspozycji.
Walidacja wzgldem innych kontrolek
Jednym z do czsto stosowanych sposobów wykorzystania kontrolki
CompareValidator
jest uycie jej do porównania dwóch elementów formularza. Przypu my, e dana jest apli-
kacja, która w celu uzyskania dostpu do stron przez uytkowników wymaga podania hasa.
Tworzymy zatem jedno pole edycji, które bdzie suyo do pobrania hasa, i drugie pole
tekstowe, które bdzie suyo do potwierdzenia tego hasa. W zwizku z tym, e pole tek-
stowe dziaa w trybie wprowadzania hasa, uytkownik kocowy nie widzi tego, co wpisuje
— zna tylko liczb wprowadzonych znaków. Aby zmniejszy prawdopodobiestwo po-
myki przy wpisywaniu hasa i zapobiec wprowadzeniu do systemu zego hasa, uytkow-
nik proszony jest o potwierdzenie tego hasa. Po wprowadzeniu hase do systemu naley
porówna 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 for-
mularz naley traktowa jako nieprawidowy. W przykadzie z listingu 4.8 pokazano t sytuacj.
Listing 4.8. Wykorzystanie CompareValidator do porównania 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>
<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
, która czy si z jednym z elementów formularza na stronie. W tym
przypadku potrzebna jest tylko jedna kontrolka
CompareValidator
, poniewa wymagane jest
tylko jedno porównanie. W pokazanym przykadzie sprawdzana jest zgodno wartoci pól
edycji
TextBox2
oraz
TextBox1
. W zwizku z tym uyto waciwoci
ControlToCompare
.
Okrela si w ten sposób warto porównywan z
TextBox2
. W tym przykadzie wartoci
jest
TextBox1
.
Jest to wyjtkowo proste. Jeeli dwa pola tekstowe w momencie zatwierdzania strony po-
siadaj róne wartoci, wtedy w przegldarce wywietlana jest warto waciwoci
Text
kontrolki
CompareValidator
. Przykad pokazany jest na rysunku 4.2.
Rozdzia 4.
Q
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 porównania wartoci wzgldem staych okrelonych typów
danych. Przypu my, e na formularzu rejestracyjnym umieszczono pole edycji, w którym
uytkownik wpisuje swój wiek. W wikszoci tego typu przypadków celem jest pobranie
liczby cakowitej, a nie czego w postaci
aa
lub
bb
. Na listingu 4.9 pokazano, w jaki sposób
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>
<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
spróbuje obej proces walidacji, wpisujc warto nieprawidow, która zawiera co innego
ni cyfry, wtedy strona bdzie traktowana jako nieprawidowa. Kontrolka
CompareValidator
wywietla warto waciwoci
Text
.
Aby okreli typ danych wykorzystywany w porównaniach, korzysta si z waciwoci
Type
.
Waciwo
Type
moe przyjmowa nastpujce wartoci:
Q
Currency
,
Q
Date
,
Q
Double
,
Q
Integer
,
Q
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 wy-
korzystaniu tej kontrolki. Mona take zadba o to, aby warto bya porównywana z okre-
lon sta. Istnieje sposób na sprawdzenie, czy warto wpisana w elemencie formularza
jest wiksza ni, mniejsza ni, równa, wiksza ni lub równa i mniejsza ni lub równa pewnej
wartoci. Przykad pokazano na listingu 4.10.
Listing 4.10. Wykonywanie porówna za pomoc kontrolki CompareValidator
Wiek:
<asp:TextBox ID="TextBox1" Runat="server"></asp:TextBox>
<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
oprócz poczenia si z kontrolk oraz nao-
enia wymogu wprowadzenia liczby cakowitej robi co jeszcze. Wykorzystywane s rów-
nie atrybuty
Operator
oraz
ValueToCompare
. Dziki nim mona si upewni , e liczba jest
wiksza ni 18. Jeeli zatem uytkownik wprowadzi liczb równ 18 lub mniejsz, wtedy
walidacja nie powiedzie si i strona bdzie traktowana jako nieprawidowa.
Waciwo
Operator
moe przyjmowa nastpujce wartoci:
Q
Equal
,
Q
NotEqual
,
Q
GreaterThan
,
Q
GreaterThanEqual
,
Q
LessThan
,
Q
LessThanEqual
,
Q
DataTypeCheck
.
Waciwo
ValueToCompare
to miejsce, gdzie umieszcza si warto wykorzystywan
w porównaniu. 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 wybór 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>
<asp:RangeValidator ID="RangeValidator1" Runat="server"
Rozdzia 4.
Q
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 którego 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
, która ustawiona jest na
Integer
. Kolekcja zrzutów ekranów 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 ekranów z rysunku 4.3, warto mniejsza ni 30 zostaje
przez kontrolk
RangeValidator
zasygnalizowana. To samo dzieje si w przypadku warto-
ci 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 porównywania liczb (w takich
sytuacjach jest jednak najczciej wykorzystywana). Moe ona posuy take do walidacji
zakresu acuchów znaków oraz innych elementów, 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, który pozwala na pobranie od uyt-
kownika daty przyjazdu. Data przyjazdu musi mieci si w zakresie dwóch 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
wybór bdzie wywietlany w kontrolce
TextBox
. Potem, gdy uytkownik kliknie na formu-
larzu przycisk, wtedy w przypadku wybrania nieprawidowej daty zostanie o tym powia-
domiony. Jeeli wybrana data jest prawidowa, wtedy pokazywana jest ona przez kontrolk
Label
. Kod przykadu pokazany jest na listingu 4.12.
Rozdzia 4.
Q
Walidacyjne kontrolki serwerowe
255
Listing 4.12. Wykorzystanie kontrolki RangeValidator do sprawdzenia wartoci daty w postaci acucha znaków
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>
<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>
<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
póniejsza 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 wy-
braniu 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.
Q
Walidacyjne kontrolki serwerowe
257
Kontrolka serwerowa RegularExpressionValidator
Jedn ze wspaniaych kontrolek, któr programici najczciej wykorzystuj, jest
Regular
´ExpressionValidator
. Kontrolka oferuje wysoki poziom elastycznoci podczas wprowa-
dzania do formularza rónych regu. Wykorzystujc kontrolk
RegularExpressionValidator
,
mona sprawdzi zgodno wprowadzonych danych z pewnym wzorcem, wyraonym za
pomoc wyraenia regularnego.
Oznacza to, e mona zdefiniowa pewn struktur, która bdzie potem wykorzystywana
do sprawdzania zgodnoci z danymi wprowadzonymi przez uytkownika. Mona na przykad
zdefiniowa struktur, która wymusza wprowadzenie danych w postaci adresu e-mail lub
adresu internetowego URL. Jeeli warto nie jest zgodna z definicj, wtedy strona trakto-
wana jest jako nieprawidowa. Na listingu 4.13 pokazano, w jaki sposób sprawdzi po-
prawno 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>
<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
, która zawiera tekst wywietlany na ekranie po
niepomylnym zakoczeniu si procesu walidacji. Unikatow waciwoci tej kontrolki jest
ValidationExpression
. Waciwo przechowuje warto tekstow, która jest wyraeniem re-
gularnym 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 uy-
wanych wyrae regularnych, które mona zastosowa w kontrolce
RegularExpressionValidator
.
Aby przej do okna edytora, naley przeczy si na widok Design. Naley si jednocze-
nie 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 telefonów, numery ubezpieczeniowe.
Narzdzie Regular Expression Editor pomaga w korzystaniu z tych do czsto skompliko-
wanych 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, które mona natychmiast wyko-
rzysta . W wikszoci przypadków 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, które bd sto-
sowane zarówno po stronie klienta, jak i po stronie serwera. Skorzystanie z takiej moliwo-
ci 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 wprowa-
dzenia mechanizmu walidacji po stronie klienta. Wikszo programistów ma swoje wasne
kolekcje funkcji JavaScript, które znajduj zastosowanie w ich aplikacjach. Dziki kontrolce
CustomValidator
te funkcje mog by szybko i atwo zaimplementowane na stronie.
Przyjrzyjmy si prostemu formularzowi, który 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 = "PRAWIDOWA LICZBA!"
End Sub
</script>
Rozdzia 4.
Q
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>
<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 = "PRAWIDOWA LICZBA!";
}
</script>
W pokazanym formularzu mona zauway kilka rzeczy. Po pierwsze, jest to prosty formularz;
zawiera tylko jedno pole tekstowe, w którym uytkownik moe wprowadzi dane. Uyt-
kownik naciska przycisk i wywoywana jest procedura obsugi zdarzenia
Button1_Click
,
która 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, która wyrónia t stron sporód 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 za-
chodzi 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 testów spraw-
dzajcych. W tym przypadku warto wprowadzona przez uytkownika (
args.Value
) jest
sprawdzana pod ktem podzielnoci przez
5
. Zwrócona warto logiczna przypisywana jest
do waciwoci
args.IsValid
, która 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, któr naley si w tym przypadku zaintere-
sowa , jest
ClientValidationFunction
. Warto w postaci acucha znaków przypisywana do
tej funkcji okrela funkcj po stronie klienta, która 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.
Q
Walidacyjne kontrolki serwerowe
261
i porównania ich z dynamicznymi wartociami pochodzcymi z plików XML, baz danych
lub innego róda.
Jako przykad wasnej walidacji po stronie serwera za pomoc kontrolki
CustomValidator
moe posuy jej odpowiednik po stronie klienta. Zróbmy to samo. Stwórzmy procedur
walidujc po stronie serwera, która 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 = "PRAWIDOWY 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>
<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 = "PRAWIDOWY 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, która zostaa zaprojektowana do pracy z kontrolk
CustomValidator
,
otrzymujemy warto pochodzc z elementu formularza poprzez obiekt
args.Value
. Usta-
wiamy potem waciwo
args.IsValid
na
True
lub
False
, w zalenoci od wyników pro-
cedury 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.
Q
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 przeado-
wywana 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 = "PRAWIDOWY 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, decy-
dujc 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 dwóch funkcji walidacyjnych i tak zmodyfikowa kon-
trolk
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 jed-
noczesnym uyciem atrybutów
ClientValidationFunction
oraz
OnServerValidate
.
Kontrolka serwerowa ValidationSummary
Kontrolka
ValidationSummary
nie jest kontrolk, która przeprowadza jakiego rodzaju testy
sprawdzajce poprawno danych wpisanych na formularzu. Jest to kontrolka typowo ra-
portujca, która jest wykorzystywana przez inne kontrolki walidacyjne na stronie. Kontrol-
ka walidacyjna
ValidationSummary
moe by uyta do zebrania wszystkich zgoszonych
bdów walidacyjnych na stronie i moe stanowi alternatyw wywietlania bdów przez
kad kontrolk walidacyjn indywidualnie.
Taka moliwo moe by wykorzystana na wikszych formularzach, które wykorzystuj
peny proces walidacji. W takim przypadku rozwizaniem bardziej przyjaznym dla uyt-
kownika moe by umieszczenie wszystkich zgoszonych bdów w sposób 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 bdów walidacji w po-
staci 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>
<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>
<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 zbu-
dowaniu 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.
Q
Walidacyjne kontrolki serwerowe
265
We wczeniejszych przykadach walidacji kontrolek na formularzu bdy pojawiaj si
obok kadego z pól tekstowych. Mona jednak zauway , e kontrolka
ValidationSummary
pokazuje bdy walidacyjne w postaci czerwonej listy wypunktowanej w miejscu, w któ-
rym ta kontrolka si znajduje. W wikszoci przypadków nie ma potrzeby wywietlania
tych samych bdów 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 poka-
zano 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 wali-
dacyjnych takich zmian spowoduje powstanie wyników pokazanych na rysunku 4.9.
Rysunek 4.9
Aby otrzyma taki wynik, naley pamita , e kontrolka
ValidationSummary
w celu wy-
wietlenia bdów walidacji korzysta z waciwoci
ErrorMessage
. Waciwo
Text
jest
uywana przez kontrolki walidacyjne i nie jest w aden sposób przetwarzana przez kontrolk
ValidationSummary
.
266
ASP.NET 3.5 z wykorzystaniem C
# i VB. Zaawansowane programowanie
Oprócz list wypunktowanych mona stosowa inne formaty wywietlania wyników. Zmian
mona dokona za pomoc waciwoci
DisplayMode
. Kontrolka moe przyjmowa nast-
pujce wartoci:
Q
BulletList
,
Q
List
,
Q
SingleParagraph
.
Zamiast wywietla wyniki na stronie, mona take wykorzysta okno dialogowe. Na li-
stingu 4.19 pokazano przykad takiego podejcia.
Listing 4.19. Wykorzystanie okna dialogowego do raportowania bdów 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 waci-
wo
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 sposób, aby nie wysy-
ay one do aplikacji dajcych adnych funkcji walidujcych. Takie podejcie umoliwia
przeprowadzanie wycznie walidacji po stronie serwera, bez wzgldu na rzeczywiste moliwo-
ci kontrolek walidacyjnych. Istnieje kilka moliwoci wyczenia tego typu funkcjonalnoci.
Rozdzia 4.
Q
Walidacyjne kontrolki serwerowe
267
Pierwszy sposób 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 zadecy-
dowa 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, które
zostay umieszczone na tej stronie.
268
ASP.NET 3.5 z wykorzystaniem C
# i VB. Zaawansowane programowanie
Korzystanie z obrazków i d
wików
w powiadomieniach o bdach
Do tej pory wywietlalimy proste wiadomoci tekstowe, które informoway o pojawieniu
si bdów w walidacyjnych kontrolkach serwerowych. W wikszoci przypadków takie
rozwizanie jest wystarczajce — prosty komunikat tekstowy informuje uytkownika ko-
cowego o tym, e wprowadzi do formularza jak nieprawidow warto , która nie spenia
naoonych wymaga.
Interesujc wskazówk jest to, e nie trzeba wcale uywa tekstu — w celu powiadomienia
uytkownika mona take uywa dwików i obrazków.
W tym celu korzysta si z waciwoci
Text
, która jest dostpna w kadej kontrolce walida-
cyjnej. Aby do zasygnalizowania bdu uy obrazka, mona po prostu przypisa do wa-
ciwoci waciwy kod HTML. Pokazano to na listingu 4.23.
Listing 4.23. Uywanie obrazków 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 zwróci szczególn uwag na obecno cudzysowów pojedynczych i po-
dwójnych. W ten sposób 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, które bdzie uywane przy bdach. Mona to zrobi w taki sam sposób, jaki
zosta wykorzystany przy powiadomieniu obrazkowym. Na listingu 4.24 pokazano przykad.
Rozdzia 4.
Q
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 rónych dwików 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 wa-
lidacyjnej.
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 przypadków programici umieszczali na jednej stronie wiksz ilo formu-
larzy. W ASP.NET 1.0/1.1 byo to moliwe, poniewa kliknicia rónych przycisków mogy
wywoywa róne zdarzenia. Korzystajc z takiego rozwizania, mona si byo narazi na
pewne problemy.
Jeden z tych problemów polega na tym, e pojawiay si pewne trudnoci z posiadaniem
walidacji dla wszystkich kontrolek na kadym formularzu strony. Róne kontrolki walida-
cyjne byy czsto przypisywane do dwóch rónych 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 uytkowników ASP.NET, która zawiera
dwa formularze.
Jeden formularz jest przeznaczony dla czonków grupy. Za jego pomoc podaje si nazw
uytkownika i haso, które s potrzebne do wejcia do strefy tylko dla czonków. Drugi
formularz na stronie jest przeznaczony dla wszystkich uytkowników i pozwala zapisa si
do newslettera. Kady z formularzy posiada swój przycisk i zwizane z nim kontrolki wali-
dacyjne. Problem pojawia si wtedy, gdy kto przesya informacje za pomoc jednego for-
mularza. Przypu my, e mamy do czynienia z czonkiem grupy, który 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 formu-
larza sygnalizuje bd, poniewa nie wprowadzono nazwy uytkownika i hasa do pierw-
szego 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
, która pozwala podzieli kon-
trolki walidacyjne na kilka niezalenych grup. W momencie nacinicia przycisku na stro-
nie pozwala ona aktywowa tylko okrelone kontrolki walidacyjne. Na listingu 4.25 poka-
zano przykad podzielenia kontrolek walidacyjnych na stronie grupy uytkowników na dwie
róne 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 uytkowników ASP.NET</h1>
<p>Nazwa uytkownika:
<asp:TextBox ID="TextBox1" Runat="server"></asp:TextBox> Haso:
<asp:TextBox ID="TextBox2" Runat="server"
TextMode="Password"></asp:TextBox>
<asp:Button ID="Button1" Runat="server" Text="Zaloguj"
ValidationGroup="Login" />
<br />
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" Runat="server"
Text="* Musisz wpisa
nazw uytkownika!"
Rozdzia 4.
Q
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 gówne 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 gówn. 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>
<asp:Button ID="Button2" Runat="server" Text="Zapisz si "
ValidationGroup="Newsletter" />
<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 znaków. Warto take zwróci 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 przycisków 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 rozrónieniu, 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,
które 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 sy-
gnalizowany jest bd, wtedy waciwo umieszcza fokus na elemencie, który ten bd za-
wiera. 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 ad-
nej wartoci w polu
TextBox1
, wtedy strona jest odrysowywana z fokusem ustawionym na
kontrolce
TextBox1
. Pokazano to na rysunku 4.14.
Naley take zwróci uwag na to, e wiele kontrolek walidacyjnych moe zawiera usta-
wion na
True
waciwo
SetFocusOnError
. Jeeli w takim przypadku wystpi wicej bdów
walidacji, wtedy fokus otrzyma pierwszy element formularza. Jako przykad wemy poka-
zany formularz. Jeeli zarówno 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.
Q
Walidacyjne kontrolki serwerowe
273
Rysunek 4.14
Podsumowanie
Kontrolki walidacyjne s miym dodatkiem dla tych programistów, którzy 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 sposób dostoso-
wywane. 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, które bd implementowane na formula-
rzach za pomoc zestawu rónych kontrolek — walidacyjnych kontrolek serwerowych.
W niniejszym rozdziale omówiono róne walidacyjne kontrolki, wczajc w to:
Q
RequiredFieldValidator
,
Q
CompareValidator
,
Q
RangeValidator
,
Q
RegularExpressionValidator
,
274
ASP.NET 3.5 z wykorzystaniem C
# i VB. Zaawansowane programowanie
Q
RegularExpressionValidator
,
Q
CustomValidator
,
Q
ValidationSummary
.
Oprócz zaprezentowania podstawowych kontrolek walidacyjnych w rozdziale poruszono
take zagadnienia zwizane ze stosowaniem walidacji po stronie klienta i walidacji po stro-
nie serwera.