You are on page 1of 58

Id do

Spis treci
Przykadowy rozdzia
Katalog ksiek
Katalog online
Zamw drukowany
katalog
Twj koszyk
Dodaj do koszyka
Cennik i informacje
Zamw informacje
o nowociach
Zamw cennik
Czytelnia
Fragmenty ksiek
online

Kontakt
Helion SA
ul. Kociuszki 1c
44-100 Gliwice
tel. 32 230 98 63
e-mail: helion@helion.pl
Helion 19912010

ASP.NET 4 z wykorzystaniem
C# i VB. Zaawansowane
programowanie
Autor: Bill Evjen, Scott Hanselman, Devin Rader
Tumaczenie: Wojciech Moch, Tomasz Walczak
ISBN: 978-83-246-2846-9
Tytu oryginau: Professional ASP.NET 4 in C# and VB
Format: 172245, stron: 1792

Doborowi autorzy wymienita ksika. Wszystko, co powiniene wiedzie o ASP.NET!


Jakie kontrolki serwerowe udostpnia ASP.NET 4?
Jak monitorowa stan aplikacji ASP.NET?
Jak zapewni najwysz wydajno aplikacji?
Platforma ASP.NET to gwny konkurent jzyka Java w zakresie tworzenia aplikacji internetowych
oraz dynamicznych stron internetowych. Kada jej wersja dostarcza wiele interesujcych ulepsze,
a wrd nich te najwaniejsze pozwalajce na zdjcie z programisty obowizku pisania duych
iloci nudnego kodu, bez ktrego jeszcze niedawno aplikacja nie mogaby istnie.
Niniejsza ksika zostaa napisana przez grup wyjtkowych autorw. Bill Evjen to najaktywniejszy
promotor technologii .NET, Scott Hanselman to gwny meneder w jednym z dziaw firmy
Microsoft, prowadzcy szkolenia dotyczce ASP.NET na caym wiecie, a Devin Rader to pracownik
firmy Infragistics. Ta doborowa trjka stworzya wietny podrcznik, w caoci powicon ASP.NET.
Znajdziesz w niej informacje na temat stosowania jzykw VisualBasic oraz C# do tworzenia
dynamicznych stron. Dowiesz si, jak wykorzysta kontrolki serwerowe, budowa aplikacje
z wykorzystaniem wzorca MVC oraz tchn ycie w strony za pomoc technologii AJAX. Te i wiele
innych bezcennych informacji, porad i wskazwek odkryjesz dziki tej wyjtkowej ksice!
Produktywno programistw
Infrastruktura i tworzenie aplikacji ASP.NET
rodowisko ADO.NET
Kompilacja aplikacji ASP.NET
Monitorowanie stanu aplikacji
Kontrolki serwerowe
Wykorzystanie stron wzorcowych
Kompozycje i skrki
Wykonywanie zapyta z wykorzystaniem LINQ
Wykorzystanie formatu XML
Bezpieczestwo aplikacji ASP.NET
Instrumentacja
Sprawd, jaka moc drzemie w platformie ASP.NET!

Spis treci

Wstp ............................................................................................................. 29
Rozdzia 1.

rodowiska do tworzenia aplikacji i stron .................................................. 53


Opcje lokalizacji aplikacji ............................................................................................54
Wbudowany serwer WWW ..................................................................................54
IIS ..............................................................................................................................56
FTP ...........................................................................................................................57
Strony internetowe wymagajce FrontPage Extensions ...................................57
Opcje struktury strony ASP.NET ...............................................................................58
Model inline ............................................................................................................60
Model code-behind ................................................................................................62
Dyrektywy strony ASP.NET 4 ....................................................................................64
@Page .......................................................................................................................65
@Master ...................................................................................................................69
@Control ..................................................................................................................70
@Import ...................................................................................................................71
@Implements ..........................................................................................................74
@Register .................................................................................................................74
@Assembly ..............................................................................................................75
@PreviousPageType ...............................................................................................75
@MasterType ..........................................................................................................76
@OutputCache ........................................................................................................76
@Reference ..............................................................................................................77
Zdarzenia strony ASP.NET .........................................................................................77
Praca z mechanizmem postback .................................................................................79
Mechanizm cross-page posting ..................................................................................79
Katalogi aplikacji ASP.NET ........................................................................................85
Katalog AppCode ...................................................................................................86
Katalog App_Data ..................................................................................................90
Katalog App_Themes ............................................................................................90
Katalog App_GlobalResources .............................................................................91
App_LocalResources ..............................................................................................91
App_WebReferences ..............................................................................................91
App_Browsers .........................................................................................................91
Kompilacja .....................................................................................................................92

8 ASP.NET 4 Z WYKORZYSTANIEM C# I VB. ZAAWANSOWANE PROGRAMOWANIE


Build Providers .............................................................................................................96
Korzystanie z wbudowanych klas BuildProvider ...............................................97
Korzystanie z wasnych klas BuildProvider ........................................................98
Global.asax ...................................................................................................................103
Praca z klasami w VS 2010 ........................................................................................107
Podsumowanie ............................................................................................................110
Rozdzia 2.

Kontrolki serwerowe ASP.NET i skrypty po stronie klienta ....................111


Kontrolki serwerowe ASP.NET ................................................................................112
Typy kontrolek serwerowych ..............................................................................112
Tworzenie aplikacji z wykorzystaniem kontrolek serwerowych ...................114
Praca ze zdarzeniami kontrolek serwerowych .................................................116
Dodawanie stylu do kontrolek serwerowych ..........................................................118
Przegld wsplnych waciwoci kontrolek ......................................................118
Zmiana stylu za pomoc kaskadowych arkuszy stylw ..................................120
Zmiany w CSS wprowadzone w ASP.NET 4 ....................................................123
Kontrolki serwerowe HTML .....................................................................................124
Omwienie klasy bazowej HtmlControl ...........................................................126
Omwienie klasy HtmlContainerControl ........................................................127
Omwienie wszystkich klas HTML ...................................................................127
Praca z klas HtmlGenericControl ....................................................................128
Identyfikowanie kontrolek serwerowych ASP.NET ..............................................129
Zarzdzanie stronami i kontrolkami serwerowymi za pomoc JavaScriptu ......132
Korzystanie z Page.ClientScript.RegisterClientScriptBlock ...........................133
Korzystanie z Page.ClientScript.RegisterStartupScript ...................................135
Korzystanie z Page.ClientScript.RegisterClientScriptInclude ........................137
Funkcja zwrotna po stronie klienta ..........................................................................137
Porwnanie postback z funkcj zwrotn ..........................................................137
Korzystanie z moliwoci funkcji zwrotnej proste podejcie ....................140
Korzystanie z funkcji zwrotnych z jednym parametrem ................................144
Uycie mechanizmu funkcji zwrotnej przykad bardziej zaawansowany ..147
Podsumowanie ............................................................................................................152

Rozdzia 3.

Kontrolki serwerowe Web ASP.NET ..........................................................153


Wprowadzenie do kontrolek serwerowych Web ...................................................154
Kontrolka serwerowa Label .......................................................................................155
Kontrolka serwerowa Literal .....................................................................................156
Kontrolka serwerowa TextBox .................................................................................157
Uycie metody Focus() ........................................................................................158
Uycie AutoPostBack ...........................................................................................159
Uycie AutoCompleteType .................................................................................160
Kontrolka serwerowa Button ....................................................................................161
Waciwo CausesValidation ............................................................................162
Waciwo CommandName .............................................................................162
Przyciski, ktre wsppracuj z JavaScriptem po stronie klienta ..................163
Kontrolka serwerowa LinkButton ............................................................................165

Spis treci 9

Kontrolka serwerowa ImageButton .........................................................................165


Kontrolka serwerowa HyperLink .............................................................................166
Kontrolka serwerowa DropDownList .....................................................................167
Wizualne usuwanie elementw z kolekcji ...............................................................169
Kontrolka serwerowa ListBox ...................................................................................171
Umoliwienie wyboru kilku pozycji ..................................................................172
Przykad uycia kontrolki ListBox .....................................................................172
Dodawanie elementw do kolekcji ....................................................................174
Kontrolka serwerowa CheckBox ..............................................................................174
W jaki sposb sprawdzi, czy pole wyboru jest zaznaczone ...........................176
Przypisanie wartoci do pola wyboru ................................................................176
Wyrwnywanie tekstu kontrolki CheckBox .....................................................176
Kontrolka serwerowa CheckBoxList ........................................................................177
Kontrolka serwerowa RadioButton ..........................................................................179
Kontrolka serwerowa RadioButtonList ...................................................................181
Kontrolka serwerowa Image .....................................................................................182
Kontrolka serwerowa Table ......................................................................................184
Kontrolka serwerowa Calendar ................................................................................186
Wybieranie daty za pomoc kontrolki Calendar .............................................186
Wybieranie formatu daty pobieranej z kalendarza ..........................................188
Wybr dni, tygodni lub miesicy .......................................................................188
Praca z zakresami dat ...........................................................................................189
Zmiana stylu i zachowania kalendarza ..............................................................190
Kontrolka serwerowa AdRotator .............................................................................193
Kontrolka serwerowa Xml .........................................................................................195
Kontrolka serwerowa Panel ......................................................................................196
Kontrolka serwerowa PlaceHolder ..........................................................................198
Kontrolka serwerowa BulletedList ...........................................................................199
Kontrolka serwerowa HiddenField ..........................................................................203
Kontrolka serwerowa FileUpload .............................................................................205
Pobieranie plikw za pomoc kontrolki FileUpload .......................................205
Nadawanie ASP.NET waciwych praw do pobierania plikw ......................208
Zrozumienie limitw rozmiaru plikw .............................................................209
Wczytywanie wielu plikw na tej samej stronie ...............................................211
Przekazywanie pobranego pliku do obiektu Stream .......................................213
Przenoszenie zawartoci pliku z obiektu Stream do tablicy bajtw ..............214
Kontrolki serwerowe MultiView oraz View ...........................................................214
Kontrolka serwerowa Wizard ...................................................................................218
Dostosowanie nawigacji po stronach ................................................................219
Uycie atrybutu AllowReturn .............................................................................220
Praca z atrybutem StepType ...............................................................................220
Wstawianie nagwka w kontrolce Wizard ......................................................221
Praca z systemem nawigacji kontrolki Wizard ................................................221
Obsuga zdarze kontrolki Wizard ....................................................................222
Uycie kontrolki Wizard do pokazania elementw formularza ....................224

10 ASP.NET 4 Z WYKORZYSTANIEM C# I VB. ZAAWANSOWANE PROGRAMOWANIE


Kontrolka serwerowa ImageMap .............................................................................228
Kontrolka serwerowa Chart ......................................................................................230
Podsumowanie ............................................................................................................234
Rozdzia 4.

Uwierzytelniajce kontrolki serwerowe ...................................................235


Zrozumienie procesu walidacji .................................................................................235
Walidacja po stronie klienta a walidacja po stronie serwera ................................236
Kontrolki walidacyjne ASP.NET ..............................................................................237
Przyczyny walidacji ..............................................................................................239
Kontrolka serwerowa RequiredFieldValidator ................................................239
Kontrolka serwerowa CompareValidator .........................................................245
Kontrolka serwerowa RangeValidator ..............................................................248
Kontrolka serwerowa RegularExpressionValidator ........................................251
Kontrolka serwerowa CustomValidator ...........................................................253
Kontrolka serwerowa ValidationSummary ......................................................258
Wyczanie walidacji po stronie klienta ..................................................................261
Korzystanie z obrazkw i dwikw w powiadomieniach o bdach ..................262
Praca z grupami walidacyjnymi ................................................................................263
Podsumowanie ............................................................................................................267

Rozdzia 5.

Praca ze stronami wzorcowymi .................................................................269


Do czego potrzebne s strony wzorcowe? ...............................................................269
Podstawy stron wzorcowych .....................................................................................272
Pisanie kodu stron wzorcowych ...............................................................................273
Pisanie kodu strony z zawartoci ............................................................................276
czenie rnych typw stron i jzykw ...........................................................280
Okrelanie, ktrej strony wzorcowej uy ........................................................281
Praca z tytuem strony .........................................................................................282
Praca z kontrolkami i waciwociami strony wzorcowej ...............................283
Okrelanie domylnej zawartoci na stronie wzorcowej .......................................290
Programowe przypisywanie strony wzorcowej ......................................................291
Osadzanie stron wzorcowych ...................................................................................293
Strony wzorcowe dostosowane do przegldarek ....................................................296
Porzdek wywoywania zdarze ...............................................................................298
Buforowanie stron wzorcowych ...............................................................................298
ASP.NET AJAX i strony wzorcowe .........................................................................299
Podsumowanie ............................................................................................................302

Rozdzia 6.

Kompozycje i skrki ....................................................................................303


Korzystanie z kompozycji ASP.NET ........................................................................303
Przypisywanie kompozycji pojedynczej stronie ASP.NET .............................303
Stosowanie stylw do caej aplikacji ..................................................................305
Usuwanie kompozycji z kontrolek serwerowych .............................................306
Usuwanie kompozycji ze stron ...........................................................................307
Stosowanie kompozycji podczas korzystania ze stron wzorcowych .............307
Dziaanie atrybutu StyleSheetTheme .................................................................308

Spis treci 11

Tworzenie wasnych kompozycji .............................................................................308


Tworzenie waciwej struktury katalogw ........................................................308
Tworzenie skrki ..................................................................................................309
Umieszczanie w kompozycjach plikw CSS .....................................................311
Wstawianie do kompozycji obrazkw ...............................................................314
Definiowanie wielu opcji skrek ..............................................................................317
Programowa praca z kompozycjami ........................................................................319
Programowe przypisywanie kompozycji strony ..............................................319
Programowe przypisanie waciwoci SkinID kontrolki ................................320
Kompozycje, skrki i wasne kontrolki ...................................................................320
Podsumowanie ............................................................................................................324
Rozdzia 7.

Wizanie danych .........................................................................................325


Kontrolki rde danych ............................................................................................326
Kontrolka SqlDataSource ....................................................................................328
Kontrolka AccessDataSource ..............................................................................337
Kontrolka LinqDataSource .................................................................................337
Kontrolka EntityDataSource ...............................................................................344
Kontrolka XmlDataSource ..................................................................................346
Kontrolka ObjectDataSource ..............................................................................347
Kontrolka SiteMapDataSource ...........................................................................351
Konfiguracja buforowania kontrolek rda danych .............................................351
Przechowywanie informacji o poczeniu ...............................................................352
Uycie kontrolek list umoliwiajcych wizanie z kontrolkami rde danych ...354
GridView ...............................................................................................................354
Edycja danych wierszy kontrolki GridView .....................................................370
Usuwanie danych w kontrolce GridView .........................................................377
DetailsView ...........................................................................................................380
Wstawianie, modyfikacja i usuwanie danych
za pomoc kontrolki DetailsView ....................................................................384
ListView .................................................................................................................385
FormView ..............................................................................................................394
Inne kontrolki umoliwiajce wizanie danych .....................................................399
TreeView ................................................................................................................399
AdRotator ..............................................................................................................400
Menu ......................................................................................................................400
Skadnia rozwijanego wizania danych ...................................................................401
Zmiany w skadni wizania danych ...................................................................401
Wizanie danych w formacie XML ....................................................................402
Wyraenia i klasy do budowania wyrae ..............................................................403
Podsumowanie ............................................................................................................408

Rozdzia 8.

Zarzdzanie danymi w ADO.NET ...............................................................409


Podstawowe moliwoci ADO.NET ........................................................................410
Podstawowe zadania ADO.NET ........................................................................410
Pobieranie danych ................................................................................................410

12 ASP.NET 4 Z WYKORZYSTANIEM C# I VB. ZAAWANSOWANE PROGRAMOWANIE


Podstawowe przestrzenie nazw i klasy ADO.NET ..........................................415
Korzystanie z obiektu Connection .....................................................................416
Korzystanie z obiektu Command .......................................................................418
Korzystanie z obiektu DataReader .....................................................................419
Korzystanie z klas DataAdapter .........................................................................422
Korzystanie z parametrw ...................................................................................424
Opis obiektw DataSet oraz DataTable .............................................................427
Typowany obiekt DataSet ...................................................................................432
Korzystanie z bazy danych Oracle w ASP.NET ...............................................433
Kontrolka serwerowa DataList .................................................................................434
Przegld dostpnych wzorcw ...........................................................................434
Praca z ItemTemplate ..........................................................................................434
Praca z innymi wzorcami ukadw graficznych ...............................................438
Praca z wieloma kolumnami ...............................................................................439
Kontrolka serwerowa ListView .................................................................................441
Podczanie kontrolki ListView do bazy danych .............................................442
Tworzenie wzorca ukadu graficznego ..............................................................443
Tworzenie ItemTemplate ....................................................................................445
Tworzenie EditItemTemplate .............................................................................446
Tworzenie EmptyItemTemplate ........................................................................446
Tworzenie InsertItemTemplate ..........................................................................447
Wywietlanie wynikw ........................................................................................447
Wykorzystanie Visual Studio do zada zwizanych z ADO.NET .......................449
Tworzenie poczenia ze rdem danych ........................................................450
Praca z projektantem DataSet .............................................................................451
Korzystanie z obiektu DataSet CustomersOrders ...........................................457
Asynchroniczne wywoywanie polece ...................................................................460
Asynchroniczne metody klasy SqlCommand ...................................................460
Interfejs IAsyncResult ..........................................................................................462
AsyncCallback .......................................................................................................463
Klasa WaitHandle .................................................................................................463
Sposoby przetwarzania asynchronicznego w ADO.NET ...............................464
Anulowanie przetwarzania asynchronicznego .................................................481
Asynchroniczne poczenia ................................................................................481
Podsumowanie ............................................................................................................482
Rozdzia 9.

Zapytania w technologii LINQ ...................................................................483


LINQ to Objects ..........................................................................................................483
Tradycyjne metody zapyta ................................................................................484
Zamiana tradycyjnych zapyta na zapytania w LINQ-u ................................491
Grupowanie danych .............................................................................................497
Inne operatory technologii LINQ ......................................................................498
Zczenia w technologii LINQ ............................................................................499
Paginacja za pomoc technologii LINQ ............................................................501
LINQ to XML ..............................................................................................................501
czenie danych w formacie XML .....................................................................505

Spis treci 13

LINQ to SQL ...............................................................................................................506


Zapytania Insert, Update oraz Delete z wykorzystaniem technologii LINQ .....514
Rozszerzanie technologii LINQ ..........................................................................518
Podsumowanie ............................................................................................................519
Rozdzia 10. Praca z formatem XML i technologi LINQ to XML ..................................521
Podstawy jzyka XML ................................................................................................523
XML InfoSet ..........................................................................................................525
Definicja schematu XSD-XML ...........................................................................526
Edycja plikw XML oraz schematw XML w Visual Studio 2010 ................527
Klasy XmlReader oraz XmlWriter ...........................................................................530
Korzystanie z XDocument zamiast XmlReader ...............................................533
Korzystanie ze schematu oraz XmlTextReader ................................................534
Walidacja wzgldem schematu przy uyciu XDocument ...............................536
Korzystanie z optymalizacji NameTable ...........................................................538
Pobieranie typw .NET CLR z dokumentw XML .........................................540
ReadSubtree oraz XmlSerialization ....................................................................541
Tworzenie obiektw CLR z dokumentw XML za pomoc LINQ to XML ......543
Tworzenie danych w formacie XML za pomoc XmlWriter .........................544
Tworzenie danych w formacie XML za pomoc LINQ to XML ....................546
Udoskonalenia obiektw XmlReader oraz XmlWriter ...................................549
XmlDocument oraz XPathDocument .....................................................................550
Problemy z modelem DOM ................................................................................550
XPath, XPathDocument oraz XmlDocument ..................................................551
Obiekty DataSet ..........................................................................................................555
Zapisywanie obiektw DataSet w formacie XML ............................................555
XmlDataDocument ..............................................................................................557
Kontrolka XmlDataSource ........................................................................................559
XSLT .............................................................................................................................563
XslCompiledTransform .......................................................................................564
Debugowanie kodu w jzyku XSLT ...................................................................569
XML i bazy danych .....................................................................................................570
FOR XML AUTO .................................................................................................570
SQL Server oraz typy danych w jzyku XML ...................................................574
Podsumowanie ............................................................................................................581
Rozdzia 11. Wprowadzenie do modelu dostawcw ....................................................583
Zrozumienie modelu dostawcw .............................................................................584
Model dostawcw w ASP.NET 4 ..............................................................................585
Ustawianie dostawcy, aby wsppracowa z Microsoft SQL Server 7.0,
2000, 2005 lub 2008 ...........................................................................................587
Dostawcy czonkostwa .........................................................................................593
Dostawcy rl ..........................................................................................................597
Dostawca personalizacji ......................................................................................601
Dostawca SiteMap ................................................................................................602
Dostawcy SessionState .........................................................................................603

14 ASP.NET 4 Z WYKORZYSTANIEM C# I VB. ZAAWANSOWANE PROGRAMOWANIE


Dostawcy WebEvent ............................................................................................606
Dostawcy konfiguracji .........................................................................................614
Dostawca WebParts .............................................................................................617
Konfigurowanie dostawcw ......................................................................................619
Podsumowanie ............................................................................................................619
Rozdzia 12. Rozszerzanie modelu dostawcw .............................................................621
Dostawcy s jedn warstw w rozbudowanej architekturze .................................621
Modyfikacja programowa z wykorzystaniem atrybutw ......................................622
Uatwienie wprowadzania hasa za pomoc SqlMembershipProvider .........623
Nakadanie silnych restrykcji na haso za pomoc SqlMembershipProvider .... 626
Analiza ProviderBase .................................................................................................627
Tworzenie wasnych klas dostawcw .......................................................................628
Tworzenie aplikacji CustomProvider ................................................................629
Tworzenie wymaganego szkieletu klasy ............................................................630
Tworzenie magazynu danych w formacie XML ..............................................633
Definiowanie egzemplarza dostawcy w pliku web.config ...............................634
Niezaimplementowane metody i waciwoci klasy MembershipProvider ....... 635
Implementacja metod i waciwoci klasy MembershipProvider ..................636
Korzystanie z XmlMembershipProvider podczas logowania uytkownika ....... 643
Rozszerzanie istniejcych dostawcw ......................................................................645
Ograniczenie moliwoci zarzdzania rolami za pomoc nowego
dostawcy LimitedSqlRoleProvider ..................................................................645
Korzystanie z nowej klasy dostawcy LimitedSqlRoleProvider .......................649
Podsumowanie ............................................................................................................653
Rozdzia 13. Nawigacja witryny ......................................................................................655
Mapy witryny w postaci plikw XML ......................................................................656
Kontrolka serwerowa SiteMapPath ..........................................................................658
Waciwo PathSeparator ..................................................................................660
Waciwo PathDirection ..................................................................................662
Waciwo ParentLevelsDisplayed ...................................................................662
Waciwo ShowToolTips .................................................................................663
Elementy potomne kontrolki SiteMapPath ......................................................663
Kontrolka serwerowa TreeView ...............................................................................663
Wbudowane style kontrolki TreeView ..............................................................668
Badanie skadnikw kontrolki TreeView ..........................................................669
Wizanie kontrolki TreeView z plikiem XML .................................................669
Wybr wielu opcji w kontrolce TreeView ........................................................672
Przypisywanie do kontrolki TreeView wasnych ikon ....................................675
Uywanie linii w celu poczenia wzw .........................................................677
Programistyczna praca z kontrolk TreeView .................................................678
Kontrolka serwerowa Menu ......................................................................................683
Przypisywanie do kontrolki Menu rnych stylw .........................................685
Zdarzenia kontrolki Menu ..................................................................................690
Wizanie kontrolki Menu z plikiem XML ........................................................690

Spis treci 15

Dostawca danych SiteMap ........................................................................................692


ShowStartingNode ...............................................................................................693
StartFromCurrentNode .......................................................................................693
StartingNodeOffset ..............................................................................................694
StartingNodeUrl ...................................................................................................695
SiteMap API ................................................................................................................695
Mapowanie adresw URL .........................................................................................698
Lokalizacja mapy witryny ..........................................................................................699
Tworzenie pliku Web.sitemap korzystajcego z lokalizacji ............................699
Wprowadzanie modyfikacji w pliku Web.config .............................................700
Tworzenie plikw podzespow z zasobami (.resx) ........................................701
Testowanie wynikw ............................................................................................702
Security trimming .......................................................................................................704
Ustawienie zarzdzania rolami dla administratorw ......................................704
Ustawianie sekcji administratorw ....................................................................705
Wczanie security trimming ..............................................................................707
Zagniedanie plikw SiteMap .................................................................................708
Podsumowanie ............................................................................................................710
Rozdzia 14. Personalizacja .............................................................................................711
Model personalizacji ..................................................................................................712
Tworzenie waciwoci personalizacji .....................................................................713
Dodawanie prostej waciwoci personalizacji .................................................713
Korzystanie z waciwoci personalizacji ..........................................................714
Dodawanie grup waciwoci personalizacji .....................................................718
Korzystanie z grupowanych waciwoci personalizacji .................................719
Definiowanie typw waciwoci personalizacji ..............................................719
Korzystanie z wasnych typw ............................................................................720
Ustawianie wartoci domylnych .......................................................................722
Tworzenie waciwoci personalizacji tylko do odczytu .................................723
Personalizacja anonimowa ........................................................................................723
Umoliwienie anonimowej identyfikacji uytkownikw ...............................723
Praca z anonimow identyfikacj .......................................................................726
Anonimowe opcje waciwoci personalizacji ..................................................727
Uwagi na temat przechowywania
profilw anonimowych uytkownikw ..........................................................728
Programowy dostp do personalizacji .....................................................................729
Migracja uytkownikw anonimowych ............................................................729
Personalizacja profilw ........................................................................................731
Okrelanie, czy korzysta z automatycznego zapisu .......................................732
Dostawcy personalizacji .............................................................................................733
Praca z baz SQL Server Express Edition ..........................................................733
Praca z Microsoft SQL Server 7.0, 2000, 2005, 2008 ........................................734
Korzystanie z wielu dostawcw ..........................................................................736
Zarzdzanie profilami aplikacji ................................................................................737
Waciwoci klasy ProfileManager .....................................................................737

16 ASP.NET 4 Z WYKORZYSTANIEM C# I VB. ZAAWANSOWANE PROGRAMOWANIE


Metody klasy ProfileManager .............................................................................738
Tworzenie strony ProfileManager.aspx ............................................................739
Omwienie kodu strony ProfileManager.aspx .................................................742
Uruchomienie strony ProfileManager.aspx .....................................................743
Podsumowanie ............................................................................................................744
Rozdzia 15. Czonkostwo i zarzdzanie rolami ............................................................745
Uwierzytelnianie w ASP.NET 4 ................................................................................746
Konfigurowanie systemu czonkostwa w witrynie ..........................................746
Wstawianie uytkownikw .................................................................................749
Pobieranie danych uwierzytelniajcych ............................................................763
Praca z zarejestrowanymi uytkownikami ........................................................771
Pokazywanie liczby uytkownikw online .......................................................773
Obsuga hase ........................................................................................................775
Autoryzacja w ASP.NET 4 .........................................................................................779
Korzystanie z kontrolki serwerowej LoginView ..............................................780
Konfiguracja systemu zarzdzania rolami w witrynie .....................................782
Dodawanie i pobieranie rl w aplikacji .............................................................785
Usuwanie rl .........................................................................................................788
Dodawanie uytkownikw do rl ......................................................................789
Pobieranie wszystkich uytkownikw okrelonej roli .....................................789
Pobieranie wszystkich rl okrelonego uytkownika ......................................791
Usuwanie uytkownikw z rl ...........................................................................792
Sprawdzanie, czy uytkownicy przypisani s do rl ........................................792
Wyjanienie sposobu buforowania rl ..............................................................793
Korzystanie z narzdzia Web Site Administration Tool .......................................794
Publiczne metody interfejsu API czonkostwa .......................................................794
Publiczne metody interfejsu API rl ........................................................................794
Podsumowanie ............................................................................................................796
Rozdzia 16. Platforma portalowa i kontrolki Web Parts ..............................................797
Wprowadzenie do kontrolek Web Parts .................................................................798
Tworzenie dynamicznych i modularnych portali ..................................................799
Wprowadzenie do kontrolki WebPartManager ...............................................800
Praca z ukadami stref ..........................................................................................801
Omwienie kontrolki WebPartZone .................................................................804
Zezwolenie uytkownikowi na zmian trybu strony .......................................806
Modyfikacja stref ..................................................................................................817
Praca z klasami platformy portalowej ......................................................................823
Tworzenie wasnych kontrolek Web Parts .............................................................827
czenie kontrolek Web Parts ..................................................................................833
Tworzenie dostawcy Web Part ...........................................................................834
Tworzenie kontrolki Web Part konsumenta ....................................................837
czenie kontrolek Web Parts na stronie ASP.NET .......................................838
Trudnoci podczas czenia kontrolek Web Parts
przy stosowaniu stron wzorcowych ................................................................841
Podsumowanie ............................................................................................................842

Spis treci 17

Rozdzia 17. Projektowanie za pomoc jzykw HTML i CSS w ASP.NET ...................843


Uwagi ............................................................................................................................844
Oglne informacje na temat HTML-a oraz CSS-a .................................................844
Tworzenie arkuszy stylw ...................................................................................846
Reguy jzyka CSS .................................................................................................848
Dziedziczenie w jzyku CSS ................................................................................857
Ukad i pooenie elementw .............................................................................858
Praca z HTML-em oraz CSS-em w Visual Studio ...........................................866
Zarzdzanie wzgldnymi hiperczami do plikw CSS
na stronach wzorcowych ...................................................................................872
Przypisywanie stylu do kontrolek ASP.NET ....................................................872
Podsumowanie ............................................................................................................873
Rozdzia 18. ASP.NET AJAX ..............................................................................................875
Zrozumienie potrzeby stosowania AJAX-a ............................................................875
Przed technologi AJAX ............................................................................................876
AJAX zmienia ten stan rzeczy .............................................................................877
ASP.NET AJAX oraz Visual Studio 2010 ................................................................880
Technologie po stronie klienta ...........................................................................880
Technologie dziaajce po stronie serwera .......................................................881
Tworzenie aplikacji za pomoc ASP.NET AJAX .............................................882
Tworzenie aplikacji ASP.NET AJAX .......................................................................883
Tworzenie prostej strony ASP.NET niekorzystajcej z AJAX-a ....................884
Tworzenie prostej strony ASP.NET z uyciem AJAX-a .................................886
Kontrolki ASP.NET AJAX po stronie serwera .......................................................891
Kontrolka ScriptManager ....................................................................................892
Kontrolka ScriptManagerProxy .........................................................................894
Kontrolka Timer ...................................................................................................896
Kontrolka UpdatePanel .......................................................................................897
Kontrolka UpdateProgress ..................................................................................901
Korzystanie z wielu kontrolek UpdatePanel ...........................................................904
Praca z histori stron ..................................................................................................908
czenie skryptw ......................................................................................................913
Podsumowanie ............................................................................................................917
Rozdzia 19. ASP.NET AJAX Control Toolkit ...................................................................919
Pobieranie i instalowanie zestawu AJAX Control Toolkit ....................................921
Kontrolki ASP.NET AJAX ........................................................................................922
Kontrolki rozszerzajce ASP.NET AJAX Control Toolkit .............................924
AlwaysVisibleControlExtender ..........................................................................924
AnimationExtender ..............................................................................................927
AutoCompleteExtender .......................................................................................928
CalendarExtender .................................................................................................931
CollapsiblePanelExtender ...................................................................................933
ColorPickerExtender ...........................................................................................935
ConfirmButtonExtender oraz ModalPopupExtender .....................................936

18 ASP.NET 4 Z WYKORZYSTANIEM C# I VB. ZAAWANSOWANE PROGRAMOWANIE


DragPanelExtender ..............................................................................................938
DropDownExtender .............................................................................................940
DropShadowExtender .........................................................................................942
DynamicPopulateExtender .................................................................................944
FilteredTextBoxExtender ....................................................................................948
HoverMenuExtender ...........................................................................................949
ListSearchExtender ...............................................................................................951
MaskedEditExtender oraz MaskedEditValidator ............................................952
MutuallyExclusiveCheckBoxExtender ..............................................................954
NumericUpDownExtender .................................................................................956
PagingBulletedListExtender ................................................................................957
PopupControlExtender .......................................................................................958
ResizableControlExtender ...................................................................................960
RoundedCornersExtender ..................................................................................962
SliderExtender i MultiHandleSliderExtender ..................................................963
SlideShowExtender ...............................................................................................964
TextBoxWatermarkExtender ..............................................................................967
ToggleButtonExtender .........................................................................................968
UpdatePanelAnimationExtender .......................................................................970
ValidationCalloutExtender .................................................................................971
Kontrolki serwerowe ASP.NET AJAX Control Toolkit ........................................972
Kontrolka Accordion ...........................................................................................973
CascadingDropDown ..........................................................................................975
Kontrolka NoBot ..................................................................................................978
Kontrolka PasswordStrength ..............................................................................980
Kontrolka Rating ..................................................................................................981
Kontrolka TabContainer .....................................................................................982
Podsumowanie ............................................................................................................984
Rozdzia 20. Bezpieczestwo ..........................................................................................985
Techniki uwierzytelniania .........................................................................................986
Wze <authentication> ......................................................................................987
Uwierzytelnianie Windows .................................................................................988
Uwierzytelnianie na podstawie formularzy ......................................................997
Uwierzytelnianie z wykorzystaniem mechanizmu Microsoft Passport ......1008
Uwierzytelnianie w dostpie do okrelonych plikw i katalogw .....................1008
Autoryzacja programowa ........................................................................................1009
Waciwo User.Identity ..................................................................................1009
Metoda User.IsInRole() .....................................................................................1011
Uzyskiwanie dodatkowych informacji z obiektu WindowsIdentity ...........1012
Element <identity> i tryb personifikacji ................................................................1014
Zabezpieczenia serwera IIS .....................................................................................1016
Ograniczenie zakresu adresw IP i nazw domenowych ...............................1016
Rozszerzenia plikw ...........................................................................................1018
Korzystanie z konsoli ASP.NET MMC ...........................................................1019
Konsola menedera usugi IIS 7.0 ....................................................................1022
Podsumowanie ..........................................................................................................1022

Spis treci 19

Rozdzia 21. Zarzdzanie informacjami o stanie aplikacji ..........................................1023


Jakie opcje s do wyboru? ........................................................................................1024
Obiekt Session platformy ASP.NET ......................................................................1027
Sesje a model zdarze ........................................................................................1027
Konfiguracja mechanizmu zarzdzania sesj .................................................1029
Sesje wewntrzprocesowe ..................................................................................1030
Sesje pozaprocesowe ..........................................................................................1039
Sesje zapisywane w serwerach SQL ..................................................................1044
Rozszerzenie sesji o inne mechanizmy dostawcw danych .........................1048
Sesje bez plikw cookie ......................................................................................1049
Wybr odpowiedniego sposobu podtrzymywania sesji ................................1050
Obiekt Application ...................................................................................................1051
acuchy zapytania ..................................................................................................1052
Dane cookie ...............................................................................................................1053
Odsyanie danych i przekazywanie danych midzy stronami ............................1053
Ukryte pola formularza, mechanizmy ViewState oraz ControlState ................1056
Wykorzystanie kolekcji HttpContext.Current.Items
do przechowywania krtkookresowych wartoci ..............................................1061
Podsumowanie ..........................................................................................................1062
Rozdzia 22. Buforowanie ..............................................................................................1063
Buforowanie ..............................................................................................................1064
Buforowanie danych wyjciowych ...................................................................1064
Buforowanie czci strony (kontrolek uytkownika) ....................................1068
Podmiana wartoci w buforowanej treci .......................................................1069
Buforowanie po stronie klienta i obiekt HttpCachePolicy ...........................1071
Buforowanie programowe .......................................................................................1074
Buforowanie danych za pomoc obiektu Cache ............................................1074
Nadzorowanie pracy pamici podrcznej rodowiska ASP.NET ................1075
Zalenoci wpisw pamici podrcznej ..........................................................1075
Nowe moliwoci obiektu Caching w .NET 4 ................................................1081
Zalenoci bufora SQL .............................................................................................1084
Wczanie uniewaniania bufora SQL dla baz danych .................................1085
Dodanie tabeli do list tabel uwzgldnianych w zalenociach bufora SQL ...1085
SQL Server 2000 ..................................................................................................1086
Analiza wczonych tabel ..................................................................................1087
Usunicie tabeli z listy tabel uwzgldnianych
w zalenociach bufora SQL .................................................................................... 1087
Usunicie bazy danych z listy baz uwzgldnianych
w zalenociach bufora SQL .................................................................................1088
Zalenoci bufora SQL w bazach danych SQL Server 2005 i 2008 ..............1088
Konfiguracja aplikacji ASP.NET ............................................................................1089
Testowanie mechanizmu uniewaniania danych bufora SQL ...........................1091
Odwoanie do wicej ni jednej tabeli w kodzie strony ................................1093
Powizanie zalenoci bufora SQL z obiektem Request ...............................1094
Powizanie zalenoci bufora SQL z obiektem Cache ..................................1094
Podsumowanie ..........................................................................................................1098

20 ASP.NET 4 Z WYKORZYSTANIEM C# I VB. ZAAWANSOWANE PROGRAMOWANIE


Rozdzia 23. Debugowanie i obsuga bdw ..............................................................1099
Wsparcie w czasie projektowania ...........................................................................1100
Powiadomienia o bdach skadni ....................................................................1100
Okna Immediate i Command ...........................................................................1102
Lista zada ...........................................................................................................1103
ledzenie kodu ..........................................................................................................1104
Klasy System.Diagnostic.Trace oraz Page.Trace w ASP.NET ......................1104
ledzenie kodu na poziomie strony .................................................................1104
ledzenie pracy aplikacji ....................................................................................1105
Przegldanie danych wynikowych ...................................................................1105
ledzenie pracy komponentw .........................................................................1109
Przekazywanie danych ze ledzenia kodu .......................................................1111
Obiekty TraceListener .......................................................................................1112
Przeczniki diagnostyczne ...............................................................................1116
Zdarzenia sieciowe .............................................................................................1118
Debugowanie .............................................................................................................1120
Potrzebne elementy ............................................................................................1120
Usugi IIS i ASP.NET Development Server ....................................................1121
Uruchomienie sesji debugowania ....................................................................1123
Narzdzia uatwiajce debugowanie ................................................................1126
Debugowanie historii za pomoc mechanizmu IntelliTrace ........................1130
Debugowanie kodu wielowtkowego ..............................................................1132
Debugowanie klienckiego kodu w jzyku JavaScript ....................................1132
Debugowanie procedur skadowanych SQL ...................................................1134
Wyjtki i obsuga bdw ........................................................................................1135
Przechwytywanie wyjtku na stronie ...............................................................1136
Obsuga wyjtkw aplikacji ...............................................................................1137
Kody statusowe HTTP .......................................................................................1138
Podsumowanie ..........................................................................................................1140
Rozdzia 24. Pliki i strumienie .......................................................................................1141
Dyski, katalogi i pliki ................................................................................................1141
Klasa DriveInfo ...................................................................................................1142
Klasy Directory i DirectoryInfo ........................................................................1146
Klasy File i FileInfo .............................................................................................1153
Przetwarzanie cieek dostpu .........................................................................1159
Waciwoci plikw i katalogw, ich atrybuty oraz listy kontroli dostpu ....1163
Odczyt i zapis plikw ...............................................................................................1170
Strumienie ...........................................................................................................1171
Obiekty odczytu i zapisu ...................................................................................1178
Kompresowanie danych strumieni ..................................................................1184
Pliki odwzorowane w pamici ..........................................................................1186
Wykorzystanie portw szeregowych .....................................................................1188
Komunikacja midzyprocesowa z wykorzystaniem potokw ............................1190

Spis treci 21

Komunikacja sieciowa .............................................................................................1191


Klasy WebRequest i WebResponse ..................................................................1191
Przesyanie poczty elektronicznej ....................................................................1197
Podsumowanie ..........................................................................................................1198
Rozdzia 25. Kontrolki uytkownika i kontrolki serwerowe .......................................1199
Kontrolki uytkownika ............................................................................................1200
Utworzenie kontrolki uytkownika .................................................................1200
Interakcje z kontrolkami uytkownika ............................................................1202
Dynamiczne adowanie kontrolek uytkownika ............................................1204
Kontrolki serwerowe ................................................................................................1209
Projekty kontrolek serwerowych ......................................................................1210
Atrybuty sterujce ..............................................................................................1214
Wywietlanie kontrolki ......................................................................................1215
Dodawanie atrybutw znacznikw ..................................................................1220
Definicje stylu HTML ........................................................................................1222
Motywy tematyczne i skrki .............................................................................1225
Dodanie elementw kodu klienckiego ............................................................1226
Wykrywanie parametrw przegldarki ...........................................................1236
Mechanizm ViewState .......................................................................................1238
Wywoywanie zdarze powodujcych odesanie strony ...............................1242
Obsuga odsyanych danych .............................................................................1246
Kontrolki zoone ...............................................................................................1248
Kontrolki szablonowe ........................................................................................1251
Zachowanie kontrolki w rodowisku projektowym ......................................1256
Podsumowanie ..........................................................................................................1273
Rozdzia 26. Moduy i obsuga da ...........................................................................1275
Przetwarzanie da HTTP ....................................................................................1275
IIS 6 i ASP.NET ..................................................................................................1276
IIS 7 i ASP.NET ..................................................................................................1276
Przetwarzanie da ASP.NET ........................................................................1277
Moduy HTTP ...........................................................................................................1278
Procedury obsugi da HTTP .............................................................................1283
Standardowe mechanizmy obsugi da .......................................................1283
Odwzorowanie rozszerzenia pliku w serwerze IIS .........................................1287
Podsumowanie ..........................................................................................................1290
Rozdzia 27. ASP.NET MVC .............................................................................................1291
Definiowanie modelu MVC ....................................................................................1292
Model MVC w dzisiejszej sieci WWW ..................................................................1292
Wzorzec MVC i ASP.NET ......................................................................................1294
Dostarczanie metod, a nie plikw ....................................................................1294
Czy to ju Web Forms 4.0? ................................................................................1294
A dlaczego nie Web Forms? ..............................................................................1295
ASP.NET MVC to co zupenie innego! .........................................................1295

22 ASP.NET 4 Z WYKORZYSTANIEM C# I VB. ZAAWANSOWANE PROGRAMOWANIE


Dlaczego (ASP.NET > ASP.NET MVC) == True ......................................1296
Konwencja przed konfiguracj .........................................................................1298
Do trzech da sztuka ......................................................................................1301
cieki i adresy URL ...........................................................................................1304
Routing adresw a ich przepisywanie ..............................................................1305
Definiowanie cieek ..........................................................................................1305
Kontrolery ..................................................................................................................1310
Definiowanie kontrolera: interfejs IController ..............................................1310
Klasa Controller i akcje ......................................................................................1311
Praca z parametrami ..........................................................................................1312
Praca z wieloma parametrami ..........................................................................1313
Widoki ........................................................................................................................1313
Definiowanie widoku .........................................................................................1314
Widoki o zdefiniowanym typie ........................................................................1316
Stosowanie metod pomocniczych HTML .......................................................1317
Klasa HtmlHelper i metody rozszerze ..........................................................1317
Podsumowanie ..........................................................................................................1319
Rozdzia 28. Obiekty biznesowe ...................................................................................1321
Korzystanie z obiektw biznesowych w rodowisku ASP.NET 4 ......................1322
Tworzenie wstpnie skompilowanych obiektw biznesowych
platformy .NET ..................................................................................................1322
Wykorzystanie wstpnie skompilowanych obiektw biznesowych
w aplikacji ASP.NET .......................................................................................1325
Wykorzystanie komponentw COM w rodowisku .NET ...................................1326
Komponent Runtime Callable Wrapper .........................................................1326
Wykorzystanie obiektw COM w kodzie ASP.NET .....................................1328
Obsuga bdw ..................................................................................................1332
Wdraanie komponentw COM w aplikacjach .NET ..................................1335
Odwoania do kodu .NET z poziomu kodu niezarzdzanego ............................1337
Modu COM-Callable Wrapper .......................................................................1338
Wspdziaanie komponentw .NET z obiektami COM .............................1340
Wczesne czy pne wizanie ............................................................................1343
Obsuga bdw ..................................................................................................1344
Wdraanie komponentw .NET z aplikacjami COM ...................................1346
Podsumowanie ..........................................................................................................1347
Rozdzia 29. Platforma ADO.NET Entity .......................................................................1349
Czy moemy zacz mwi tym samym jzykiem? .............................................1350
Warstwy pojciowa i logiczna ...........................................................................1351
Odwzorowywanie midzy warstwami .............................................................1351
Tworzenie pierwszego modelu EDM .....................................................................1352
Korzystanie z kreatora EDM .............................................................................1353
Uywanie okna projektowego platformy ADO.NET Entity ........................1355
Budowanie strony ASP.NET korzystajcej z modelu EDM .........................1356

Spis treci 23

Wprowadzenie do relacji .........................................................................................1358


Relacje jeden do jednego i jeden do wielu .......................................................1359
Relacje wiele do jednego i wiele do wielu ........................................................1362
Stosowanie dziedziczenia w modelu EDM ...........................................................1365
Stosowanie procedur skadowanych ......................................................................1368
Stosowanie kontrolki EntityDataSource ...............................................................1371
Tworzenie podstawowej strony ........................................................................1372
Konfigurowanie kontrolki EntityDataSource ................................................1373
Podsumowanie ..........................................................................................................1376
Rozdzia 30. ASP.NET Dynamic Data ............................................................................1377
Tworzenie aplikacji bazowej za pomoc Visual Studio 2010 .............................1377
Podstawowe pliki umieszczone w domylnej aplikacji .................................1378
Aplikacja Dynamic Data ....................................................................................1379
Podczanie bazy danych ...................................................................................1386
Rejestrowanie modelu danych w pliku Global.asax ......................................1389
Style i ukad strony .............................................................................................1391
Efekt dziaania aplikacji .....................................................................................1391
Praca z dynamicznymi ciekami ...........................................................................1395
Kontrola wywietlania ..............................................................................................1399
Dodawanie technologii Dynamic Data do istniejcych stron ............................1401
Podsumowanie ..........................................................................................................1404
Rozdzia 31. Budowanie i wykorzystywanie usug ......................................................1405
Komunikacja midzy rozproszonymi systemami ................................................1406
Budowa prostej XML-owej usugi sieciowej .........................................................1408
Dyrektywa WebService ......................................................................................1409
Plik klasy bazowej usugi sieciowej ..................................................................1409
Udostpnianie niestandardowych zbiorw danych
w formie dokumentw SOAP ........................................................................1411
Interfejs usugi sieciowej ....................................................................................1413
Korzystanie z nieskomplikowanych XML-owych usug sieciowych .................1416
Dodawanie odwoania .......................................................................................1417
Wywoywanie usugi sieciowej w kodzie aplikacji klienckiej .......................1419
Przecianie metod sieciowych ...............................................................................1421
Buforowanie odpowiedzi usug sieciowych ..........................................................1424
Nagwki SOAP ........................................................................................................1424
Tworzenie usug sieciowych uwzgldniajcych nagwki SOAP ...................1425
Wykorzystanie nagwkw SOAP w odwoaniach do usugi sieciowej ........1427
Wykorzystanie da SOAP 1.2 .......................................................................1429
Asynchroniczne odwoania do usug sieciowych .................................................1431
Windows Communication Foundation ................................................................1434
Krok w stron architektury opartej na usugach ............................................1434
Przegld technologii WCF ................................................................................1435
Tworzenie usug WCF .......................................................................................1436

24 ASP.NET 4 Z WYKORZYSTANIEM C# I VB. ZAAWANSOWANE PROGRAMOWANIE


Aplikacja korzystajca z usugi WCF .....................................................................1443
Dodanie odwoania do usugi ...........................................................................1444
Kontrakty danych ...............................................................................................1447
Przestrzenie nazw ...............................................................................................1451
Korzystanie z usug WCF Data Service .................................................................1452
Tworzenie pierwszej usugi .....................................................................................1453
Dodawanie modelu EDM ..................................................................................1453
Tworzenie usugi ................................................................................................1455
Kierowanie zapyta do interfejsu ...........................................................................1460
Wczytywanie tabel z danymi ............................................................................1461
Wczytywanie konkretnych elementw z tabeli ..............................................1462
Zarzdzanie relacjami ........................................................................................1464
Rozwijanie powiza .........................................................................................1467
Porzdkowanie zbiorw wynikw ...................................................................1470
Poruszanie si po zbiorach wynikw ...............................................................1471
Filtrowanie danych .............................................................................................1471
Uywanie usug WCF Data Service w aplikacjach ASP.NET .............................1473
Podsumowanie ..........................................................................................................1476
Rozdzia 32. Budowanie aplikacji midzynarodowych ..............................................1477
Ustawienia kulturowe i regionalne ........................................................................1477
Typy kulturowe ...................................................................................................1478
Wtki ASP.NET ..................................................................................................1480
Ustawienia kulturowe serwera ..........................................................................1482
Ustawienia kulturowe klienta ...........................................................................1484
Tumaczenie wartoci i zmiana sposobu zachowania aplikacji ...................1485
Pliki zasobw ASP.NET 4 ........................................................................................1493
Wykorzystanie zasobw lokalnych ..................................................................1493
Wykorzystanie zasobw globalnych ................................................................1499
Edytor zasobw .........................................................................................................1502
Podsumowanie ..........................................................................................................1502
Rozdzia 33. Konfiguracja ..............................................................................................1503
Oglne informacje na temat konfiguracji .............................................................1504
Pliki konfiguracyjne serwera .............................................................................1505
Plik konfiguracyjny aplikacji ............................................................................1507
W jaki sposb s odczytywane ustawienia konfiguracyjne? .........................1508
Wykrywanie zmian w plikach konfiguracyjnych ...........................................1509
Format pliku konfiguracyjnego ........................................................................1509
Wsplne ustawienia konfiguracyjne ......................................................................1510
acuchy pocze .............................................................................................1510
Konfiguracja stanu sesji .....................................................................................1511
Konfiguracja kompilacji ....................................................................................1516
Parametry przegldarek .....................................................................................1518
Niestandardowe komunikaty o bdach ..........................................................1520
Uwierzytelnianie .................................................................................................1521

Spis treci 25

Identyfikacja uytkownikw anonimowych ...................................................1525


Autoryzacja ..........................................................................................................1526
Blokowanie ustawie konfiguracyjnych ..........................................................1528
Konfiguracja strony ASP.NET ..........................................................................1529
Wczane pliki .....................................................................................................1531
Parametry pracy rodowiska ASP.NET ...........................................................1532
Konfiguracja procesu roboczego ASP.NET ....................................................1535
Przechowywanie ustawie aplikacji .................................................................1538
Programowe przetwarzanie plikw konfiguracyjnych ..................................1538
Ochrona ustawie konfiguracyjnych ...............................................................1545
Edycja pliku konfiguracyjnego .........................................................................1549
Tworzenie wasnych sekcji konfiguracyjnych ......................................................1551
Wykorzystanie obiektu NameValueFileSectionHandler ..............................1551
Wykorzystanie obiektu DictionarySectionHandler ......................................1553
Wykorzystanie obiektu SingleTagSectionHandler ........................................1554
Wykorzystanie wasnej procedury obsugi ustawie konfiguracyjnych .....1555
Podsumowanie ..........................................................................................................1556
Rozdzia 34. Instrumentacja ..........................................................................................1559
Dzienniki zdarze .....................................................................................................1559
Odczytywanie informacji z dziennika zdarze ..............................................1560
Zapis informacji w dzienniku zdarze ............................................................1562
Wskaniki wydajnoci ..............................................................................................1565
Przegldanie wskanikw wydajnoci za pomoc narzdzi
administracyjnych .............................................................................................1566
Narzdzie administracyjne uruchamiane w przegldarce ............................1568
ledzenie kodu aplikacji ...........................................................................................1573
Monitorowanie kondycji aplikacji .........................................................................1574
Model dostawcy danych systemu monitorowania kondycji aplikacji .........1574
Konfiguracja systemu monitorowania kondycji aplikacji ............................1576
Zapis zdarze na podstawie parametrw konfiguracyjnych
uruchomienie przykadowej aplikacji ......................................................1583
Przekazywanie zdarze do serwera SQL .........................................................1584
Buforowanie zdarze sieciowych .....................................................................1587
Wysyanie informacji o zdarzeniach za pomoc poczty elektronicznej .....1590
Podsumowanie ..........................................................................................................1594
Rozdzia 35. Administracja i zarzdzanie .....................................................................1595
Aplikacja ASP.NET Web Site Administration Tool ............................................1595
Zakadka Home ..................................................................................................1597
Zakadka Security ...............................................................................................1597
Zakadka Application .........................................................................................1605
Zakadka Provider ..............................................................................................1609
Konfiguracja rodowiska ASP.NET w usugach IIS w systemie Windows 7 ...1610
Kompilacja platformy .NET ..............................................................................1612
Globalizacja platformy .NET ............................................................................1613
Profil platformy .NET ........................................................................................1613

26 ASP.NET 4 Z WYKORZYSTANIEM C# I VB. ZAAWANSOWANE PROGRAMOWANIE


Role platformy .NET ..........................................................................................1614
Poziomy zaufania platformy .NET ..................................................................1614
Uytkownicy platformy .NET ...........................................................................1615
Ustawienia aplikacji ...........................................................................................1616
Cigi poczenia ..................................................................................................1616
Strony i formanty ...............................................................................................1617
Dostawcy ..............................................................................................................1617
Stan sesji ...............................................................................................................1617
Poczta e-mail SMTP ...........................................................................................1618
Podsumowanie ..........................................................................................................1619
Rozdzia 36. Pakowanie i instalacja aplikacji ASP.NET ...............................................1621
Instalowane elementy ...............................................................................................1622
Czynnoci poprzedzajce instalacj .......................................................................1622
Metody instalowania aplikacji WWW ...................................................................1623
Program XCopy ..................................................................................................1624
Opcja Copy Web Site rodowiska Visual Studio ...........................................1626
Instalowanie wstpnie skompilowanej aplikacji WWW ..............................1630
Budowanie pakietw z witrynami ASP.NET ..................................................1631
Utworzenie programu instalatora ....................................................................1635
Szczegowa analiza opcji instalatora ....................................................................1642
Praca nad projektem instalacyjnym .................................................................1642
Edytor systemu plikw ......................................................................................1646
Edytor rejestru ....................................................................................................1650
Edytor typw plikw ..........................................................................................1651
Edytor interfejsu uytkownika ..........................................................................1652
Edytor niestandardowych operacji ..................................................................1654
Edytor warunkw uruchomienia .....................................................................1655
Podsumowanie ..........................................................................................................1656
Dodatek A

Wykorzystanie projektw wczeniejszych wersji ASP.NET ..................1657


Przenoszenie nie jest trudne ....................................................................................1657
czenie wersji uwierzytelnianie na podstawie formularzy ..........................1660
Aktualizacja zarezerwowane foldery ASP.NET ...............................................1661
Format XHTML stron ASP.NET 4 ........................................................................1662
Brak plikw .js w ASP.NET 4 ..................................................................................1664
Konwertowanie aplikacji ASP.NET 1.x w rodowisku Visual Studio 2010 ......1664
Przeniesienie aplikacji ze rodowiska ASP.NET 2.0 lub 3.5 do 4 ......................1668
Podsumowanie ..........................................................................................................1669

Dodatek B

Najwaniejsze narzdzia w ASP.NET .......................................................1671


atwiejsze debugowanie ..........................................................................................1671
rda informacji ......................................................................................................1677
Porzdkowanie kodu ................................................................................................1678
Rozszerzanie rodowiska ASP.NET .......................................................................1681
Narzdzia programistyczne oglnego przeznaczenia ...............................................1685
Podsumowanie ..........................................................................................................1688

Spis treci 27

Dodatek C

Silverlight 3 i ASP.NET ..............................................................................1689


Wprowadzenie ..........................................................................................................1690
Korzystanie z dodatku Silverlight ...........................................................................1692
Silverlight i JavaScript ..............................................................................................1700
Podsumowanie ..........................................................................................................1710

Dodatek D

Dynamiczne typy i jzyki ..........................................................................1711


Typy domniemane ....................................................................................................1711
Dynamic Language Runtime ..................................................................................1712
Dynamiczne wyszukiwanie .....................................................................................1715
Podsumowanie ..........................................................................................................1719

Dodatek E

Serwisy internetowe o ASP.NET ..............................................................1721


Blogi autorw ksiki oraz identyfikatory Twittera .............................................1721
Inne blogi na temat ASP.NET .................................................................................1721
Witryny internetowe ................................................................................................1722
Kanay Twittera warte zasubskrybowania .............................................................1722
Skorowidz ..................................................................................................1723

5
Praca ze stronami wzorcowymi

ZAWARTO ROZDZIAU:

Tworzenie stron wzorcowych i stron z zawartoci

Stosowanie stron wzorcowych do okrelania domylnych elementw

Programowe przypisywanie stron wzorcowych

Zagniedanie stron wzorcowych

Strony wzorcowe dla rnych przegldarek

Uywanie stron wzorcowych z technologi ASP.NET AJAX

Dziedziczenie wizualne jest wspaniaym usprawnieniem, z ktrego mona korzysta w ASP.NET


przy budowaniu stron WWW. Taka moliwo zostaa wprowadzona do ASP.NET w wersji
2.0. W efekcie otrzymujemy szans utworzenia pojedynczej strony wzorcowej, ktra moe by
potem uyta jako podstawa dla dowolnej iloci zwykych stron z zawartoci w aplikacjach
ASP.NET. Takie wzorce, zwane stronami wzorcowymi, zwikszaj produktywno, sprawiajc,
e aplikacje tworzy si atwiej. Prostsze jest take pniejsze zarzdzanie takimi aplikacjami. Visual
Studio 2010 daje nam pene wsparcie przy tworzeniu stron wzorcowych za pomoc projektanta
formularzy. Moliwoci projektowe s teraz wiksze ni kiedykolwiek wczeniej. W niniejszym rozdziale pokazane zostanie, jak wykorzysta strony wzorcowe w aplikacjach w najlepszy
moliwy sposb. Zaczniemy jednak od omwienia zalet wykorzystania stron wzorcowych.

Do czego potrzebne s strony wzorcowe?


W dzisiejszych czasach wikszo portali internetowych posiada wsplne elementy, ktre wykorzystywane s przez wikszo stron aplikacji. Przyjrzyjmy si dla przykadu stronie gwnej
serwisu Reuters News (pod adresem www.reuters.com). Z atwoci mona wyrni wsplne
elementy uywane na caym portalu. Oznaczono je na rysunku 5.1.

270 ROZDZIA 5. ADMINISTRA PRACA ZE STRONAMI WZORCOWYMI CJA I ZARZDZANIE

Rysunek 5.1

Na pokazanym zrzucie ekranu warto zwrci uwag midzy innymi na sekcj nagwka, sekcj nawigacji i sekcj stopki. Wikszo stron aplikacji korzysta z tych samych elementw. Przed
er stron wzorcowych take istniay sposoby umieszczania tych samych elementw na wszystkich stronach. W wikszoci przypadkw przy stosowaniu rnych rozwiza pojawiay si
problemy.
Niektrzy programici zwyczajnie kopiowali i wklejali kod wsplnych sekcji do kadej strony,
ktra go potrzebowaa. To dziaao, ale wymagao duego nakadu pracy. Istnieje jednak problem powaniejszy. Gdy potrzebna bya zmiana w jednej z tych sekcji, wtedy programista zmuszony by do przejrzenia wszystkich stron portalu i wprowadzenia do kadej ze stron podobnych
zmian. To nie jest oczywicie przyjemne. Istniej lepsze sposoby wykorzystania czasu.

Do czego potrzebne s strony wzorcowe? 271

W czasach klasycznego jzyka ASP (ang. Active Server Pages) popularnym rozwizaniem byo
umieszczenie wsplnych sekcji w pliku doczanym. Taki plik mg by potem umieszczany na
stronie w taki oto sposb:
<!--

#include virtual="/myIncludes/header.asp" -->

Problem podczas korzystania z plikw doczanych polega na tym, e naleao bra pod uwag
otwarte znaczniki jzyka HTML z nagwkowego pliku doczanego. Znaczniki musiay by
zamknite w gwnym dokumencie lub w kolejnym pliku doczanym (ze stopk). Bardzo trudno byo w takich sytuacjach utrzyma porzdek znacznikw jzyka HTML, zwaszcza wtedy, gdy
nad jednym projektem pracowao kilka osb. Strony internetowe czasami byy pokazywane
w dziwny sposb. Gdzie bowiem po drodze mg znale si niewaciwy lub nieistniejcy
znacznik zamykajcy lub otwierajcy. Trudno byo take pracowa z plikami doczanymi w projektancie formularzy. Uycie plikw doczanych powodowao, e projektant nie by w stanie
wywietli strony tak, jak powinna by pokazywana w przegldarce. Programista koczy pisanie strony w sekcjach i mia nadziej, e wszystkie kawaki w jaki sposb poskadaj si zgodnie
z planem. Wiele godzin byo marnowane na ciganie tabel otwartych w pliku doczanym
i prawdopodobnie zamknitych pniej!
Wraz z wprowadzeniem ASP.NET 1.0 w 2000 roku programici zaczli uywa kontrolek
uytkownika do ukrywania powtarzajcych si sekcji stron WWW. Mona byo na przykad
stworzy stron, ktra zawieraa nagwek, panel nawigacji i stopk, przecigajc i upuszczajc te sekcje kodu na kad stron, ktra tych elementw potrzebowaa.
Ta technika dziaaa, ale take powodowaa pewne problemy. Przed pojawieniem si rodowiska
Visual Studio 2005 oraz technologii ASP.NET 2.0 kontrolki uytkownika prowadziy do problemu omwionego przy okazji plikw doczanych. Podczas pracy w widoku projektanta stron
w rodowisku Visual Studio .NET 2002 i 2003 wsplne obszary byy wywietlane w postaci szarych prostoktw. To utrudniao tworzenie strony. Nie dao si zobaczy, jak tworzona wanie
strona wyglda, dopki projekt nie zosta skompilowany i uruchomiony w przegldarce. Kontrolki uytkownika nie byy te wolne od drugiego problemu dotyczcego plikw doczanych
naleao waciwie sparowa otwierajce i zamykajce znaczniki jzyka HTML umieszczone
w dwch rnych plikach. Generalnie kontrolki uytkownika s lepsze ni pliki doczane, ale to
take nie jest doskonay sposb na rozwizanie omawianych problemw w aplikacjach. Mona
zauway, e w rodowisku Visual Studio poprawiono kilka problemw zwizanych z renderowaniem zawartoci kontrolek uytkownika w oknie projektowym. Kontrolki uytkownika s
dobre wtedy, gdy trzeba umieci na stronach jakie niewielkie sekcje. Problem w dalszym cigu
nie jest rozwizany, gdy zachodzi potrzeba zastosowania ich jako wikszych wzorcw.
W wietle problemw pojawiajcych si przy plikach doczanych i kontrolkach uytkownika
grupa odpowiedzialna za rozwj ASP.NET wpada na pomys stron wzorcowych to nowy
sposb stosowania wzorcw w aplikacjach. Zmieniono dziki temu sposb, w jaki programici
atakowali ten problem. Strony wzorcowe umieszczone s poza tworzonymi stronami. Jest to
przeciwiestwo kontrolek uytkownika, ktre umieszczane byy na stronie i byy wielokrotnie
powielane. Strony wzorcowe pozwalaj oddzieli wsplne obszary, ktre umieszczane s na
kadej stronie, i obszary, ktre s unikatowe dla kadej ze stron. Wkrtce pokaemy, e praca
ze stronami wzorcowymi jest atwa i przyjemna. W kolejnym podpunkcie omwione zostan
podstawowe elementy pracy ze stronami wzorcowymi ASP.NET.

272 ROZDZIA 5. ADMINISTRA PRACA ZE STRONAMI WZORCOWYMI CJA I ZARZDZANIE

Podstawy stron wzorcowych


Strony wzorcowe w atwy sposb udostpniaj pewien wzorzec, ktry moe by stosowany
przez dowoln ilo stron ASP.NET w aplikacji. Prac ze stronami wzorcowymi rozpoczyna si
od utworzenia pliku wzorcowego, ktry bdzie wskazywany przez podstron, zwan rwnie
stron z zawartoci. Strony wzorcowe maj rozszerzenie .master, podczas gdy strony z zawartoci uywaj znanego ju rozszerzenia .aspx. Strony z zawartoci jako takie deklaruje si
wewntrz dyrektywy Page.
W pliku .master, ktry jest stron wzorcow, mona umieci praktycznie wszystko. Moe to
by nagwek, panel nawigacyjny lub stopka, ktre wykorzystywane s w caej aplikacji. Strona
z zawartoci obejmuje wtedy wszystkie elementy skadajce si na jej tre, ale bez elementw
umieszczonych na stronie wzorcowej. W czasie wykonywania aplikacji silnik ASP.NET czy te
elementy dla uytkownika w jedn stron. Na rysunku 5.2 pokazano diagram, ktry przedstawia zasad dziaania tego mechanizmu.

Rysunek 5.2

Jedn z przyjemniejszych rzeczy w trakcie pracy ze stronami wzorcowymi jest to, e podczas
tworzenia stron z zawartoci w IDE mona zobaczy podgld wzorca. W zwizku z tym, e
podczas pracy widoczna jest caa strona, znacznie atwiej mona j rozwija. Podczas pracy ze
stron z zawartoci wszystkie elementy pochodzce ze wzorca s wyszarzone i nie mona ich
modyfikowa. Elementy, ktre mona edytowa, s wyrnione. Te obszary robocze, zwane
obszarami zawartoci, s zdefiniowane w samej stronie wzorcowej. Na stronie wzorcowej okrela si obszary strony, ktre mog by uywane przez strony z zawartoci. Na stronie wzorcowej, jeeli zachodzi taka potrzeba, moe znale si wicej takich obszarw zawartoci. Na rysunku 5.3 pokazano stron wzorcow z kilkoma obszarami zawartoci.

Pisanie kodu stron wzorcowych 273

Rysunek 5.3

Patrzc na zrzut ekranu zaprezentowany na rysunku 5.3, mona zauway dwa zdefiniowane
obszary obszary zawartoci. Obszar zawartoci wyrniany jest w widoku Design za pomoc
jasnego prostokta z ramk w postaci punktw. W ten sposb reprezentowana jest kontrolka
ContentPlaceHolder. Oprcz tego, jeeli najedziemy kursorem myszy nad obszar zawartoci,
nad kontrolk pojawi si jej nazwa (pprzezroczysta). Moment najechania wskanikiem myszy nad kontrolk jest take ujty na rysunku 5.3.
Dla firm i instytucji wykorzystanie stron wzorcowych to idealne rozwizanie. Technologia ta
doskonale odpowiada typowym wymaganiom biznesowym. Wiele firm tworzy wszystkie swoje
strony intranetowe tak, e ich wygld i obsuga s podobne. Mog one teraz udostpni dziaom firmy stron wzorcow .master do stworzenia strony wydziau w intranecie. Taki proces zdecydowanie uatwia zachowanie jednolitego wygldu i podobnej obsugi strony w caym intranecie.

Pisanie kodu stron wzorcowych


Przyjrzyjmy si teraz poszczeglnym etapom budowania strony wzorcowej pokazanej wczeniej
na rysunku 5.3. Stron mona stworzy w dowolnym edytorze tekstowym, na przykad w Notatniku lub w narzdziu Visual Web Developer Express Edition, ale mona take uy nowego rodowiska Visual Studio 2010. W niniejszym rozdziale pokaemy, jak to si robi wanie
w rodowisku Visual Studio 2010.
Strony wzorcowe dodawane s do projektw w taki sam sposb jak zwyke strony .aspx
wystarczy podczas dodawania pliku do aplikacji wybra opcj Master Page. Pokazano to na
rysunku 5.4.

274 ROZDZIA 5. ADMINISTRA PRACA ZE STRONAMI WZORCOWYMI CJA I ZARZDZANIE

Rysunek 5.4

Dodawanie stron wzorcowych podobne jest do tworzenia zwykych stron .aspx. W oknie dialogowym Add New Item znajduje si element, ktry pozwala utworzy strony wzorcowe. Mona
skorzysta z modelu code-inline lub umieci kod dla strony w oddzielnym pliku. Jeeli nie
umiecimy kodu serwera w oddzielnym pliku, bdzie to oznaczao, e podczas tworzenia strony wzorcowej wykorzystywany jest model code-inline. Pozwala to utworzy pojedynczy plik
.master. Wybranie opcji Place code in separate file oznacza, e podczas tworzenia strony wykorzystywany jest model code-behind. Zaznaczenie pola wyboru Place code in separate file pozwala utworzy pojedyncz stron .master oraz skojarzony z ni plik .master.vb lub .master.cs.
Istnieje take moliwo osadzenia strony wzorcowej w innej stronie wzorcowej poprzez wybranie opcji Select master page. Pokazane jest to w dalszej czci rozdziau.
Przykadowa strona wzorcowa, ktra wykorzystuje model code-inline, pokazana jest na listingu 5.1.
Listing 5.1. Przykadowa strona wzorcowa
<%@ Master Language="VB" %>
<script runat="server">
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Strona wzorcowa mojej firmy</title>
<asp:ContentPlaceHolder id="head" runat="server">
</asp:ContentPlaceHolder>
</head>
<body>
<form id="form1" runat="server">
<table cellpadding="3" border="1">
<tr style="background:silver">

Pisanie kodu stron wzorcowych 275

<td colspan="2">
<h1>Strona domowa mojej firmy</h1>
</td>
</tr>
<tr>
<td>
<asp:ContentPlaceHolder ID="ContentPlaceHolder1"
runat="server">
</asp:ContentPlaceHolder>
</td>
<td>
<asp:ContentPlaceHolder ID="ContentPlaceHolder2"
runat="server">
</asp:ContentPlaceHolder>
</td>
</tr>
<tr>
<td colspan="2">
Copyright 2010 - Moja firma
</td>
</tr>
</table>
</form>
</body>
</html>

Jest to prosta strona wzorcowa. Wspaniae przy tworzeniu stron wzorcowych w Visual Studio
2010 jest to, e mona pracowa z ni w widoku kodu, ale mona rwnie przeczy si do widoku projektanta i utworzy t stron tak, jak tworzy si kad inn stron ASP.NET.
Rozpoczniemy od analizy kodu strony wzorcowej. Pierwszy wiersz to dyrektywa:
<%@ Master Language="VB" %>

Zamiast uywa dyrektywy Page tak, jak w zwykych stronach .aspx, dla stron wzorcowych uywa si dyrektywy Master. Pokazana strona wzorcowa korzysta tylko z jednego atrybutu, Language. Wartoci atrybutu Language jest w tym przypadku VB, ale oczywicie mona uy C#, jeeli
tworzy si strony wzorcowe z wykorzystaniem tego jzyka.
Pozostaa cz kodu strony wzorcowej wyglda tak samo jak kada inna strona .aspx. Mona
korzysta z kontrolek serwerowych, zwykego kodu w HTML-u i tekstu, obrazkw, zdarze oraz
wszystkich innych skadnikw wykorzystywanych na stronach .aspx. Oznacza to, e strona
wzorcowa moe obsugiwa zdarzenie Page_Load oraz inne potrzebne zdarzenia.
W kodzie pokazanym na listingu 5.1 warto zwrci uwag na wykorzystanie nowej kontrolki
serwerowej kontrolki <asp:ContentPlaceHolder>. Kontrolka definiuje obszary strony wzorcowej, w ktrym strona z zawartoci moe umieszcza swoje elementy:
<tr>
<td>
<asp:ContentPlaceHolder ID="ContentPlaceHolder1"
runat="server">
</asp:ContentPlaceHolder>
</td>
<td>
<asp:ContentPlaceHolder ID="ContentPlaceHolder2"

276 ROZDZIA 5. ADMINISTRA PRACA ZE STRONAMI WZORCOWYMI CJA I ZARZDZANIE


runat="server">
</asp:ContentPlaceHolder>
</td>
</tr>

W pokazanej stronie wzorcowej istniej dwa zdefiniowane obszary, gdzie mona umieszcza
zawarto. Strona zawiera oprcz tego obszar nagwka i obszar stopki. Zdefiniowane s take
dwa obszary, w ktrych strony dziedziczce mog wstawia swoje wasne elementy. Przyjrzyjmy
si teraz, w jaki sposb strona z zawartoci wykorzystuje t stron wzorcow.

Pisanie kodu strony z zawartoci


Gdy w aplikacji umieszczono ju stron wzorcow, to mona uy jej w stronach z zawartoci
w danej aplikacji. Kliknijmy prawym przyciskiem myszy w oknie Solution Explorer i wybierzmy
opcj Add New Item w celu utworzenia w aplikacji nowej strony z zawartoci.
Aby utworzy stron z zawartoci lub stron, ktra wykorzystuje stron wzorcow, w oknie dialogowym Add New Item spord wielu opcji naley wybra Web Form (zobacz rysunek 5.5). Zamiast jednak tworzy typow stron, trzeba zaznaczy pole Select master page. Dziki temu
mona poczy tworzony formularz z wybran stron wzorcow.

Rysunek 5.5

Po nazwaniu strony z zawartoci i klikniciu przycisku Add w oknie dialogowym Add New
Item pojawi si okno dialogowe Select a Master Page pokazane na rysunku 5.6.
Okno dialogowe pozwala wybra stron wzorcow, na podstawie ktrej tworzona bdzie strona
z zawartoci. Wyboru mona dokona spord wszystkich stron wzorcowych dostpnych
w aplikacji. W tym przypadku wybierzmy stron wzorcow pokazan na listingu 5.1 i kliknijmy
OK. W ten sposb tworzona jest nowa strona z zawartoci. Nowa strona jest zwyk stron
.aspx. Zawiera tylko kilka wierszy kodu. Pokazano to na listingu 5.2.

Pisanie kodu strony z zawartoci 277

Rysunek 5.6
Listing 5.2. Utworzona strona z zawartoci
<%@ Page Language="VB" MasterPageFile="~/Wrox.master" Title="" %>
<script runat="server">
</script>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1"
Runat="Server">
</asp:Content>

Strona z zawartoci nie rni si bardzo od typowej strony .aspx, ktr mielimy okazj tworzy wczeniej. Du rnic jest obecno w dyrektywie Page atrybutu MasterPageFile. Dziki
wykorzystaniu tego atrybutu mona wskaza, e ta konkretna strona .aspx tworzona jest na podstawie innej strony. Pooenie strony wzorcowej w aplikacji okrelone jest przez warto atrybutu MasterPageFile.
Kolejn du rnic jest to, e strona nie zawiera adnych znacznikw <form id="form1"
runat="server"> ani adnych otwierajcych i zamykajcych znacznikw jzyka HTML, ktre
w normalnej stronie .aspx powinny by obecne.
Strona z zawartoci moe si wydawa prosta, ale jeeli przeczymy si na widok projektanta
w Visual Studio 2010, wtedy bdzie mona dostrzec moliwoci, jakie daj strony wzorcowe.
Dziki dziedziczeniu wizualnemu otrzymujemy rezultat pokazany na rysunku 5.7.
Na pokazanym zrzucie ekranu mona zauway, e aby wykorzysta stron wzorcow z pliku
Wrox.master poprzez dziedziczenie wizualne, wystarczy doda atrybut MasterPageFile do dyrektywy Page. Korzystajc z widoku projektanta w rodowisku Visual Studio, mona take zobaczy, ktra strona wzorcowa jest obecnie uywana. Nazwa aktywnej strony wzorcowej pokazywana jest w prawym grnym rogu widoku Design. Jeeli sprbujemy klikn na wyszarzonym
obszarze reprezentujcym cz dziedziczon ze strony wzorcowej, wtedy bdzie mona zobaczy, e kursor si zmienia. Sygnalizuje to, e wykonanie tej operacji jest niemoliwe. Pokazano
to na rysunku 5.8 (kursor znajduje si nad sowem firmy).

278 ROZDZIA 5. ADMINISTRA PRACA ZE STRONAMI WZORCOWYMI CJA I ZARZDZANIE

Rysunek 5.7

Rysunek 5.8

Wszystkie wsplne obszary zdefiniowane w stronie wzorcowej s wyszarzone. Obszary zawartoci oznaczone w stronie wzorcowej za pomoc kontrolki serwerowej <asp:ContentPlaceHolder> s
pokazane wyranie i umoliwiaj wstawienie dodatkowych elementw. Do tych obszarw zawartoci mona wstawi dowolne elementy. Odbywa si to tak samo, jak w przypadku zwykych
stron .aspx. Przykad wykorzystania strony wzorcowej w stronie z zawartoci przedstawiono
na listingu 5.3.
Listing 5.3. Strona z zawartoci korzystajca ze strony wzorcowej Wrox.master
<%@ Page Language="VB" MasterPageFile="~/Wrox.master" %>
<script runat="server">
Protected Sub Button1_Click(ByVal sender As Object,
ByVal e As System.EventArgs)
Label1.Text = "Witaj, " & TextBox1.Text & "!"
End Sub

Pisanie kodu strony z zawartoci 279

</script>
<asp:Content ID="Content1" ContentPlaceHolderId="ContentPlaceHolder1"
runat="server">
<b>Wpisz swoje imi :</b><br />
<asp:Textbox ID="TextBox1" runat="server" />
<br />
<br />
<asp:Button ID="Button1" runat="server" Text="Zatwierd"
OnClick="Button1_Click" /><br />
<br />
<asp:Label ID="Label1" runat="server" Font-Bold="True" />
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderId="ContentPlaceHolder2"
runat="server">
<asp:Image ID="Image1" runat="server" ImageUrl="wrox.gif" />
</asp:Content>
<%@ Page Language="C#" MasterPageFile="~/Wrox.master" %>
<script runat="server">
protected void Button1_Click(object sender, System.EventArgs e)
{
Label1.Text = "Witaj, " + TextBox1.Text + "!";
}
</script>

Od razu mona zauway rnice. Jak ju wspomnielimy, strona nie posiada znacznika <form
id="form1" runat="server"> ani adnego otwierajcego lub zamykajcego znacznika <html>.
Te znaczniki nie s umieszczone na tej stronie, poniewa znajduj si na stronie wzorcowej.
Warto take zwrci uwag na now kontrolk serwerow <asp:Content>.
<asp:Content ID="Content1" ContentPlaceHolderId="ContentPlaceHolder1"
runat="server">
...
</asp:Content>

Kontrolka serwerowa <asp:Content> jest zdefiniowanym obszarem zawartoci, ktry pokrywa


si z okrelon kontrolk serwerow <asp:ContentPlaceHolder> strony wzorcowej. W pokazanym przykadzie mona zauway, e kontrolka serwerowa <asp:Content> czy si z kontrolk serwerow <asp:ContentPlaceHolder> strony wzorcowej posiadajc warto ID rwn
ContentPlaceHolder1. Na stronie z zawartoci nie trzeba si martwi ustawianiem pooenia
zawartoci, poniewa obszar zawsze jest definiowany przez stron wzorcow. W zwizku z tym
jedynym zmartwieniem jest umieszczenie waciwych elementw wewntrz dostpnych sekcji.
Pozosta cz pracy naley pozostawi stronie wzorcowej.
Tak samo jak w przypadku pracy ze zwykymi stronami .aspx, tak i w stronach z zawartoci
mona tworzy dowolne procedury obsugi zdarze. W tym przypadku wykorzystujemy tylko
jedn procedur obsugi zdarzenia wywoywana jest w momencie kliknicia przycisku zatwierdzajcego formularz. Utworzona strona .aspx, ktra korzysta ze strony wzorcowej oraz
kilku wstawionych elementw, pokazana jest na rysunku 5.9.

280 ROZDZIA 5. ADMINISTRA PRACA ZE STRONAMI WZORCOWYMI CJA I ZARZDZANIE

Rysunek 5.9

czenie rnych typw stron i jzykw


Jest jedna interesujca rzecz: podczas korzystania ze stron wzorcowych nie ma obowizku korzystania z jednego okrelonego modelu pisania kodu (code-inline lub code-behind), nie ma te
obowizku stosowania jednego okrelonego jzyka. Mona miao czy te elementy w aplikacji, poniewa wszystko bdzie dziaao doskonale.
Mona zatem wykorzysta wczeniej utworzon stron wzorcow, jeli si wie, e bya utworzona z wykorzystaniem modelu code-inline, a nastpnie utworzy stron z zawartoci za pomoc modelu code-behind. Na listingu 5.4 pokazano stron, ktra zostaa utworzona w modelu
code-behind.
Listing 5.4. Strona z zawartoci korzystajca z modelu code-behind
.aspx (VB)
<%@ Page Language="VB" MasterPageFile="~/Wrox.master" AutoEventWireup="false"
CodeFile="MyContentPage.aspx.vb" Inherits="MyContentPage" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderId="ContentPlaceHolder1"
runat="server">
<b>Wpisz swoje imi :</b><br />
<asp:Textbox ID="TextBox1" runat="server" />
<br />
<br />
<asp:Button ID="Button1" runat="server" Text="Zatwierd" /><br />
<br />
<asp:Label ID="Label1" runat="server" Font-Bold="True" />
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderId="ContentPlaceHolder2"
runat="server">
<asp:Image ID="Image1" runat="server" ImageUrl="wrox.gif" />
</asp:Content>

Pisanie kodu strony z zawartoci 281

VB (plik code-behind)
Partial Class MyContentPage
Inherits System.Web.UI.Page
Protected Sub Button1_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Label1.Text = "Witaj, " & TextBox1.Text & "!"
End Sub
End Class

C# (plik code-behind)
public partial class MyContentPage : System.Web.UI.Page
{
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = "Witaj, " + TextBox1.Text + "!";
}
}

Pomimo e strona wzorcowa korzysta z modelu code-inline, mona z atwoci tworzy strony z zawartoci (na przykad takie, jak ta pokazana na listingu 5.4), ktre wykorzystuj model
code-behind. Strony w dalszym cigu bd dziaay doskonale.
Samo czenie dwch modeli pisania kodu to nie wszystko, co mona zrobi przy stosowaniu
stron wzorcowych. Mona take miesza jzyki programowania uywane podczas pisania stron
wzorcowych i stron z waciw zawartoci. To, e strona wzorcowa utworzona jest za pomoc
jzyka C#, nie oznacza wcale, e jzyk C# musi by uywany na wszystkich stronach, ktre tej
strony wzorcowej uywaj. Strony z zawartoci mog by tworzone take w jzyku Visual Basic. Jako dobry przykad stwrzmy stron wzorcow w jzyku C#, ktra korzysta ze zdarzenia Page_Load, a nastpnie dodajmy do tego stron z zawartoci, ktra zostaa napisana w jzyku Visual Basic. Po zrobieniu wszystkiego jak naley sprbujmy uruchomi stron. Dziaa ona
doskonale. Oznacza to, e nawet wtedy, gdy strona wzorcowa napisana jest w jednym z dostpnych jzykw .NET, grupy programistyczne korzystajce podczas tworzenia aplikacji ze strony wzorcowej mog uywa takiego jzyka .NET, jakiego tylko chc. Warto pokocha otwarto,
ktr oferuje nam platforma .NET.

Okrelanie, ktrej strony wzorcowej uy


Pokazalimy ju, e wskazanie wykorzystywanej strony wzorcowej z poziomu strony jest atwe.
W dyrektywie Page strony z zawartoci wystarczy zastosowa atrybut MasterPageFile:
<%@ Page Language="VB" MasterPageFile="~/Wrox.master" %>

Oprcz wskazywania uywanej strony wzorcowej na poziomie strony istnieje drugi sposb wykonania tego samego zadania. Stron wzorcow mona okreli za pomoc pliku konfiguracyjnego aplikacji web.config. Pokazano to na listingu 5.5.

282 ROZDZIA 5. ADMINISTRA PRACA ZE STRONAMI WZORCOWYMI CJA I ZARZDZANIE


Listing 5.5. Wskazywanie strony wzorcowej w pliku web.config
<configuration>
<system.web>
<pages masterPageFile="~/Wrox.master" />
</system.web>
</configuration>

Wskazanie strony wzorcowej w pliku web.config spowoduje, e kada strona z zawartoci tworzona w aplikacji bdzie dziedziczya po okrelonej stronie wzorcowej. Jeeli stron zadeklarujemy w pliku web.config, wtedy bdzie mona tworzy dowoln ilo stron z zawartoci
i wszystkie one bd korzystay z podanej strony wzorcowej. Po wskazaniu strony w ten sposb
dyrektyw Page mona skonstruowa w nastpujcy sposb:
<%@ Page Language="VB" %>

Mona w atwy sposb przesoni to ustawienie dla caej aplikacji, deklarujc na stronie z zawartoci inn stron wzorcow:
<%@ Page Language="VB" MasterPageFile="~/MyOtherCompany.master" %>

Wskazanie strony wzorcowej w pliku web.config nie oznacza, e wszystkie strony .aspx musz
korzysta z tej strony wzorcowej. Jeeli stworzymy i uruchomimy zwyk stron Web Form,
rodowisko ASP.NET bdzie wiedziao, e nie jest to strona z zawartoci. Strona ta zostanie
przetworzona tak samo, jak zwyka strona .aspx.
Jeeli zachodzi potrzeba zastosowania strony wzorcowej tylko do okrelonego zestawu stron
(na przykad do stron umieszczonych w okrelonym katalogu aplikacji), wtedy mona uy
elementu <location> w pliku web.config. Pokazano to na listingu 5.6.
Listing 5.6. Wskazywanie strony wzorcowej dla okrelonego katalogu w pliku web.config
<configuration>
<location path="AdministrationArea">
<system.web>
<pages masterPageFile="~/WroxAdmin.master" />
</system.web>
</location>
</configuration>

Dodajc w pliku web.config sekcj <location>, mona wskaza, e okrelony katalog (AdministrationArea) bdzie uywa innego pliku strony wzorcowej. Zrealizowane jest to poprzez uycie atrybutu path elementu <location>. Wartoci atrybutu path moe by tak jak tutaj nazwa
katalogu, ale moe to by take okrelona strona na przykad AdminPage.aspx.

Praca z tytuem strony


Tworzc w aplikacji strony z zawartoci, naley zwrci uwag na jedn rzecz. Domylnie
wszystkie takie strony posiadaj tytu zadeklarowany na stronie wzorcowej. Pierwotnie uywalimy strony wzorcowej z tytuem Strona wzorcowa mojej firmy. Kada strona z zawartoci
tworzona na podstawie tej strony wzorcowej take miaa tytu Strona wzorcowa mojej firmy.
Mona to zmieni, korzystajc z atrybutu Title dyrektywy @Page na stronie z zawartoci.
Mona take programowo zmodyfikowa tytu wybranych stron z zawartoci. Aby tego doko-

Pisanie kodu strony z zawartoci 283

na, naley w kodzie strony z zawartoci uy obiektu Master. Obiekt Master posiada wygodn
waciwo o nazwie Title. Wartoci tej waciwoci jest tytu strony uywany przez strony
z zawartoci. Mona go zmieni w sposb pokazany na listingu 5.7.
Listing 5.7. Kod zmieniajcy tytu strony z zawartoci
<%@ Page Language="VB" MasterPageFile="~/Wrox.master" %>
<script runat="server">
Protected Sub Page_LoadComplete(ByVal sender As Object, _
ByVal e As System.EventArgs)
Master.Page.Title = "Strona zostaa wygenerowana: " & _
DateTime.Now.ToString()
End Sub
</script>
<%@ Page Language="C#" MasterPageFile="~/Wrox.master" %>
<script runat="server">
protected void Page_LoadComplete(object sender, EventArgs e)
{
Master.Page.Title = "Strona zostaa wygenerowana: " +
DateTime.Now.ToString();
}
</script>

Praca z kontrolkami i waciwociami strony wzorcowej


Pracujc ze stronami wzorcowymi z poziomu stron z zawartoci, mona w atwy sposb dosta
si do kontrolek i waciwoci udostpnionych przez stron wzorcow. Strona wzorcowa wskazywana przez stron z zawartoci posiada waciwo Master. Dziki tej waciwoci mona
pobra wartoci kontrolek lub innych waciwoci umieszczonych na samej stronie wzorcowej.
Aby zobaczy przykad tego mechanizmu, stwrzmy na stronie wzorcowej GUID (unikatowy
identyfikator), ktry bdzie pobierany przez stron z zawartoci korzystajc z tej strony wzorcowej.
Dla celw przykadu skorzystajmy ze strony wzorcowej pokazanej na listingu 5.1. Dodajmy jednak
do niej kontrolk serwerow Label oraz zdarzenie Page_Load. Pokazano to na listingu 5.8.
Listing 5.8. Strona wzorcowa tworzca identyfikator GUID podczas pierwszego dania
<%@ Master Language="VB" %>
<script runat="server">
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
If Not Page.IsPostBack Then
Label1.Text = System.Guid.NewGuid().ToString()
End If
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">

284 ROZDZIA 5. ADMINISTRA PRACA ZE STRONAMI WZORCOWYMI CJA I ZARZDZANIE


<title>Strona wzorcowa mojej firmy</title>
<asp:ContentPlaceHolder id="head" runat="server">
</asp:ContentPlaceHolder>
</head>
<body>
<form id="form1" runat="server">
<table cellpadding="3" border="1">
<tr bgcolor="silver">
<td colspan="2">
<h1>Strona domowa mojej firmy</h1>
<b>GUID uytkownika:&nbsp;&nbsp;
<asp:Label ID="Label1" runat="server" /></b>
</td>
</tr>
<tr>
<td>
<asp:ContentPlaceHolder ID="ContentPlaceHolder1"
runat="server">
</asp:ContentPlaceHolder>
</td>
<td>
<asp:ContentPlaceHolder ID="ContentPlaceHolder2"
runat="server">
</asp:ContentPlaceHolder>
</td>
</tr>
<tr>
<td colspan="2">
Copyright 2010 - Moja firma
</td>
</tr>
</table>
</form>
</body>
</html>
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
Label1.Text = System.Guid.NewGuid().ToString();
}
}

Teraz na stronie wzorcowej znajduje si kontrolka Label, do ktrej mona uzyska dostp
z poziomu strony z zawartoci. Jest kilka sposobw na wykonanie tego zadania. Pierwszy z nich
to wykorzystanie metody FindControl(), ktra jest udostpniana przez stron wzorcow. Taki
sposb rozwizania problemu pokazano na listingu 5.9.
Listing 5.9. Pobieranie wartoci Text kontrolki Label na stronie z zawartoci
<%@ Page Language="VB" MasterPageFile="~/wrox.master" %>
<script runat="server" language="vb">
Protected Sub Page_LoadComplete(ByVal sender As Object, _

Pisanie kodu strony z zawartoci 285

ByVal e As System.EventArgs)
Label1.Text = CType(Master.FindControl("Label1"), Label).Text
End Sub
Protected Sub Button1_Click(ByVal sender As Object, _
ByVal e As System.EventArgs)
Label2.Text = "Witaj, " & TextBox1.Text & "!"
End Sub
</script>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderId="ContentPlaceHolder1"
runat="server">
<b>Twj numer GUID ze strony wzorcowej to:<br />
<asp:Label ID="Label1" runat="server" /></b><p>
<b>Wpisz swoje imi :</b><br />
<asp:Textbox ID="TextBox1" runat="server" />
<br />
<br />
<asp:Button ID="Button1" runat="server" Text="Zatwierd"
OnClick="Button1_Click" /><br />
<br />
<asp:Label ID="Label2" runat="server" Font-Bold="True" /></p>
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderId="ContentPlaceHolder2"
runat="server">
<asp:Image ID="Image1" runat="server" ImageUrl="Wrox.gif" />
</asp:Content>
<%@ Page Language="C#" MasterPageFile="~/wrox.master" %>
<script runat="server">
protected void Page_LoadComplete(object sender, EventArgs e)
{
Label1.Text = (Master.FindControl("Label1") as Label).Text;
}
protected void Button1_Click(object sender, EventArgs e)
{
Label2.Text = "<b>Witaj " + TextBox1.Text + "!</b>";
}
</script>

W przykadzie pokazanym na listingu 5.8 strona wzorcowa tworzy identyfikator GUID i zapamituje go w postaci wartoci tekstowej w kontrolce serwerowej Label. Sama kontrolka jest take umieszczona na stronie wzorcowej. Wartoci ID kontrolki Label jest Label1. Strona wzorcowa generuje identyfikator GUID tylko podczas obsugi pierwszego dania tej konkretnej
strony. Od tego momentu strona generowana jest wraz z kontrolk uzupenion t wartoci.

286 ROZDZIA 5. ADMINISTRA PRACA ZE STRONAMI WZORCOWYMI CJA I ZARZDZANIE


Interesujce w stronie z zawartoci jest to, e kod zosta wstawiony w procedurze obsugi zdarzenia
Page_LoadComplete. W ten sposb mona pobra warto identyfikatora GUID umieszczon
na stronie wzorcowej. To zdarzenie w ASP.NET zgaszane jest zaraz po zdarzeniu Page_Load.
Porzdek zdarze omwiony jest w dalszej czci rozdziau, tu jedynie naley wspomnie, e
zdarzenie Page_Load na stronie z zawartoci wywoywane jest zawsze wczeniej ni zdarzenie
Page_Load na stronie wzorcowej. Aby pobra utworzony identyfikator GUID (powstaje w procedurze obsugi zdarzenia Page_Load strony wzorcowej), naley si do niego odwoa w procedurze obsugi zdarzenia, ktra wywoywana jest pniej ni zdarzenie Page_Load i to wanie
w tym miejscu przydatne okazuje si zdarzenie Page_LoadComplete. Kontrolka Label uzupeniana jest wobec tego wewntrz procedury obsugi zdarzenia Page_LoadComplete strony z zawartoci. Naley zwrci uwag, e kontrolka Label na stronie z zawartoci posiada ten sam
identyfikator ID, co kontrolka Label na stronie wzorcowej. Nie ma to jednak wikszego znaczenia.
Mona je odrni, korzystajc z waciwoci Master.
W taki sposb mona pobra nie tylko kontrolki serwerowe umieszczone na stronie wzorcowej.
Mona take uzyska dostp do dowolnych waciwoci, ktre strona wzorcowa udostpnia.
Przyjrzyjmy si stronie wzorcowej pokazanej na listingu 5.10. Uywa ona wasnej waciwoci do
modyfikacji sekcji <h1> na stronie.
Listing 5.10. Strona wzorcowa, ktra udostpnia wasn waciwo
<%@ Master Language="VB" %>
<script runat="server">
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
If Not Page.IsPostBack Then
Label1.Text = Guid.NewGuid().ToString()
End If
End Sub
Dim m_PageHeadingTitle As String = "Moja firma"
Public Property PageHeadingTitle() As String
Get
Return m_PageHeadingTitle
End Get
Set(ByVal Value As String)
m_PageHeadingTitle = Value
End Set
End Property
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Strona wzorcowa mojej firmy</title>
<asp:ContentPlaceHolder id="head" runat="server">
</asp:ContentPlaceHolder>
</head>
<body>
<form id="Form1" runat="server">
<table cellpadding="3" border="1">
<tr bgcolor="silver">
<td colspan="2">
<h1><%= PageHeadingTitle %></h1>
<b>GUID uytkownika:&nbsp;&nbsp;

Pisanie kodu strony z zawartoci 287

<asp:Label ID="Label1" runat="server" /></b>


</td>
</tr>
<tr>
<td>
<asp:ContentPlaceHolder ID="ContentPlaceHolder1"
runat="server">
</asp:ContentPlaceHolder>
</td>
<td>
<asp:ContentPlaceHolder ID="ContentPlaceHolder2"
runat="server">
</asp:ContentPlaceHolder>
</td>
</tr>
<tr>
<td colspan="2">
Copyright 2010 - Moja firma
</td>
</tr>
</table>
</form>
</body>
</html>
<%@ Master Language="C#" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
Label1.Text = System.Guid.NewGuid().ToString();
}
}
string m_PageHeadingTitle = "Moja firma";
public string PageHeadingTitle
{
get
{
return m_PageHeadingTitle;
}
set
{
m_PageHeadingTitle = value;
}
}
</script>

W powyszym przykadzie pokazano stron wzorcow, ktra udostpnia wasn waciwo PageHeadingTitle. Domyln wartoci waciwoci jest Moja firma. Warto waciwoci
umieszczana jest w kodzie w HTML-u strony wzorcowej, pomidzy znacznikami <h1>. Dziki temu
domylna warto staje si nagwkiem uywanym przez stron wzorcow. Pomimo e strona
wzorcowa posiada ju warto uywan jako tytu, to kada strona z zawartoci korzystajca ze
strony wzorcowej moe nadpisa nagwek <h1>. Cay proces pokazany jest na listingu 5.11.

288 ROZDZIA 5. ADMINISTRA PRACA ZE STRONAMI WZORCOWYMI CJA I ZARZDZANIE


Listing 5.11. Strona z zawartoci, ktra nadpisuje waciwo strony wzorcowej
<%@ Page Language="VB" MasterPageFile="~/Wrox.master" %>
<%@ MasterType VirtualPath="~/Wrox.master" %>
<script runat="server">
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Master.PageHeadingTitle = "Moja firma Oddzia X"
End Sub
</script>
<%@ Page Language="C#" MasterPageFile="~/Wrox.master" %>
<%@ MasterType VirtualPath="~/Wrox.master" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
Master.PageHeadingTitle = "Moja firma Oddzia X";
}
</script>

Z poziomu strony z zawartoci mona przypisa do waciwoci udostpnianej przez stron


wzorcow pewn warto. Umoliwia to waciwo Master. Jak wida, jest to cakiem proste.
Naley pamita, e dostp mona uzyska nie tylko do publicznych waciwoci strony wzorcowej. Rwnie dobrze mona wykorzysta metody, ktre zostay umieszczone na stronie
wzorcowej.
Elementem, ktry umoliwia zastosowanie takich rozwiza, jest dyrektywa MasterType. Dyrektywa MasterType pozwala utworzy referencj ze cis kontrol typw do strony wzorcowej. Dziki temu moliwe s odwoania do waciwoci strony wzorcowej poprzez waciwo
Master.
Wczeniej pokazalimy sposb uzyskania dostpu do umieszczonych na stronie wzorcowej
kontrolek serwerowych za pomoc metody FindControl(). Metoda FindControl() dziaa dobrze, ale stosuje mechanizm pnego wizania i w zwizku z tym jej wywoanie moe si nie
powie, jeeli kontrolka zostaa usunita ze znacznikw strony. Naley zatem stosowa technik programowania defensywnego i zawsze sprawdza, czy warto zwrcona przez metod
FindControl() nie jest rwna null. Korzystajc z pokazanych mechanizmw (uycie publicznych waciwoci zaprezentowano na listingu 5.10), mona zastosowa inny sposb udostpniania kontrolek serwerowych na stronie wzorcowej. Takie podejcie okae si bardziej efektywne.
Naley w tym celu udostpni kontrolki serwerowe pod postaci publicznych waciwoci. Pokazano to na listingu 5.12.
Listing 5.12. Udostpnianie kontrolek serwerowych strony wzorcowej poprzez publiczn waciwo
<%@ Master Language="VB" %>
<script runat="server">
Public Property MasterPageLabel1() As Label
Get
Return Label1
End Get
Set(ByVal Value As Label)
Label1 = Value

Pisanie kodu strony z zawartoci 289

End Set
End Property
</script>
<%@ Master Language="C#" %>
<script runat="server">
public Label MasterPageLabel
{
get
{
return Label1;
}
set
{
Label1 = value;
}
}
</script>

W tym przypadku publiczna waciwo o nazwie MasterPageLabel1 umoliwia uzyskanie dostpu do kontrolki Label, ktrej ID jest rwne Label1. Mona teraz utworzy egzemplarz waciwoci MasterPageLabel1 na stronie z zawartoci i nadpisa dowolny atrybut kontrolki serwerowej Label. Jeeli trzeba na przykad zmieni rozmiar identyfikatora GUID, ktry jest
tworzony przez stron wzorcow i wywietlany przez kontrolk serwerow Label1, wtedy wystarczy zwyczajnie nadpisa atrybut Font.Size tej kontrolki Label. Pokazano to na listingu 5.13.
Listing 5.13. Nadpisywanie atrybutu kontrolki Label umieszczonej na stronie wzorcowej
<%@ Page Language="VB" MasterPageFile="~/Wrox.master" %>
<%@ MasterType VirtualPath="~/Wrox.master" %>
<script runat="server">
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Master.MasterPageLabel1.Font.Size = 25
End Sub
</script>
<%@ Page Language="C#" MasterPageFile="~/Wrox.master" %>
<%@ MasterType VirtualPath="~/Wrox.master" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
Master.MasterPageLabel1.Font.Size = 25;
}
</script>

Takie podejcie moe by najbardziej efektywne spord tych, ktre pozwalaj pobra referencj
do dowolnej kontrolki serwerowej udostpnianej przez stron wzorcow.

290 ROZDZIA 5. ADMINISTRA PRACA ZE STRONAMI WZORCOWYMI CJA I ZARZDZANIE

Okrelanie domylnej zawartoci


na stronie wzorcowej
Jak ju moglimy si przekona, strona wzorcowa pozwala okreli obszary zawartoci, ktre
mog by wykorzystywane przez strony z zawartoci. Strony wzorcowe mog zawiera tylko
jeden obszar zawartoci, ale rwnie dobrze mog obejmowa wiele takich obszarw. Do interesujcym rozwizaniem zwizanym z obszarem zawartoci jest to, e podczas tworzenia stron
wzorcowych mona zdefiniowa domyln tre dla tych obszarw. Ta domylna zawarto moe by zostawiona na swoim miejscu i nie musi by nadpisywana przez stron z zawartoci. Na
listingu 5.14 pokazano stron wzorcow z domyln treci umieszczan w obszarze zawartoci.
Listing 5.14. Definiowanie domylnej zawartoci strony wzorcowej
<%@ Master Language="VB" %>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Moja firma</title>
<asp:ContentPlaceHolder id="head" runat="server">
</asp:ContentPlaceHolder>
</head>
<body>
<form id="form1" runat="server">
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
Tu jest jaka domylna zawarto
.
</asp:ContentPlaceHolder><p>
<asp:ContentPlaceHolder ID="ContentPlaceHolder2" runat="server">
Tu jest jeszcze wi cej domylnej zawartoci.
</asp:ContentPlaceHolder></p>
</form>
</body>
</html>

Aby umieci domyln tre w obszarze zawartoci na stronie wzorcowej, wystarczy na samej
stronie wzorcowej umieci kontrolk serwerow ContentPlaceHolder. Kada strona z zawartoci dziedziczca po tej stronie wzorcowej dziedziczy take domyln tre. Na listingu 5.15
pokazano stron z zawartoci, ktra przesania tylko jeden obszar zawartoci strony wzorcowej.
Listing 5.15. Przesanianie domylnej zawartoci na stronie z zawartoci
<%@ Page Language="VB" MasterPageFile="~/MasterPage.master" %>
<asp:Content ID="Content3" ContentPlaceHolderId="ContentPlaceHolder2"
runat="server">
Tu jest jaka nowa zawarto
.
</asp:Content>

Pokazany kod pozwala utworzy stron z jednym obszarem zawartoci, ktry dziedziczony jest
po samej stronie wzorcowej, oraz z drugim obszarem, pochodzcym ze strony z zawartoci
(zobacz rysunek 5.10).

Programowe przypisywanie strony wzorcowej 291

Rysunek 5.10

Kolejnym interesujcym udogodnieniem jest to, e podczas pracy z obszarami zawartoci w widoku projektanta Visual Studio 2010 pojawiaj si inteligentne znaczniki, ktre uatwiaj prac
z domyln treci.
Rozpoczynajc prac ze stronami z zawartoci, mona zauway, e w kontrolkach serwerowych Content na pocztku pojawia si domylna zawarto. Mona zmieni t zawarto, klikajc inteligentny znacznik i wybierajc z menu podrcznego opcj Create Custom Content.
Opcja pozwala przesoni zawarto strony wzorcowej i wstawi swoj wasn zawarto. Po
umieszczeniu wasnych elementw wewntrz obszaru zawartoci inteligentny znacznik pokae
inn opcj Default to Masters Content. Opcja pozwala przywrci domyln zawarto strony wzorcowej i usun wszystko, co zostao do tej pory umieszczone w obszarze zawartoci.
Skutkuje to powrotem do zawartoci domylnej. Po wybraniu tej opcji pojawi si ostrzeenie informujce o tym, e wszystkie elementy wstawione w kontrolce serwerowej zostan usunite.
Pokazano to na rysunku 5.11.

Rysunek 5.11

Po zmianie domylnej zawartoci kontrolki


z rysunku 5.12.

Content

strona bdzie wygldaa podobnie do tej

Programowe przypisywanie strony wzorcowej


Z poziomu kadej strony z zawartoci mona w atwy sposb programowo przypisa stron
wzorcow. Wykonuje si to za pomoc waciwoci Page.MasterPageFile. Taka opcja moe by
uyta bez wzgldu na to, czy inna strona wzorcowa zostaa ju przypisana w dyrektywie
@Page.

292 ROZDZIA 5. ADMINISTRA PRACA ZE STRONAMI WZORCOWYMI CJA I ZARZDZANIE

Rysunek 5.12

by wykona to zadanie, mona skorzysta z waciwoci Page.MasterPageFile w zdarzeniu


PreInit. Zdarzenie PreInit jest pierwszym zdarzeniem w caym cyklu przetwarzania strony,
w ktrym mona uzyska dostp do waciwoci strony. Z tego powodu jest to najlepsze miejsce,
w ktrym do stron z zawartoci mona przypisa stron wzorcow. PreInit to warte uwagi zdarzenie. Nabiera ono szczeglnego znaczenia podczas pracy ze stronami wzorcowymi, poniewa
jest to jedyny moment, gdy zmiana moe mie wpyw zarwno na stron wzorcow, jak i stron
z zawartoci, zanim zostan one poczone w jedn stron waciw. Na listingu 5.16 pokazano
sposb programowego przypisania strony wzorcowej z poziomu strony z zawartoci.
Listing 5.16. Korzystanie z procedury obsugi zdarzenia Page_PreInit
w celu programowego przypisania strony wzorcowej
<%@ Page Language="VB" %>
<script runat="server">
Protected Sub Page_PreInit(ByVal sender As Object, ByVal e As System.EventArgs)
Page.MasterPageFile = "~/MyMasterPage.master"
End Sub
</script>
<%@ Page Language="C#" %>
<script runat="server">
protected void Page_PreInit(object sender, EventArgs e)
{
Page.MasterPageFile = "~/MyMasterPage.master";
}
</script>

Osadzanie stron wzorcowych 293

W tym przypadku strona jest generowana dynamicznie. Strona wzorcowa przypisywana jest
do strony z zawartoci na pocztku procesu konstrukcji strony. Naley zwrci szczegln
uwag na to, e strona z zawartoci musi si spodziewa kontrolek Content, w przeciwnym razie
pojawi si bd.

Osadzanie stron wzorcowych


Mamy nadziej, e widoczna jest ju potga stron wzorcowych w obszarze tworzenia aplikacji
sieciowych korzystajcych z jednego schematu. Do tej pory tworzylimy pojedyncz stron
wzorcow, z ktrej korzystay strony z zawartoci. Jednak wikszo portali firm i organizacji
nie skada si z tylko dwch warstw. W wikszych organizacjach istniej rne oddziay i grupy, ktre mog korzysta z rnych odmian stron wzorcowych. Jedna strona wzorcowa moe wtedy
zosta umieszczona w innej stronie wzorcowej. W ASP.NET jest to moliwe.
Przypumy, e Reuters tworzy stron wzorcow przeznaczon do wykorzystania w intranecie
caej firmy. Caa agencja Reuters moe utworzy jedn stron wzorcow dla wszystkich w firmie,
ale kady dzia agencji Reuters moe udostpni wasne wzorce dla poszczeglnych grup intranetu, ktre pozostaj pod jej kontrol. Dzia Reutersa w Europie i dzia Reutersa w Ameryce mog
mie swoje wasne strony wzorcowe. Pokazano to na rysunku 5.13.

Rysunek 5.13

294 ROZDZIA 5. ADMINISTRA PRACA ZE STRONAMI WZORCOWYMI CJA I ZARZDZANIE


Aby utworzy strony dziaw Reutersa dla Europy i Reutersa dla Ameryki, programici tworz
zwyczajne strony wzorcowe, ktre dziedzicz po globalnej stronie wzorcowej. Pokazano to na listingu 5.17.
Listing 5.17. Gwna strona wzorcowa
<%@ Master Language="VB" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Reuters</title>
<asp:ContentPlaceHolder id="head" runat="server">
</asp:ContentPlaceHolder>
</head>
<body>
<form id="form1" runat="server">
<p><asp:Label ID="Label1" runat="server" BackColor="LightGray"
BorderColor="Black" BorderWidth="1px" BorderStyle="Solid"
Font-Size="XX-Large"> Gwna strona wzorcowa Reuters </asp:Label></p>
<asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
</form>
</body>
</html>

Plik ReutersMain.master

To prosta strona wzorcowa, ale doskonale nadaje si do pokazania funkcji osadzania. Gwna
strona wzorcowa jest uywana globalnie w caej firmie. Obejmuje ona kontrolk serwerow
ContentPlaceHolder. Wartoci ID kontrolki jest ContentPlaceHolder1.
Podczas tworzenia podstrony wzorcowej lub osadzonej strony wzorcowej wykonuje si te same
zadania i w ten sam sposb, ktry by stosowany przy tworzeniu zwykej strony wzorcowej.
Z okna dialogowego Add New Item wybierzmy opcj Master Page i upewnijmy si, e zaznaczona jest
opcja Select master page. Pokazano to na rysunku 5.14. W ten sposb po raz kolejny przejdziemy
do okna dialogowego, ktre pozwala wybra stron wzorcow.

Rysunek 5.14

Osadzanie stron wzorcowych 295

Na listingu 5.18 pokazano, w jaki sposb mona korzysta ze strony wzorcowej w pliku podstrony wzorcowej.
Listing 5.18. Podstrona wzorcowa
<%@ Master Language="VB" MasterPageFile="~/ReutersMain.master" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1"
runat="Server">
<asp:Label ID="Label1" runat="server" BackColor="#E0E0E0" BorderColor="Black"
BorderStyle="Dotted" BorderWidth="2px" Font-Size="Large">
Reuters dla Europy </asp:Label><br /><hr />
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
</asp:Content>

Plik ReutersEurope.master

Patrzc na kod zaprezentowanej strony, mona zauway, e nie rni si ona bardzo od typowej strony .aspx, ktra korzysta ze strony wzorcowej. Atrybut MasterPageFile jest ten sam.
Umieszczony jest on jednak w dyrektywie @Master, podczas gdy zwyka strona uywa dyrektywy
@Page. Kontrolka Content2 take uywa atrybutu ContentPlaceHolderId kontrolki Content.
Atrybut czy obszar zawartoci z obszarem zawartoci ContentPlaceHolder1, zdefiniowanym
w gwnej stronie wzorcowej.
Jedn z funkcji ASP.NET jest moliwo podgldu osadzonych stron wzorcowych bezporednio w widoku Design rodowiska Visual Studio 2010. Wersje starsze od rodowiska Visual
Studio 2008 wywietlay bd, gdy prbowano pokaza osadzon stron wzorcow. Na rysunku
5.15 przedstawiono osadzon stron wzorcow w widoku Design rodowiska Visual Studio 2010.

Rysunek 5.15

296 ROZDZIA 5. ADMINISTRA PRACA ZE STRONAMI WZORCOWYMI CJA I ZARZDZANIE


Wewntrz podstrony wzorcowej pokazanej na listingu 5.18 mona teraz uywa tylu kontrolek
serwerowych ContentPlaceHolder, ile tylko jest potrzebnych. Kontrolki te s dostpne dla
stron z zawartoci korzystajcych z tej strony wzorcowej. Na listingu 5.19 pokazano stron z zawartoci, ktra korzysta z podstrony wzorcowej ReutersEurope.master.
Listing 5.19. Strona z zawartoci
Default.aspx
<%@ Page Language="VB" MasterPageFile="~/ReutersEurope.master" %>
<asp:Content ID="Content1" ContentPlaceHolderId="ContentPlaceHolder1"
runat="server">
Witaj, wiecie
</asp:Content>

Jak mona zauway, w pokazanej stronie wzorcowej wartoci atrybutu MasterPageFile w dyrektywie Page jest utworzona podstrona wzorcowa. Dziedziczenie po stronie wzorcowej ReutersEurope powoduje, e wynikowa strona wzorcowa czy w sobie obie strony (ReutersMain.master oraz ReutersEurope.master) w pojedyncz stron wzorcow. Kontrolka Content
strony z zawartoci wskazuje na obszar zawartoci rwnie zdefiniowany przez podstron wzorcow. Jak mona zauway, w kodzie wykorzystano do tego atrybut ContentPlaceHolderId.
W rezultacie otrzymujemy niezbyt adn stron kocow. Pokazano j na rysunku 5.16.

Rysunek 5.16

Obserwujc rezultat kocowy, mona si przekona, e podstrona wzorcowa dziaa cakiem niele.

Strony wzorcowe dostosowane do przegldarek


W wielu przypadkach programici tworz aplikacje, ktre bd wywietlane w wielu rnych
przegldarkach. Niektrzy odbiorcy aplikacji mog korzysta z przegldarki Microsoft Internet
Explorer, niektrzy mog uywa Firefoksa lub programu Google Chrome. Inni uytkownicy mog
przeglda strony aplikacji na urzdzeniu Pocket PC lub w telefonie komrkowym Nokia.
Z tego powodu ASP.NET pozwala umieci na stronie z zawartoci wiele stron wzorcowych.
W zalenoci od przegldarki uytej przez uytkownika kocowego silnik ASP.NET wstawia
waciwy plik strony wzorcowej. Powstaj zatem strony wzorcowe specyficzne dla danej przegldarki
i w ten sposb zapewniane s uytkownikom kocowym najlepsze moliwe dowiadczenia pod-

Strony wzorcowe dostosowane do przegldarek 297

czas ogldania stron. Mona dziki temu wykorzysta moliwoci oferowane przez konkretne
przegldarki. Sposb wykorzystania wielu stron wzorcowych pokazany jest na listingu 5.20.
Listing 5.20. Strona z zawartoci, ktra moe pracowa z wicej ni jedn stron wzorcow
<%@ Page Language="VB" MasterPageFile="~/Wrox.master"
Mozilla:MasterPageFile="~/WroxMozilla.master"
Opera:MasterPageFile="~/WroxOpera.master" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderId="ContentPlaceHolder1"
runat="server">
Witaj, wiecie
</asp:Content>

Jak mona zauway na pokazanym listingu strony z zawartoci, moe ona dziaa z trzema
rodzajami stron wzorcowych. Pierwszy z nich korzysta z atrybutu MasterPageFile. To ustawienie domylne, uywane przez te przegldarki, ktre nie speniaj kryteriw naoonych przez
kolejne opcje. Oznacza to, e jeeli danie nie przychodzi od przegldarki Opera lub Mozilla,
wtedy uywana jest domylna strona wzorcowa Wrox.master. Jeeli jednak danie przychodzi od
przegldarki Opera, wtedy uywany jest plik WroxOpera.master. Pokazano to na rysunku 5.17.

Rysunek 5.17

List dostpnych przegldarek mona znale w katalogu C:Windows\Microsoft.NET\Framework\


v4.0.xxxxx\CONFIG\Browsers na serwerze, na ktrym aplikacje bd umieszczane. Niektre
z opcji wypisano poniej:
avantgo
generic
MME
palm
cassio
goAmerica
mozilla
panasonic
Default
ie
netscape
pie
docomo
Jataayu
nokia
webtv
ericsson
jphone
openwave
winwap
EZWap
legend
opera
xiino
gateway
Mona oczywicie doda swoje wasne pliki .browser, jeeli zajdzie taka potrzeba.

298 ROZDZIA 5. ADMINISTRA PRACA ZE STRONAMI WZORCOWYMI CJA I ZARZDZANIE

Porzdek wywoywania zdarze


Podczas pracy ze stronami wzorcowymi i stronami z zawartoci korzysta si z tych samych
zdarze (na przykad ze zdarzenia Load). Naley wiedzie, ktre ze zdarze wystpuj przed innymi. Tworzy si bowiem jedn stron z dwch klas i wymagany jest przy tym odpowiedni porzdek. Gdy uytkownik wysya z przegldarki danie strony z zawartoci, wtedy zdarzenia
wywoywane s w nastpujcej kolejnoci:
1. Inicjalizacja kontrolek potomnych strony wzorcowej wszystkie kontrolki znajdujce
si na stronie wzorcowej s inicjalizowane.
2. Inicjalizacja kontrolek potomnych strony z zawartoci wszystkie kontrolki
znajdujce si na stronie z zawartoci s inicjalizowane.
3. Inicjalizacja strony wzorcowej inicjalizowana jest strona wzorcowa.
4. Inicjalizacja strony z zawartoci inicjalizowana jest strona z zawartoci.
5. Wczytywanie strony z zawartoci wczytywana jest strona z zawartoci
(wywoywane jest zdarzenie Page_Load, a nastpnie zdarzenie Page_LoadComplete).
6. Wczytywanie strony wzorcowej wczytywana jest strona wzorcowa (wywoywane jest
zdarzenie Page_Load, a nastpnie zdarzenie Page_LoadComplete).
7. Wczytywanie kontrolek potomnych strony wzorcowej na stron wczytywane s
kontrolki serwerowe strony wzorcowej.
8. Wczytywanie kontrolek potomnych strony z zawartoci na stron wczytywane s
kontrolki serwerowe strony z zawartoci.
Podczas tworzenia aplikacji naley zwrci uwag na porzdek wystpowania zdarze. Jeeli
trzeba uy wartoci kontrolek serwerowych umieszczonych na stronie wzorcowej w okrelonej
stronie z zawartoci, to nie mona tego zrobi bezporednio z poziomu procedury obsugi zdarzenia Page_Load strony z zawartoci. Dzieje si tak, poniewa zdarzenie wywoywane jest
przed zakoczeniem dziaania procedury obsugi zdarzenia Page_Load strony wzorcowej. Opisany
problem zmusi twrcw ASP.NET do wprowadzenia nowego zdarzenia Page_LoadComplete.
Zdarzenie Page_LoadComplete wystpuje zaraz po zdarzeniu Page_Load. Mona skorzysta
z tego porzdku w celu pobrania wartoci ze strony wzorcowej, pomimo e zawarto strony po
wywoaniu zdarzenia nie jest jeszcze uzupeniona.

Buforowanie stron wzorcowych


Podczas pracy z typowymi stronami .aspx mona ustawi sposb buforowania danych wyjciowych
za pomoc nastpujcej konstrukcji (lub jej odmiany):
<%@ OutputCache Duration="10" Varybyparam="None" %>

Dziki temu strona bdzie przechowywana w pamici podrcznej serwera przez 10 sekund.
Wielu programistw korzysta z techniki buforowania danych wyjciowych w celu zwikszenia
wydajnoci swoich stron ASP.NET. Takie rozwizanie ma take sens w przypadku stron z danymi, ktre nie trac swojej wanoci zbyt szybko.
W jaki sposb mona zastosowa buforowanie danych wyjciowych stron ASP.NET
w przypadku stron wzorcowych? Po pierwsze, nie mona zastosowa buforowania wycznie
w odniesieniu do stron wzorcowych. Nie mona umieci dyrektywy OutputCache na samej

ASP.NET AJAX i strony wzorcowe 299

stronie wzorcowej. Jeeli sprbujemy co takiego zrobi, wtedy podczas drugiego pobrania
strony pojawi si bd. Aplikacja nie bdzie moga odnale strony w pamici podrcznej.
Aby moliwa bya wsppraca mechanizmu buforowania ze stronami wzorcowymi, naley
umieci dyrektyw OutputCache na stronie z zawartoci. W ten sposb buforowana bdzie tre zarwno strony z zawartoci, jak i strony wzorcowej (naley pamita, e w tym
miejscu jest to ju jedna strona). Dyrektywa OutputCache umieszczona na stronie wzorcowej
nie spowoduje, e pojawi si bd. Strona nie bdzie jednak buforowana. Dyrektywa dziaa
tylko ze stronami z zawartoci.
Inn now i ciekaw funkcj rodowiska ASP.NET 4 w obszarze buforowania jest moliwo
sprawdzania stanu na poziomie kontrolek. Cho natychmiast przychodzi na myl moliwo
kontrolowania w ten sposb stanu takich kontrolek jak GridView i innych obejmujcych rozbudowany stan, technik t mona zastosowa take do kontrolek ContentPlaceHolder.
Mona na przykad napisa kod podobny do poniszego:
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server"
ViewStateMode="Disabled">
</asp:ContentPlaceHolder>

Przy takich ustawieniach kontrolka ContentPlaceHolder1 nie bdzie korzysta ze stanu, nawet
jeli bd go uywa pozostae elementy strony. Opcja ViewStateMode przyjmuje wartoci Disabled, Enabled i Inherit. Ustawienie Disabled powoduje wyczenie obsugi stanu kontrolki,
opcja Enabled wcza t funkcj, a opcja Inherit spowoduje zastosowanie wartoci okrelonej
w dyrektywie @Page. Wyczenie obsugi stanu prowadzi do poprawy wydajnoci stron.

ASP.NET AJAX i strony wzorcowe


Wiele wikszych aplikacji ASP.NET w dzisiejszych czasach korzysta ze stron wzorcowych oraz
moliwoci, jakie daje ta technologia. Pozwala ona tworzy portale na podstawie okrelonego
wzorca. ASP.NET 4 obejmuje instalowan domylnie technologi ASP.NET AJAX. Okae si
wkrtce, e strony wzorcowe wsppracuj z technologi AJAX cakiem niele.
UWAGA
Technologia ASP.NET AJAX omwiona jest w rozdziale 18. tej ksiki.

Kada strona, ktra bdzie korzystaa z technologii AJAX, musi obejmowa kontrolk ScriptManager. Jeeli tworzona strona z zawartoci korzystajca z AJAX-a dziedziczy po stronie wzorcowej, wtedy kontrolka ScriptManager musi by umieszczona na stronie wzorcowej.
UWAGA
Naley pamita, e na stronie moe znajdowa si tylko jedna kontrolka ScriptManager.

300 ROZDZIA 5. ADMINISTRA PRACA ZE STRONAMI WZORCOWYMI CJA I ZARZDZANIE


Skonfigurowanie strony wzorcowej pod ktem obsugi technologii AJAX nie jest trudne. Wystarczy doda do strony wzorcowej kontrolk ScriptManager. Przykad takiego rozwizania
przedstawia listing 5.21.
Listing 5.21. Strona wzorcowa z obsug technologii AJAX
<%@ Master Language="VB" %>
<script runat="server">
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<asp:ContentPlaceHolder id="head" runat="server">
</asp:ContentPlaceHolder>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
</div>
</form>
</body>
</html>

Jak mona zauway na listingu 5.21, jedyn rnic pomidzy stron wzorcow w technologii AJAX a standardow stron wzorcow jest obecno w kodzie kontrolki serwerowej ScriptManager. Technik t naley stosowa wtedy, gdy strona wzorcowa korzysta z pewnych udogodnie technologii AJAX, a nawet wtedy, gdy strony z zawartoci w ogle nie korzystaj z AJAX-a.
Kontrolka ScriptManager na stronie wzorcowej jest przydatna take wtedy, gdy istniej pewne
wsplne fragmenty kodu w jzyku JavaScript, wykorzystywane na wszystkich stronach aplikacji. Na
listingu 5.22 pokazano, w jaki sposb mona atwo umieci kod w jzyku JavaScript na wszystkich
stronach korzystajcych ze strony wzorcowej.
Listing 5.22. Wczanie skryptw poprzez stron wzorcow
<%@ Master Language="VB" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<asp:ContentPlaceHolder id="head" runat="server">
</asp:ContentPlaceHolder>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Scripts>

ASP.NET AJAX i strony wzorcowe 301

<asp:ScriptReference Path="myScript.js" />


</Scripts>
</asp:ScriptManager>
<asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
</div>
</form>
</body>
</html>

Dziki zastosowaniu rozwizania pokazanego w przykadzie plik myScript.js bdzie umieszczany


na kadej stronie z zawartoci, ktra korzysta ze strony wzorcowej z obsug AJAX-a. Jeeli
strona z zawartoci take musi korzysta z technologii AJAX, wtedy nie mona ju tak zwyczajnie doda do niej kontrolki ScriptManager. Strona z zawartoci musi w takim przypadku
korzysta z kontrolki ScriptManager, ktra jest ju obecna na stronie wzorcowej.
W zwizku z powyszym, jeeli strona z zawartoci musi doczy do kontrolki ScriptManager
dodatkowe skadniki, wtedy moe skorzysta z kontrolki serwerowej ScriptManagerProxy i za
jej pomoc dosta si do kontrolki ze strony wzorcowej. Korzystanie z kontrolki ScriptManagerProxy pozwala doda do kontrolki ScriptManager elementy, ktre s specyficzne dla danego
egzemplarza strony z zawartoci.
Na listingu 5.23 pokazano, w jaki sposb strona z zawartoci moe doda kolejne skrypty do
strony poprzez kontrolk ScriptManagerProxy.
Listing 5.23. Wstawianie dodatkowych elementw za pomoc kontrolki ScriptManagerProxy
<%@ Page Language="VB" MasterPageFile="~/AjaxMaster.master" %>
<asp:Content ID="Content1" ContentPlaceHolderId="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderId="ContentPlaceHolder1"
runat="server">
<asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server">
<Scripts>
<asp:ScriptReference Path="myOtherScript.js" />
</Scripts>
</asp:ScriptManagerProxy>
</asp:Content>

W tym przypadku strona z zawartoci korzysta z kontrolki ScriptManagerProxy w celu dodania na stron kolejnych skryptw. Kontrolka ScriptManagerProxy dziaa dokadnie tak samo jak
gwna kontrolka ScriptManager. Rnica polega na tym, e kontrolka ScriptManagerProxy
przewidziana jest do pracy ze stronami z zawartoci dziedziczcymi po stronach wzorcowych.
Kontrolka ScriptManagerProxy bdzie wsppracowa z kontrolk ScriptManager i wykona
wszystkie wymagane operacje.

302 ROZDZIA 5. ADMINISTRA PRACA ZE STRONAMI WZORCOWYMI CJA I ZARZDZANIE

Podsumowanie
W czasie tworzenia aplikacji, w ktrej prawie kada strona korzysta ze wsplnego nagwka, stopki lub sekcji nawigacyjnej, dobrym rozwizaniem jest zastosowanie stron wzorcowych. Strony
wzorcowe s atwe w implementacji i pozwalaj wprowadzi zmiany do kadej strony aplikacji
poprzez modyfikacj pojedynczego pliku. Wystarczy sobie wyobrazi, o ile atwiejsze jest takie
zadanie przy aplikacji, ktra zawiera tysice stron.
W niniejszym rozdziale opisano strony wzorcowe w ASP.NET i wyjaniono sposb tworzenia
stron wzorcowych w aplikacjach sieciowych. Oprcz podstawowych zagadnie poruszono take
temat porzdku wywoywania zdarze, buforowanie oraz dostosowanie stron wzorcowych do
konkretnych przegldarek. Na koniec maa rada. Jeeli w aplikacji wystpuje pewien szablon,
naturalnym odruchem powinno by wykorzystanie stron wzorcowych technika ta daje olbrzymie moliwoci.

You might also like