SlideShare a Scribd company logo
1 of 12
Download to read offline
ASP.NET 3.5
                           dla programistów PHP
                           Autor: Krzysztof Rychlicki-Kicior
                           ISBN: 978-83-246-1916-0
                           Format: 158x235, stron: 160



                                              Stwórz aplikacje internetowe w technologii ASP.NET 3.5
                                • Poznaj i skonfiguruj œrodowisko programistyczne
                                • Zaprojektuj strukturê aplikacji
                                • Po³¹cz aplikacjê z baz¹ danych
                                • Wyœwietl dane na stronach
                           Technologie PHP i ASP.NET maj¹ kilka cech wspólnych — obie s³u¿¹ do tworzenia
                           aplikacji internetowych, uruchamianych za poœrednictwem przegl¹darki internetowej,
                           i generuj¹ wynik swojego dzia³ania w postaci dokumentów XHTML. Jednak istnieje
                           miêdzy nimi jedna istotna ró¿nica — PHP wykorzystuje rozwi¹zania open source,
                           a ASP.NET rozwi¹zania komercyjne, rozwijane przez firmê Microsoft. ASP.NET opiera siê
                           na platformie .NET — uniwersalnym frameworku, pozwalaj¹cym na korzystanie
                           z ró¿nych jêzyków programowania w celu tworzenia skalowalnych, szybkich i ³atwych
                           do rozwijania aplikacji sieciowych. Nie bez znaczenia jest tak¿e œrodowisko
                           programistyczne — Visual Studio to doskona³e narzêdzie, znacznie przyspieszaj¹ce
                           i usprawniaj¹ce proces tworzenia oprogramowania.
                           „ASP.NET 3.5 dla programistów PHP” to wprowadzenie do technologii ASP
                           dla wszystkich twórców aplikacji internetowych, którzy dotychczas korzystali z PHP.
                           Czytaj¹c tê ksi¹¿kê, zrozumiesz g³ówne zasady korzystania z platformy .NET i techniki
                           budowania aplikacji sieciowych. Dowiesz siê, jak skonfigurowaæ œrodowisko pracy
                           i zaprojektowaæ strukturê aplikacji. Nauczysz siê korzystaæ z najwa¿niejszych
                           elementów platformy .NET — kontrolek bêd¹cych gotowymi „cegie³kami” do budowy
                           stron internetowych ASP. Poznasz podstawowe kontrolki, tworz¹ce interfejs
                           u¿ytkownika i zarz¹dzaj¹ce sesj¹, po³¹czysz aplikacjê z baz¹ danych i zastosujesz
                           kontrolki do wyœwietlenia danych na stronie. Przeczytasz o sprawdzaniu poprawnoœci
                           danych wprowadzanych do formularzy i przypisywaniu ról u¿ytkownikom aplikacji.
                           Znajdziesz tu tak¿e informacje o tym, w jaki sposób wykorzystaæ technologiê AJAX
                           do budowy interfejsów u¿ytkownika aplikacji ASP.NET.
                                • Porównanie technologii s³u¿¹cych do tworzenia aplikacji sieciowych
Wydawnictwo Helion              • Konfiguracja bazy MS SQL i instalacja narzêdzi programistycznych
ul. Koœciuszki 1c               • Kontrolki interfejsu u¿ytkownika
44-100 Gliwice                  • Zarz¹dzanie sesj¹ i plikami cookie
tel. 032 230 98 63              • Komunikacja z bazami danych za pomoc¹ ADO.NET
e-mail: helion@helion.pl        • Wyœwietlanie danych na stronach
                                • Weryfikacja poprawnoœci danych z formularzy
                                • Obs³uga kont u¿ytkowników
                                • AJAX w aplikacjach ASP.NET
                                           Spróbuj czegoœ nowego. Mo¿e w ASP.NET 3.5 odnajdziesz to,
                                                           czego brakowa³o Ci w PHP?
Spis treści
               Podziękowania ................................................................................. 5
               Wstęp .............................................................................................. 7
Rozdział 1. Aplikacje webowe — przegląd technologii ......................................... 9
               Perl ................................................................................................................................. 11
               Python ............................................................................................................................. 12
               Ruby ............................................................................................................................... 13
               J2EE/JSP ........................................................................................................................ 13
Rozdział 2. ASP.NET v. PHP ............................................................................. 15
               Zalety .............................................................................................................................. 15
               Wady .............................................................................................................................. 17
Rozdział 3. Środowisko programistyczne .......................................................... 19
               Konfiguracja środowiska SQL ....................................................................................... 20
               Pierwsza aplikacja webowa ............................................................................................ 22
                   Mikstura znaczników ............................................................................................... 24
                   Debugowanie aplikacji ............................................................................................. 26
Rozdział 4. Podstawowe kontrolki .................................................................... 29
               HTML v. ASP.NET ........................................................................................................ 29
               Control ............................................................................................................................ 30
               WebControl .................................................................................................................... 33
               TextBox (input type="text", textarea, input type="password") ...................................... 34
               Button (input type="submit", type="button") ................................................................. 35
               DropDownList (select) ................................................................................................... 36
                   Mechanizm PostBack ............................................................................................... 37
               ListBox (select multiple="multiple") .............................................................................. 38
               CheckBox (input type="checkbox") ............................................................................... 40
               CheckBoxList ................................................................................................................. 41
               RadioButton (input type="radio") .................................................................................. 42
               RadioButtonList ............................................................................................................. 42
               Image (<img>) ................................................................................................................ 42
                   ImageButton ............................................................................................................. 43
                   ImageMap ................................................................................................................ 43
               FileUpload (input type="file") ........................................................................................ 45
               Pozostałe kontrolki ......................................................................................................... 47
4                                                                                         ASP.NET 3.5 dla programistów PHP


Rozdział 5. Obsługa strony ............................................................................... 49
                Wszystkie drogi prowadzą do strony — Page ................................................................ 49
                Request — tak wszystko się zaczyna… .......................................................................... 52
                    Ciasteczka ................................................................................................................ 53
                    Niewinne szpiegowanie ............................................................................................ 54
                Response — …a tak się kończy ..................................................................................... 54
                Nie tylko dla studentów — potyczki z sesjami ............................................................... 56
Rozdział 6. Źródła danych ................................................................................ 59
                Słowo o wzorcach… ....................................................................................................... 59
                Źródła danych ................................................................................................................. 62
                SqlDataSource ................................................................................................................ 63
Rozdział 7. Klasy struktur danych — ADO.NET .................................................. 67
                DataColumn i DataRow — kolumny + wiersze = tabela ................................................ 68
                Relacje ............................................................................................................................ 70
                Widok danych ................................................................................................................. 73
                Dostawca danych na przykładzie MS SQL ........................................................................... 73
Rozdział 8. Kontrolki danych ............................................................................ 77
                Obsługa danych bez ogródek .......................................................................................... 79
                   Repeater ................................................................................................................... 80
                   DetailsView .............................................................................................................. 82
                   3 w 1 — kontrolki i źródła ....................................................................................... 84
                   GridView — cała władza w ręce siatki .................................................................... 87
Rozdział 9. Walidacja danych ........................................................................... 93
                RequiredFieldValidator .................................................................................................. 93
                RangeValidator ............................................................................................................... 95
                CompareValidator .......................................................................................................... 97
                RegularExpressionValidator ........................................................................................... 98
Rozdział 10. System użytkowników .................................................................... 99
                Konfigurowanie aplikacji ASP.NET ............................................................................ 100
                Role, czyli uprawnienia ................................................................................................ 104
Rozdział 11. Mistrz i uczeń, czyli zastępcy include’a ......................................... 107
                ASP.NET i PHP — to samo czy tak samo? .................................................................. 108
Rozdział 12. Historia o starych znajomych, czyli AJAX w .NET ........................... 111
                A(SP.NET) + A(JAX) — brzydkie kaczątko i piękny łabędź ...................................... 112
Rozdział 13. Praktyczne przykłady .................................................................... 117
                Księga gości ................................................................................................................. 117
                Licznik (pliki) ............................................................................................................... 120
                Sonda (ankieta) ............................................................................................................. 127
                Tokeny, czyli test na człowieczeństwo ......................................................................... 132
                CMS ............................................................................................................................. 136
                Bibliografia .................................................................................. 151
                Skorowidz .................................................................................... 153
Rozdział 5.
Obsługa strony
   Strony internetowe to nie tylko kontrolki graficzne. Zanim ASP.NET zajmie się ob-
   sługą kontrolek, musi zostać wysłane przez klienta żądanie, a po wszystkim powinna
   zostać odesłana do niego odpowiedź. Ponadto często (nawet w poprzednim rozdziale)
   konieczne jest uzyskanie pewnych informacji o serwerze lub samej aplikacji niemoż-
   liwych do odczytania z poziomu kontrolek. Większość tych informacji można pobrać
   za pośrednictwem klasy Page i jej właściwości.



Wszystkie drogi prowadzą
do strony — Page
   Z klasą Page mieliśmy do tej pory kontakt wielokrotny, gdyż wszystkie tworzone przez
   nas proste aplikacje złożone z jednej strony (formularza) były w istocie klasami wy-
   wiedzionymi bezpośrednio z klasy Page. Co za tym idzie, wiele elementów wykorzy-
   stywanych uprzednio bezpośrednio (jak właściwości Response czy Server) stanowiło
   właściwości klasy Page.

   Można powiedzieć, że klasa Page sama w sobie nie oferuje rozbudowanej funkcjonalności;
   głównym jej zadaniem jest zebranie w jedną całość. Właściwości tej klasy można po-
   dzielić na dwie nieformalne grupy — zwykłe, pomocne w określeniu działania strony,
   i rozbudowane, których działanie nie jest blisko związane z samą klasą Page. W pew-
   nym sensie klasa Page stanowi jedynie zbiór odwołań do kluczowych obiektów, dzięki
   czemu nie trzeba ich szukać w innych miejscach. Oczywiście wszystkie te obiekty nie
   biorą się znikąd — instancje znajdujące się we właściwościach danej strony są po-
   wiązane właśnie z nią. Do „dużych” właściwości, które będą tematem osobnych pod-
   rozdziałów i rozdziałów, zaliczają się:
       HttpApplicationState Application — określa obiekt klasy, której zadaniem
       jest wymiana informacji między różnymi żądaniami i stronami, czyli zarządzanie
       stanem aplikacji.
       HttpRequest Request — zwraca obiekt aktualnie obsługiwanego żądania.
50                                                   ASP.NET 3.5 dla programistów PHP


         HttpResponse Response — określa obiekt aktualnie generowanej odpowiedzi
         na żądanie.
         HttpServerUtility Server — określa obiekt pomocny przy obsługiwaniu żądań,
         udostępniając pewne mechanizmy serwera — w przeciwieństwie do właściwości
         Request, której zadaniem nie jest interakcja ze środowiskiem serwera.
         HttpSessionState Session — określa obiekt sesji, w którym można
         przechowywać wartości między kolejnymi żądaniami HTTP.
         IPrincipal User — określa dane użytkownika, który wysłał żądanie
         (przydatne zwłaszcza po wprowadzeniu do aplikacji mechanizmu autentyfikacji
         — uwierzytelnienia).

     Jak widać, klasa Page gromadzi niemal wszystkie istotne elementy przydatne w trak-
     cie projektowania aplikacji WWW. Oczywiście można wykorzystywać również inne
     właściwości; z niektórymi już mieliśmy kontakt (np. IsPostBack), niektóre poznamy
     przy okazji konkretnych rozwiązań zamieszczonych w dalszej części książki.

     Z pewnością w tym miejscu warto zapoznać się z modelem zdarzeń klasy Page. Opiera
     się on rzecz jasna na modelu zdarzeń klasy Control. Wytłuszczonym drukiem zostały
     zaznaczone zdarzenia wprowadzone dopiero w klasie Page:
         PreInit — na najwcześniejszym możliwym etapie ładowania strony można
         określić, czy strona jest ładowana w wyniku żądania zwrotnego (postback).
         Należy jednak pamiętać, że kontrolki nie są jeszcze w pełni załadowane.
         Z tego względu ustawianie ich wartości na tym etapie nie gwarantuje ich
         zachowania później.
         Init — w tym momencie kontrolki są zainicjalizowane (strona może wywołać
         zdarzenie dopiero wtedy, gdy wszystkie kontrolki zgłosiły to zdarzenie).
         Można więc dowolnie korzystać z ich właściwości.
         InitComplete — zgłaszane, gdy cały proces inicjalizacji (włącznie ze stroną)
         został zakończony. Jeśli jakaś czynność wymaga do działania zakończenia
         inicjalizacji, powinna znaleźć się w tej metodzie zdarzenia.
         PreLoad — podczas tego zdarzenia jest ładowany stan widoku strony
         i kontrolek oraz dane przesłane w żądaniu zwrotnym.
         Load — ładuje stronę, a następnie rekursywnie wszystkie kontrolki na stronie.
         W tym momencie można utworzyć połączenia z bazą danych. Po zdarzeniu
         Load następują inne zdarzenia kontrolek, takie jak kliknięcie przycisku.
         LoadComplete — podobnie jak InitComplete, to zdarzenie zachodzi
         po zakończeniu ładowania wszystkich kontrolek.
         PreRender — zachodzi tuż przed renderowaniem, czyli generowaniem kodu
         HTML na podstawie kontrolek ASP.NET. Przed zajściem tego zdarzenia
         kontrolki są wiązane ze źródłami danych, więc to jest najlepszy moment na
         wykonanie ewentualnych zmian związanych z danymi w takich kontrolkach.
         Bezpośrednio po tym zdarzeniu zachodzi renderowanie, po którym nie można
         zmodyfikować już w żaden sposób kontrolek.
Rozdział 5. ♦ Obsługa strony                                                                  51


             Unload — ma miejsce po zajściu zdarzenia dla wszystkich innych kontrolek.
             Można wtedy zwolnić zasoby przydzielone w ramach całej strony.

        Wszystkie te zdarzenia są częścią większego procesu, jakim jest realizacja żądania HTTP.
        Można powiedzieć, że proces ten składa się z trzech części:
          1. Wysłanie żądania do serwera.
          2. Analiza treści żądania i przetworzenie go (ten etap jest pomijany, w przypadku
             gdy wysyłane są statyczne strony HTML i nie są używane żadne technologie
             server-side) — powstanie odpowiedzi na podstawie plików znajdujących się
             na serwerze i danych zawartych w żądaniu.
          3. Odesłanie odpowiedzi do klienta.

        W przeciwieństwie do innych protokołów sieciowych, takich jak FTP, protokół HTTP
        jest protokołem bezstanowych. Oznacza to, że każde nowe żądanie wysłane przez
        klienta nie ma związku z poprzednim. Gdyby nie zastosowanie mechanizmów, takich
        jak sesje czy ciasteczka (ang. cookies), praktycznie nie byłoby możliwe korzystanie
        np. z poczty elektronicznej za pośrednictwem przeglądarki — wysyłając każde żądanie,
        trzeba byłoby za każdym razem podawać login i hasło — protokół sam w sobie nie
        umożliwia zapamiętania takich danych.

        Etap nr 1 stanowi zadanie przeglądarki. Na podstawie decyzji podejmowanych przez
        użytkownika (wpisanie adresu URL, kliknięcie odnośnika, wysłanie formularza) ge-
        nerowane są odpowiednie żądania (ang. request) HTTP, które następnie są wysyłane
        do odpowiedniego serwera. Nasz kontakt z tym etapem sprowadza się do możliwości
        pobrania informacji na temat żądania — zajmuje się tym klasa HttpRequest, która za
        pośrednictwem właściwości Request jest obecna w klasie Page.

        Etap nr 2 stanowi meritum niniejszej publikacji. Niezależnie od użytej technologii se-
        rver-side schemat działania jest zawsze taki sam — serwer WWW sprawdza typ pliku
        (na podstawie rozszerzenia lub typu MIME), jaki jest zawarty w żądaniu. Na tej pod-
        stawie może po prostu odesłać zawartość pliku do klienta (jeśli jest to zwykły plik
        danych) lub poddać treść pliku działaniu którejś z dostępnych technologii server-side.
        Oczywiście w takiej sytuacji do modułu server-side musi przekazać także szereg innych
        danych — informacje przesłane przez klienta (np. z formularzy albo adresu URL),
        dane żądania, ciasteczka, etc. Gdy to wszystko zostanie razem połączone i przetworzone
        przez moduł server-side, w wyniku renderowania (używając terminologii ASP.NET,
        choć termin ten pasuje również do innych technologii server-side) powstaje końcowy
        dokument HTML.

        Etap nr 3 polega na przesłaniu danych od serwera do klienta. W przypadku pominię-
        cia etapu 2. przesyłane dane pochodzą po prostu z wczytanego pliku znajdującego się
        na dysku serwera. Gdy klient odbierze cały plik, połączenie jest zamykane, a operacja
        wykonana przez klienta i serwer przechodzi do historii. Co ważne, z poziomu ASP.NET
        możemy mieć wpływ również i na ten etap (np. przez ustawienie kodowania przesy-
        łanego tekstu) za pośrednictwem właściwości Response klasy Page (analogicznie jak
        w etapie 1.).

        Ponieważ drugi etap omawiamy w zasadzie w znamienitej większości tej książki,
        przyjrzymy się teraz pozostałym etapom procesu.
52                                                     ASP.NET 3.5 dla programistów PHP



Request — tak wszystko się zaczyna…
     Główną zaletą tej właściwości klasy Page jest możliwość odczytania wielu przydat-
     nych informacji zawartych w żądaniu. Chociaż samo żądanie jest jedynie łańcuchem zna-
     ków (może, co prawda, zawierać pliki w przypadku użycia kontrolki FileUpload, ale
     nie wpływa to na samą formę), zawarta w nim ilość informacji z pewnością zadziwi
     każdego, kto nie zna dokładnej struktury żądania. Przeglądarka przesyła wraz z adresem
     URL więcej informacji, niż można by się spodziewać.

     Zacznijmy jednak od tego, co najprostsze, czyli właśnie adresu URL. Wbrew pozorom
     nie jest on reprezentowany tylko przez jedną właściwość. Dostajemy aż trzy właści-
     wości, które umożliwiają nam dostęp do wybranych elementów całego adresu:
         string Url — określa pełny adres URL żądania (zawierający adres serwera,
         ścieżkę do pliku oraz parametry dodatkowe).
         string RawUrl — określa adres URL bez nazwy serwera,
         czyli np. /katalog/plik.aspx?parametr=wartosc.
         NameValueCollection QueryString — określa kolekcję parametrów
         przekazanych w żądaniu (po znaku zapytania).

     Na uwagę zasługuje zwłaszcza ostatnia właściwość. Łańcuch zapytania pozwala na prze-
     kazywanie parametrów do strony WWW przez adres URL. W innych technologiach
     server-side jest to jeden z dwóch głównych sposobów na przekazywanie informacji
     między kolejnymi żądaniami. W przypadku ASP.NET przekazywanie danych odbywa
     się bez ingerencji programisty — po wysłaniu żądania wystarczy po prostu odczytać
     wybrane wartości tak, jak zostało to opisane w rozdziale 4.

     Mimo to istnieje możliwość wykorzystania mechanizmów podstawowych, takich jak
     opisane wyżej przekazywanie parametrów przez adres URL, nazywane metodą GET,
     i przesyłanie danych przez formularz, jednak bez jawnej reprezentacji w ramach adresu,
     a jedynie w obrębie żądania, czyli metoda POST. Każda z tych metod ma swoje wady
     i zalety. Metoda GET umożliwia przechowanie danych w jednym łańcuchu znaków,
     ów dodatku widocznym w pasku przeglądarki.

     Z drugiej strony, istnieje ograniczenie długości przesyłanych danych (z reguły do kilku
     kilobajtów). Tych ograniczeń nie posiada metoda POST. Należy jednak pamiętać, że o ile
     żądanie GET można swobodnie przechowywać i przetwarzać (np. przesyłać pocztą elektro-
     niczną, umieszczać jako odnośniki na innych stronach WWW, etc.), to żądanie POST
     nie daje tej możliwości — raz wygenerowane żądanie przesłane do serwera nie może
     być wyświetlone w podobny sposób. Co za tym idzie, proste parametry są z reguły
     przesyłane za pośrednictwem metody GET, a bardziej skomplikowane — metodą POST.

     Chociaż dane w ASP.NET są niejawnie (tj. w sposób, który programista nie ingeruje)
     przekazywane za pomocą widoku stanu, można korzystać również z metody GET. Wy-
     starczy odpowiednio sformułować np. adresy zawarte w odnośnikach (kontrolka
     HyperLink):
       Strona.aspx?parametr1=wartosc1&parametr2=innawartosc
Rozdział 5. ♦ Obsługa strony                                                                53


        W ten sposób mimo normalnego działania, zgodnego z ASP.NET, można odczytać warto-
        ści żądania GET. Wystarczy skorzystać z opisanej powyżej właściwości QueryString.
        Jest to typowa kolekcja-słownik, w której do żądanych elementów-wartości uzyskuje
        się dostęp przez podanie klucza-nazwy. Jeśli dla powyższego adresu chcemy pobrać
        wartość pierwszego parametru, wystarczy wywołać instrukcję:
          string s = Request.QueryString["parametr1"];

        Drugą grupą właściwości, niejako spokrewnionych z adresem URL, są fizyczne ścieżki
        dostępu, czyli ścieżki określające położenie katalogu strony bądź samej strony na dysku
        serwera.
            string PhysicalApplicationPath — określa ścieżkę do katalogu na dysku
            serwera, w którym znajduje się dana strona.
            string PhysicalPath — określa ścieżkę do danej strony na dysku serwera.

        Można używać też właściwości bez słowa Physical w nazwie, które określają ścieżkę
        wirtualną, np. /WebSite (ApplicationPath) lub /WebSite1/Strona.aspx (Path). Taki ze-
        staw właściwości (łącznie siedem) pozwala na swobodne korzystanie z wszelkiego
        rodzaju ścieżek.

        Istotnym elementem każdego żądania HTTP są nagłówki. Są one reprezentowane przez
        właściwość NameValueCollection Headers. Jak widać, jest to kolejny słownik-kolekcja.
        Odpowiada to faktycznej strukturze nagłówków. Przykładowy nagłówek ma następującą
        postać:
          Content-type: text/html

        Przed dwukropkiem znajduje się klucz, a za dwukropkiem — wartość. Oczywiście
        zawartość nagłówków zależy od przeglądarki i konkretnego żądania — mogą one
        ulegać zmianie.


Ciasteczka
        Inną istotną kolekcją są ciasteczka — specjalne pliki tekstowe o niedużym rozmiarze,
        zapisywane na komputerze użytkownika. Dzięki nim można zapisać informacje doty-
        czące na przykład danych logowania do poczty elektronicznej. Nie trzeba wtedy wpro-
        wadzać ich za każdym razem. Ciasteczka, w odróżnieniu od wykorzystywanego już
        typu NameValueCollection, mają nieco bardziej skomplikowaną strukturę, są więc re-
        prezentowane za pomocą właściwości HttpCookieCollection. Klasa ciasteczek (jak
        można się domyślić — HttpCookie) składa się z kilku ważnych właściwości, które
        charakteryzują każde ciasteczko. Oto najważniejsze:
            string Name — określa nazwę ciasteczka.
            string Value — określa wartość ciasteczka.
            DateTime Expires — określa datę wygaśnięcia ciasteczka.
54                                                    ASP.NET 3.5 dla programistów PHP


         bool HasKeys — określa, czy wartość ciasteczka jest pojedyncza, czy stanowi
         kolekcję.
         NameValueCollection Values — określa kolekcję wartości w przypadku,
         gdy stwierdzono jej istnienie.

     Dwie pierwsze właściwości muszą być wypełnione, inaczej istnienie ciasteczka nie ma
     sensu. Pominięcie właściwości Expires skutkuje usunięciem ciasteczka z komputera
     użytkownika po zakończeniu sesji na danej stronie, czyli najczęściej po zamknięciu
     przeglądarki. Reszta parametrów jest opcjonalna i z reguły nie wymaga stosowania.

     Oczywiście można również tworzyć ciasteczka. Jak większość podobnych, ale odwrot-
     nych procesów (np. czytanie żądania HTTP — tworzenie odpowiedzi) tak i ten należy
     do odpowiedzi, czyli klasy HttpResponse.


Niewinne szpiegowanie
     Żądania HTTP zawierają sporo informacji na temat użytkownika, a konkretnie jego prze-
     glądarki czy komputera. W tym celu można wykorzystać właściwości zaczynające się
     w większości od słów User:
         string UserAgent — określa nazwę i informacje o przeglądarce.
         string UserHostAddress — określa adres IP komputera, z którego zostało
         nawiązane połączenie.
         string[] UserLanguages — określa preferowane języki użytkownika
         (ustawione w przeglądarce; nie wszystkie mają taką możliwość).
         bool IsAuthenticated — określa, czy użytkownik jest zalogowany
         (o ile mechanizm ten został zaimplementowany).
         bool IsLocal — określa, czy żądanie pochodzi z lokalnego komputera
         (tego samego, na którym działa serwer) — właściwość przydatna zwłaszcza
         do celów testowych, umożliwiająca rozgraniczenie testów, dokonywanych
         często z lokalnego komputera, i innych żądań.
         bool IsSecure — określa, czy nawiązywane połączenie jest bezpieczne
         (z użyciem protokołu SSL).

     Na tym kończymy omawianie klasy HttpRequest; kilka ciekawych właściwości i metod,
     oprócz już poznanych, zostanie wykorzystanych przy okazji konkretnych przykładów.



Response — …a tak się kończy
     W tej klasie odnajdziemy wiele podobieństw łączących ją z klasą HttpRequest. Przede
     wszystkim niektóre procesy, działające niejako „w jedną stronę” w klasie HttpRequest,
     zostaną odwrócone w klasie HttpResponse. Na przykład, wspomniane ciasteczka mogły
Rozdział 5. ♦ Obsługa strony                                                                 55


        być odczytywane za pośrednictwem klasy HttpRequest; teraz interesować nas będzie
        tworzenie ciasteczek i dodawanie ich do odpowiedzi — klasy HttpResponse.

        Ogólnie rzecz ujmując, w zdecydowanej większości przypadków, jeśli trzeba samemu
        zająć się właściwością Response klasy Page, polega to na dodawaniu/tworzeniu róż-
        nych obiektów.

        Zaczniemy przewrotnie od faktu pozwalającego na zlekceważenie aktualnie przetwa-
        rzanej strony. Dysponując właściwością Response, możemy pozbyć się treści HTML
        generowanej przez ASP.NET, a następnie wysłać do strumienia dowolną zawartość
        w bajtach. Zasada działania opiera się na kilku prostych elementach klasy HttpResponse:
            string ContentType — określa typ MIME odpowiedzi. W przeciwieństwie
            do klasy Request, gdzie właściwość ta pełniła rolę jedynie informacyjną,
            dzięki niej możemy określić typ odpowiedzi, np. na obrazek.
            void Clear() — czyści zawartość bufora z danych. Dzięki temu można
            pozbyć się danych, które już znalazły się w strumieniu odpowiedzi.
            bool BufferOutput — określa, czy odpowiedź zostanie wysłana dopiero
            po całkowitym przetworzeniu strony.
            Stream OutputStream — określa strumień, z którego dane zostaną wysłane do klienta.

        Ponadto klasa Response definiuje właściwości Cookies i Headers, które zostały opisane
        przy okazji klasy Request. Tym razem można do nich dodawać własne ciasteczka bądź
        nagłówki — wszystko dla lepszej kontroli wysyłanych do użytkownika danych. Wy-
        starczy wykorzystać do tego celu metodę Add(), która przyjmuje odpowiednio obiekty
        klas HttpCookie i parę danych: klucz-wartość.

        Z ciekawszych elementów tej klasy należy wymienić na pewno dwie metody, które są
        często wykorzystywane w praktyce. Są to:
            void Redirect(string url) — przerywa wykonywanie strony i przekierowuje
            klienta pod podany adres. Uwaga! Należy podawać absolutne adresy URL
            wraz z protokołem (np. http://www.helion.pl), gdyż w przeciwnym razie
            serwer potraktuje adres URL jako relatywny.
            void TransmitFile(string sciezka) — przekazuje plik o podanym adresie
            (należy podawać relatywny URL) do klienta, pomijając w odpowiedzi żądaną
            stronę.

        Zwłaszcza pierwsza z metod jest stosowana w wielu sytuacjach; najczęstszym przy-
        kładem jest przekierowanie przy logowaniu/wylogowaniu, o ile nie skorzystano z do-
        myślnych mechanizmów. Poniżej znajduje się przykładowy kod, który umożliwia skie-
        rowanie do klienta obrazka, wyświetlając przekazany w polu tekstowym tekst:

        Default.aspx
          <asp:Label ID="Label1" runat="server" Text="Podaj tekst do wyswietlenia:"
            ></asp:Label><br />
          <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
          <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="OK" />
56                                                     ASP.NET 3.5 dla programistów PHP


     Default.aspx.cs
       protected void Page_Load(object sender, EventArgs e)
       {
         if (IsPostBack)
         {
           System.Drawing.Image img = System.Drawing.Image.
             FromFile(Server.MapPath("Puch.jpg"));
           System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(img);
           g.DrawString(TextBox1.Text, new System.Drawing.Font("Arial",20.0F),
             System.Drawing.Brushes.White, new System.Drawing.PointF(10, 10));
           Response.ContentType = "image/bmp";
           Response.Clear();
           img.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
           g.Dispose();
           img.Dispose();
         }
       }

     Po kliknięciu przycisku (może być ono zastąpione utratą fokusa w połączeniu z wła-
     ściwością AutoPostBack) dochodzi do otwarcia i edycji obrazka. Wyświetlamy na nim
     tekst wysłany przez użytkownika. Następnie wykorzystujemy poznane wcześniej wła-
     ściwości i metody, aby przygotować strumień i zapisać do niego zawartość obrazka.
     Oczywiście powyższe rozwiązanie mogłoby zostać pominięte, gdyby chodziło jedynie
     o wyświetlenie obrazka — wystarczyłoby użyć poznanej metody TransmitFile(). Takie
     rozwiązanie jest jednak bardziej uniwersalne, pozwala na modyfikację danych, a nawet
     pobieranie ich z innych źródeł — wszystko, co można przekazać przez strumień, może
     być wykorzystane.



Nie tylko dla studentów
— potyczki z sesjami
     Sesja jest jednym z podstawowych pojęć, które spędza sen z powiek nie tylko studen-
     tom, ale i programistom aplikacji sieciowych. Uwzględniając to, że protokół HTTP
     nie umożliwia zachowania stanu (tak jak np. FTP), technologie server-side muszą umoż-
     liwiać przechowywanie danych pomiędzy poszczególnymi żądaniami. Jedną z metod
     są ciasteczka, ale użytkownik może wyłączyć ich obsługę w przeglądarce. Z tego względu
     powszechnie wykorzystywanym mechanizmem są sesje.

     Sesja, w technologiach server-side najczęściej reprezentowana jako kolekcja-słownik,
     umożliwia zapis i odczyt wartości niczym zwykła kolekcja. Dzięki specjalnym mecha-
     nizmom słownik ów ma taki sam stan; przechowuje te same wartości pomiędzy róż-
     nymi żądaniami. Typowymi zastosowaniami sesji są przechowywanie obiektów kluczo-
     wych dla obsługi użytkownika, takich jak koszyk z zakupami w sklepie internetowym,
     dane logowania lub ostatnie operacje wykonane przez użytkownika. Niektóre z infor-
     macji, które w innych technologiach programista musi zapisywać w sesji sam, są au-
     tomatycznie przechowywane przez ASP.NET.
Rozdział 5. ♦ Obsługa strony                                                                  57


        Klasa HttpSessionState, udostępniająca funkcjonalność sesji, jest najzwyklejszą kolekcją.
        Z tego względu zapis i odczyt danych w kolekcji przebiega znacznie prościej niż w PHP.
        Wystarczy po prostu zapisać dane w kolekcji. Prosty i krótki przykład prezentuje dwie
        pułapki, na jakie muszą uważać programiści korzystający z mechanizmu sesji:

        Default.aspx
          <asp:Label ID="Label1" runat="server" Text="Podaj login:"></asp:Label><br />
          <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
          <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Rejestruj" />
          <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="Default.aspx">
            Przeładuj stronę od nowa</asp:HyperLink>

        Default.aspx.cs
          protected void Page_Load(object sender, EventArgs e)
          {
            if (!IsPostBack && Session["login"] != null)
              TextBox1.Text = Session["login"].ToString();
          }
          protected void Button1_Click(object sender, EventArgs e)
          {
            Session["login"] = TextBox1.Text;
          }

        Zadanie strony jest proste — jest to zwykła symulacja zapamiętania wartości pola
        tekstowego w sesji i odtwarzania go w razie potrzeby. Zapis do właściwości (przy-
        pominam — Session jest właściwością klasy Page, więc możemy się do niej odwoły-
        wać bez dodatkowych zapisów). Interesujący jest również odczyt. Na pewno musimy
        sprawdzić, czy wartość loginu istnieje w sesji. Ciekawsze jest jednak sprawdzanie po-
        stbacku — to warunek konieczny wynikający z kolejności wywoływania zdarzeń. Gdy-
        byśmy pominęli tę część warunku, przypisanie wartości z sesji do pola tekstowego
        odbywałoby się za każdym razem po pierwszym określeniu loginu. Ze względu na
        kolejność wywoływania zdarzeń (Page.Load zachodzi przed innymi zdarzeniami kontrolek
        potomnych) każda kolejna próba zmiany wartości w sesji (metoda Button1_Click) nie
        mogłaby się powieść. Nowa wartość pola tekstowego byłaby zastępowana starą war-
        tością z sesji. Dzięki dodatkowemu warunkowi wartość z sesji pobieramy tylko wtedy,
        gdy nie podjęto próby przypisania nowej wartości. Oczywiście przy większej liczbie
        kontrolek, które również mogłyby wygenerować postback, należałoby po prostu do-
        konać przypisania po ewentualnym wywołaniu metody Button1_Click.

        Drugi haczyk tkwi w kontrolce, która pojawiła się po raz pierwszy — HyperLink. Zo-
        stała ona przedstawiona w prostym celu — aby zademonstrować, że sesja działa rze-
        czywiście. Można powiedzieć, że przycisk również powoduje przeładowanie strony.
        Problem w tym, że działają wtedy również mechanizmy widoku stanu i wartość pola
        tekstowego zostałaby zapamiętana bez względu na wykorzystanie sesji. Jeśli jednak prze-
        ładujemy stronę całkowicie, przy zakomentowanej treści metody Page_Load, wartość
        pola tekstowego nie zostanie zapamiętana.

        Pozostałe istotne klasy, które znalazły swoje odzwierciedlenie w klasie Page, zostaną
        omówione w praktyce, w drugiej części książki. Teraz możemy zająć się tym, co ty-
        grysy webowe lubią najbardziej — obsługą danych.

More Related Content

What's hot

Po prostu PHP. Techniki zaawansowane
Po prostu PHP. Techniki zaawansowanePo prostu PHP. Techniki zaawansowane
Po prostu PHP. Techniki zaawansowaneWydawnictwo Helion
 
ASP.NET. Vademecum profesjonalisty
ASP.NET. Vademecum profesjonalistyASP.NET. Vademecum profesjonalisty
ASP.NET. Vademecum profesjonalistyWydawnictwo Helion
 
PHP. 101 praktycznych skryptów. Wydanie II
PHP. 101 praktycznych skryptów. Wydanie IIPHP. 101 praktycznych skryptów. Wydanie II
PHP. 101 praktycznych skryptów. Wydanie IIWydawnictwo Helion
 
PHP5. Zaawansowane programowanie
PHP5. Zaawansowane programowaniePHP5. Zaawansowane programowanie
PHP5. Zaawansowane programowanieWydawnictwo Helion
 
PHP i MySQL. Tworzenie stron WWW. Wydanie drugie. Vademecum profesjonalisty
PHP i MySQL. Tworzenie stron WWW. Wydanie drugie. Vademecum profesjonalistyPHP i MySQL. Tworzenie stron WWW. Wydanie drugie. Vademecum profesjonalisty
PHP i MySQL. Tworzenie stron WWW. Wydanie drugie. Vademecum profesjonalistyWydawnictwo Helion
 
PHP. Programowanie w systemie Windows. Vademecum profesjonalisty
PHP. Programowanie w systemie Windows. Vademecum profesjonalistyPHP. Programowanie w systemie Windows. Vademecum profesjonalisty
PHP. Programowanie w systemie Windows. Vademecum profesjonalistyWydawnictwo Helion
 
PHP i MySQL. Dynamiczne strony WWW. Szybki start
PHP i MySQL. Dynamiczne strony WWW. Szybki startPHP i MySQL. Dynamiczne strony WWW. Szybki start
PHP i MySQL. Dynamiczne strony WWW. Szybki startWydawnictwo Helion
 
Visual C++ 2005 Express Edition. Tworzenie aplikacji dla Windows
Visual C++ 2005 Express Edition. Tworzenie aplikacji dla WindowsVisual C++ 2005 Express Edition. Tworzenie aplikacji dla Windows
Visual C++ 2005 Express Edition. Tworzenie aplikacji dla WindowsWydawnictwo Helion
 
ASP.NET 2.0. Projektowanie aplikacji internetowych
ASP.NET 2.0. Projektowanie aplikacji internetowychASP.NET 2.0. Projektowanie aplikacji internetowych
ASP.NET 2.0. Projektowanie aplikacji internetowychWydawnictwo Helion
 
Aplikacje w Visual C++ 2005. Przykłady
Aplikacje w Visual C++ 2005. PrzykładyAplikacje w Visual C++ 2005. Przykłady
Aplikacje w Visual C++ 2005. PrzykładyWydawnictwo Helion
 
Tworzenie stron WWW. Kurs. Wydanie II
Tworzenie stron WWW. Kurs. Wydanie IITworzenie stron WWW. Kurs. Wydanie II
Tworzenie stron WWW. Kurs. Wydanie IIWydawnictwo Helion
 
C++Builder i Turbo C++. Podstawy
C++Builder i Turbo C++. PodstawyC++Builder i Turbo C++. Podstawy
C++Builder i Turbo C++. PodstawyWydawnictwo Helion
 

What's hot (20)

JavaScript i DHTML. Receptury
JavaScript i DHTML. RecepturyJavaScript i DHTML. Receptury
JavaScript i DHTML. Receptury
 
Po prostu PHP. Techniki zaawansowane
Po prostu PHP. Techniki zaawansowanePo prostu PHP. Techniki zaawansowane
Po prostu PHP. Techniki zaawansowane
 
ASP.NET. Vademecum profesjonalisty
ASP.NET. Vademecum profesjonalistyASP.NET. Vademecum profesjonalisty
ASP.NET. Vademecum profesjonalisty
 
HTML w 10 prostych krokach
HTML w 10 prostych krokachHTML w 10 prostych krokach
HTML w 10 prostych krokach
 
PHP. 101 praktycznych skryptów. Wydanie II
PHP. 101 praktycznych skryptów. Wydanie IIPHP. 101 praktycznych skryptów. Wydanie II
PHP. 101 praktycznych skryptów. Wydanie II
 
Tworzenie stron WWW. Kurs
Tworzenie stron WWW. KursTworzenie stron WWW. Kurs
Tworzenie stron WWW. Kurs
 
PHP5. Zaawansowane programowanie
PHP5. Zaawansowane programowaniePHP5. Zaawansowane programowanie
PHP5. Zaawansowane programowanie
 
PHP i MySQL. Tworzenie stron WWW. Wydanie drugie. Vademecum profesjonalisty
PHP i MySQL. Tworzenie stron WWW. Wydanie drugie. Vademecum profesjonalistyPHP i MySQL. Tworzenie stron WWW. Wydanie drugie. Vademecum profesjonalisty
PHP i MySQL. Tworzenie stron WWW. Wydanie drugie. Vademecum profesjonalisty
 
PHP. Programowanie w systemie Windows. Vademecum profesjonalisty
PHP. Programowanie w systemie Windows. Vademecum profesjonalistyPHP. Programowanie w systemie Windows. Vademecum profesjonalisty
PHP. Programowanie w systemie Windows. Vademecum profesjonalisty
 
PHP i MySQL. Dynamiczne strony WWW. Szybki start
PHP i MySQL. Dynamiczne strony WWW. Szybki startPHP i MySQL. Dynamiczne strony WWW. Szybki start
PHP i MySQL. Dynamiczne strony WWW. Szybki start
 
Visual C++ 2005 Express Edition. Tworzenie aplikacji dla Windows
Visual C++ 2005 Express Edition. Tworzenie aplikacji dla WindowsVisual C++ 2005 Express Edition. Tworzenie aplikacji dla Windows
Visual C++ 2005 Express Edition. Tworzenie aplikacji dla Windows
 
ASP.NET 2.0. Projektowanie aplikacji internetowych
ASP.NET 2.0. Projektowanie aplikacji internetowychASP.NET 2.0. Projektowanie aplikacji internetowych
ASP.NET 2.0. Projektowanie aplikacji internetowych
 
Dreamweaver MX
Dreamweaver MXDreamweaver MX
Dreamweaver MX
 
PHP5. Tajniki programowania
PHP5. Tajniki programowaniaPHP5. Tajniki programowania
PHP5. Tajniki programowania
 
Aplikacje w Visual C++ 2005. Przykłady
Aplikacje w Visual C++ 2005. PrzykładyAplikacje w Visual C++ 2005. Przykłady
Aplikacje w Visual C++ 2005. Przykłady
 
Tworzenie stron WWW. Kurs. Wydanie II
Tworzenie stron WWW. Kurs. Wydanie IITworzenie stron WWW. Kurs. Wydanie II
Tworzenie stron WWW. Kurs. Wydanie II
 
Po prostu HTML 4. Wydanie III
Po prostu HTML 4. Wydanie IIIPo prostu HTML 4. Wydanie III
Po prostu HTML 4. Wydanie III
 
C++Builder i Turbo C++. Podstawy
C++Builder i Turbo C++. PodstawyC++Builder i Turbo C++. Podstawy
C++Builder i Turbo C++. Podstawy
 
ABC Delphi 2006
ABC Delphi 2006ABC Delphi 2006
ABC Delphi 2006
 
Po prostu FrontPage 2003 PL
Po prostu FrontPage 2003 PLPo prostu FrontPage 2003 PL
Po prostu FrontPage 2003 PL
 

Viewers also liked

Tworzenie aplikacji dla Windows. Od prostych programów do gier komputerowych
Tworzenie aplikacji dla Windows. Od prostych programów do gier komputerowychTworzenie aplikacji dla Windows. Od prostych programów do gier komputerowych
Tworzenie aplikacji dla Windows. Od prostych programów do gier komputerowychWydawnictwo Helion
 
Photoshop CS3/CS3 PL. Kanały i maski. Biblia
Photoshop CS3/CS3 PL. Kanały i maski. BibliaPhotoshop CS3/CS3 PL. Kanały i maski. Biblia
Photoshop CS3/CS3 PL. Kanały i maski. BibliaWydawnictwo Helion
 
FreeBSD 7. Instalacja i konfiguracja
FreeBSD 7. Instalacja i konfiguracjaFreeBSD 7. Instalacja i konfiguracja
FreeBSD 7. Instalacja i konfiguracjaWydawnictwo Helion
 
FreeBSD. Podstawy administracji systemem. Wydanie II
FreeBSD. Podstawy administracji systemem. Wydanie IIFreeBSD. Podstawy administracji systemem. Wydanie II
FreeBSD. Podstawy administracji systemem. Wydanie IIWydawnictwo Helion
 
CSS. Witryny internetowe szyte na miarę. Autorytety informatyki. Wydanie II
CSS. Witryny internetowe szyte na miarę. Autorytety informatyki. Wydanie IICSS. Witryny internetowe szyte na miarę. Autorytety informatyki. Wydanie II
CSS. Witryny internetowe szyte na miarę. Autorytety informatyki. Wydanie IIWydawnictwo Helion
 
CSS i Ajax. Strony WWW zgodne ze standardami sieciowymi W3C
CSS i Ajax. Strony WWW zgodne ze standardami sieciowymi W3CCSS i Ajax. Strony WWW zgodne ze standardami sieciowymi W3C
CSS i Ajax. Strony WWW zgodne ze standardami sieciowymi W3CWydawnictwo Helion
 
USB. Praktyczne programowanie z Windows API w C++
USB. Praktyczne programowanie z Windows API w C++USB. Praktyczne programowanie z Windows API w C++
USB. Praktyczne programowanie z Windows API w C++Wydawnictwo Helion
 
Kompresja dźwięku i obrazu wideo Real World
Kompresja dźwięku i obrazu wideo Real WorldKompresja dźwięku i obrazu wideo Real World
Kompresja dźwięku i obrazu wideo Real WorldWydawnictwo Helion
 
Witryny nie do ukrycia. Jak zbudować stronę, którą znajdzie każda wyszukiwarka
Witryny nie do ukrycia. Jak zbudować stronę, którą znajdzie każda wyszukiwarkaWitryny nie do ukrycia. Jak zbudować stronę, którą znajdzie każda wyszukiwarka
Witryny nie do ukrycia. Jak zbudować stronę, którą znajdzie każda wyszukiwarkaWydawnictwo Helion
 
Hacking. Sztuka penetracji. Wydanie II
Hacking. Sztuka penetracji. Wydanie IIHacking. Sztuka penetracji. Wydanie II
Hacking. Sztuka penetracji. Wydanie IIWydawnictwo Helion
 
Oracle Database 11g. Programowanie w języku PL/SQL
Oracle Database 11g. Programowanie w języku PL/SQLOracle Database 11g. Programowanie w języku PL/SQL
Oracle Database 11g. Programowanie w języku PL/SQLWydawnictwo Helion
 
Informatyka Europejczyka. Podręcznik dla szkoły podstawowej, kl. IV - VI. Edy...
Informatyka Europejczyka. Podręcznik dla szkoły podstawowej, kl. IV - VI. Edy...Informatyka Europejczyka. Podręcznik dla szkoły podstawowej, kl. IV - VI. Edy...
Informatyka Europejczyka. Podręcznik dla szkoły podstawowej, kl. IV - VI. Edy...Wydawnictwo Helion
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaWydawnictwo Helion
 

Viewers also liked (15)

Tworzenie aplikacji dla Windows. Od prostych programów do gier komputerowych
Tworzenie aplikacji dla Windows. Od prostych programów do gier komputerowychTworzenie aplikacji dla Windows. Od prostych programów do gier komputerowych
Tworzenie aplikacji dla Windows. Od prostych programów do gier komputerowych
 
Photoshop CS3/CS3 PL. Kanały i maski. Biblia
Photoshop CS3/CS3 PL. Kanały i maski. BibliaPhotoshop CS3/CS3 PL. Kanały i maski. Biblia
Photoshop CS3/CS3 PL. Kanały i maski. Biblia
 
FreeBSD 7. Instalacja i konfiguracja
FreeBSD 7. Instalacja i konfiguracjaFreeBSD 7. Instalacja i konfiguracja
FreeBSD 7. Instalacja i konfiguracja
 
FreeBSD. Podstawy administracji systemem. Wydanie II
FreeBSD. Podstawy administracji systemem. Wydanie IIFreeBSD. Podstawy administracji systemem. Wydanie II
FreeBSD. Podstawy administracji systemem. Wydanie II
 
CSS. Witryny internetowe szyte na miarę. Autorytety informatyki. Wydanie II
CSS. Witryny internetowe szyte na miarę. Autorytety informatyki. Wydanie IICSS. Witryny internetowe szyte na miarę. Autorytety informatyki. Wydanie II
CSS. Witryny internetowe szyte na miarę. Autorytety informatyki. Wydanie II
 
Bazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcieBazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcie
 
CSS i Ajax. Strony WWW zgodne ze standardami sieciowymi W3C
CSS i Ajax. Strony WWW zgodne ze standardami sieciowymi W3CCSS i Ajax. Strony WWW zgodne ze standardami sieciowymi W3C
CSS i Ajax. Strony WWW zgodne ze standardami sieciowymi W3C
 
USB. Praktyczne programowanie z Windows API w C++
USB. Praktyczne programowanie z Windows API w C++USB. Praktyczne programowanie z Windows API w C++
USB. Praktyczne programowanie z Windows API w C++
 
Kompresja dźwięku i obrazu wideo Real World
Kompresja dźwięku i obrazu wideo Real WorldKompresja dźwięku i obrazu wideo Real World
Kompresja dźwięku i obrazu wideo Real World
 
Witryny nie do ukrycia. Jak zbudować stronę, którą znajdzie każda wyszukiwarka
Witryny nie do ukrycia. Jak zbudować stronę, którą znajdzie każda wyszukiwarkaWitryny nie do ukrycia. Jak zbudować stronę, którą znajdzie każda wyszukiwarka
Witryny nie do ukrycia. Jak zbudować stronę, którą znajdzie każda wyszukiwarka
 
Hacking. Sztuka penetracji. Wydanie II
Hacking. Sztuka penetracji. Wydanie IIHacking. Sztuka penetracji. Wydanie II
Hacking. Sztuka penetracji. Wydanie II
 
Oracle Database 11g. Programowanie w języku PL/SQL
Oracle Database 11g. Programowanie w języku PL/SQLOracle Database 11g. Programowanie w języku PL/SQL
Oracle Database 11g. Programowanie w języku PL/SQL
 
Informatyka Europejczyka. Podręcznik dla szkoły podstawowej, kl. IV - VI. Edy...
Informatyka Europejczyka. Podręcznik dla szkoły podstawowej, kl. IV - VI. Edy...Informatyka Europejczyka. Podręcznik dla szkoły podstawowej, kl. IV - VI. Edy...
Informatyka Europejczyka. Podręcznik dla szkoły podstawowej, kl. IV - VI. Edy...
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacja
 
JavaScript. Pierwsze starcie
JavaScript. Pierwsze starcieJavaScript. Pierwsze starcie
JavaScript. Pierwsze starcie
 

Similar to ASP.NET 3.5 dla programistów PHP

ASP.NET 2.0. Gotowe rozwiązania
ASP.NET 2.0. Gotowe rozwiązaniaASP.NET 2.0. Gotowe rozwiązania
ASP.NET 2.0. Gotowe rozwiązaniaWydawnictwo Helion
 
PHP, MySQL i Apache dla każdego. Wydanie II
PHP, MySQL i Apache dla każdego. Wydanie IIPHP, MySQL i Apache dla każdego. Wydanie II
PHP, MySQL i Apache dla każdego. Wydanie IIWydawnictwo Helion
 
Visual C# 2005. Zapiski programisty
Visual C# 2005. Zapiski programistyVisual C# 2005. Zapiski programisty
Visual C# 2005. Zapiski programistyWydawnictwo Helion
 
Visual C# 2008. Projektowanie aplikacji. Pierwsze starcie
Visual C# 2008. Projektowanie aplikacji. Pierwsze starcieVisual C# 2008. Projektowanie aplikacji. Pierwsze starcie
Visual C# 2008. Projektowanie aplikacji. Pierwsze starcieWydawnictwo Helion
 
Delphi dla .NET. Vademecum profesjonalisty
Delphi dla .NET. Vademecum profesjonalistyDelphi dla .NET. Vademecum profesjonalisty
Delphi dla .NET. Vademecum profesjonalistyWydawnictwo Helion
 
Delphi 8 .NET. Kompendium programisty
Delphi 8 .NET. Kompendium programistyDelphi 8 .NET. Kompendium programisty
Delphi 8 .NET. Kompendium programistyWydawnictwo Helion
 
Eclipse Web Tools Platform. Tworzenie aplikacji WWW w języku Java
Eclipse Web Tools Platform. Tworzenie aplikacji WWW w języku JavaEclipse Web Tools Platform. Tworzenie aplikacji WWW w języku Java
Eclipse Web Tools Platform. Tworzenie aplikacji WWW w języku JavaWydawnictwo Helion
 
C++. Wykorzystaj potęgę aplikacji graficznych
C++. Wykorzystaj potęgę aplikacji graficznychC++. Wykorzystaj potęgę aplikacji graficznych
C++. Wykorzystaj potęgę aplikacji graficznychWydawnictwo Helion
 
PHP5, Apache i MySQL. Od podstaw
PHP5, Apache i MySQL. Od podstawPHP5, Apache i MySQL. Od podstaw
PHP5, Apache i MySQL. Od podstawWydawnictwo Helion
 
PHP i MySQL. Witryna WWW oparta na bazie danych. Wydanie III
PHP i MySQL. Witryna WWW oparta na bazie danych. Wydanie IIIPHP i MySQL. Witryna WWW oparta na bazie danych. Wydanie III
PHP i MySQL. Witryna WWW oparta na bazie danych. Wydanie IIIWydawnictwo Helion
 
Delphi. Techniki bazodanowe i internetowe
Delphi. Techniki bazodanowe i internetoweDelphi. Techniki bazodanowe i internetowe
Delphi. Techniki bazodanowe i internetoweWydawnictwo Helion
 
.NET Framework 2.0. Zaawansowane programowanie
.NET Framework 2.0. Zaawansowane programowanie.NET Framework 2.0. Zaawansowane programowanie
.NET Framework 2.0. Zaawansowane programowanieWydawnictwo Helion
 
Microsoft Visual Basic .NET 2003. Księga eksperta
Microsoft Visual Basic .NET 2003. Księga ekspertaMicrosoft Visual Basic .NET 2003. Księga eksperta
Microsoft Visual Basic .NET 2003. Księga ekspertaWydawnictwo Helion
 
Ajax. Niezbędnik projektanta dynamicznych aplikacji
Ajax. Niezbędnik projektanta dynamicznych aplikacjiAjax. Niezbędnik projektanta dynamicznych aplikacji
Ajax. Niezbędnik projektanta dynamicznych aplikacjiWydawnictwo Helion
 
Microsoft Access. Podręcznik administratora
Microsoft Access. Podręcznik administratoraMicrosoft Access. Podręcznik administratora
Microsoft Access. Podręcznik administratoraWydawnictwo Helion
 
Wstęp do programowania w języku C#
Wstęp do programowania w języku C#Wstęp do programowania w języku C#
Wstęp do programowania w języku C#Wydawnictwo Helion
 
Visual Basic .NET. Encyklopedia
Visual Basic .NET. EncyklopediaVisual Basic .NET. Encyklopedia
Visual Basic .NET. EncyklopediaWydawnictwo Helion
 
PHP, MySQL i Apache dla każdego. Wydanie III
PHP, MySQL i Apache dla każdego. Wydanie IIIPHP, MySQL i Apache dla każdego. Wydanie III
PHP, MySQL i Apache dla każdego. Wydanie IIIWydawnictwo Helion
 
Ajax. Wzorce i najlepsze rozwiązania
Ajax. Wzorce i najlepsze rozwiązaniaAjax. Wzorce i najlepsze rozwiązania
Ajax. Wzorce i najlepsze rozwiązaniaWydawnictwo Helion
 

Similar to ASP.NET 3.5 dla programistów PHP (20)

ASP.NET 2.0. Gotowe rozwiązania
ASP.NET 2.0. Gotowe rozwiązaniaASP.NET 2.0. Gotowe rozwiązania
ASP.NET 2.0. Gotowe rozwiązania
 
C# i .NET
C# i .NETC# i .NET
C# i .NET
 
PHP, MySQL i Apache dla każdego. Wydanie II
PHP, MySQL i Apache dla każdego. Wydanie IIPHP, MySQL i Apache dla każdego. Wydanie II
PHP, MySQL i Apache dla każdego. Wydanie II
 
Visual C# 2005. Zapiski programisty
Visual C# 2005. Zapiski programistyVisual C# 2005. Zapiski programisty
Visual C# 2005. Zapiski programisty
 
Visual C# 2008. Projektowanie aplikacji. Pierwsze starcie
Visual C# 2008. Projektowanie aplikacji. Pierwsze starcieVisual C# 2008. Projektowanie aplikacji. Pierwsze starcie
Visual C# 2008. Projektowanie aplikacji. Pierwsze starcie
 
Delphi dla .NET. Vademecum profesjonalisty
Delphi dla .NET. Vademecum profesjonalistyDelphi dla .NET. Vademecum profesjonalisty
Delphi dla .NET. Vademecum profesjonalisty
 
Delphi 8 .NET. Kompendium programisty
Delphi 8 .NET. Kompendium programistyDelphi 8 .NET. Kompendium programisty
Delphi 8 .NET. Kompendium programisty
 
Eclipse Web Tools Platform. Tworzenie aplikacji WWW w języku Java
Eclipse Web Tools Platform. Tworzenie aplikacji WWW w języku JavaEclipse Web Tools Platform. Tworzenie aplikacji WWW w języku Java
Eclipse Web Tools Platform. Tworzenie aplikacji WWW w języku Java
 
C++. Wykorzystaj potęgę aplikacji graficznych
C++. Wykorzystaj potęgę aplikacji graficznychC++. Wykorzystaj potęgę aplikacji graficznych
C++. Wykorzystaj potęgę aplikacji graficznych
 
PHP5, Apache i MySQL. Od podstaw
PHP5, Apache i MySQL. Od podstawPHP5, Apache i MySQL. Od podstaw
PHP5, Apache i MySQL. Od podstaw
 
PHP i MySQL. Witryna WWW oparta na bazie danych. Wydanie III
PHP i MySQL. Witryna WWW oparta na bazie danych. Wydanie IIIPHP i MySQL. Witryna WWW oparta na bazie danych. Wydanie III
PHP i MySQL. Witryna WWW oparta na bazie danych. Wydanie III
 
Delphi. Techniki bazodanowe i internetowe
Delphi. Techniki bazodanowe i internetoweDelphi. Techniki bazodanowe i internetowe
Delphi. Techniki bazodanowe i internetowe
 
.NET Framework 2.0. Zaawansowane programowanie
.NET Framework 2.0. Zaawansowane programowanie.NET Framework 2.0. Zaawansowane programowanie
.NET Framework 2.0. Zaawansowane programowanie
 
Microsoft Visual Basic .NET 2003. Księga eksperta
Microsoft Visual Basic .NET 2003. Księga ekspertaMicrosoft Visual Basic .NET 2003. Księga eksperta
Microsoft Visual Basic .NET 2003. Księga eksperta
 
Ajax. Niezbędnik projektanta dynamicznych aplikacji
Ajax. Niezbędnik projektanta dynamicznych aplikacjiAjax. Niezbędnik projektanta dynamicznych aplikacji
Ajax. Niezbędnik projektanta dynamicznych aplikacji
 
Microsoft Access. Podręcznik administratora
Microsoft Access. Podręcznik administratoraMicrosoft Access. Podręcznik administratora
Microsoft Access. Podręcznik administratora
 
Wstęp do programowania w języku C#
Wstęp do programowania w języku C#Wstęp do programowania w języku C#
Wstęp do programowania w języku C#
 
Visual Basic .NET. Encyklopedia
Visual Basic .NET. EncyklopediaVisual Basic .NET. Encyklopedia
Visual Basic .NET. Encyklopedia
 
PHP, MySQL i Apache dla każdego. Wydanie III
PHP, MySQL i Apache dla każdego. Wydanie IIIPHP, MySQL i Apache dla każdego. Wydanie III
PHP, MySQL i Apache dla każdego. Wydanie III
 
Ajax. Wzorce i najlepsze rozwiązania
Ajax. Wzorce i najlepsze rozwiązaniaAjax. Wzorce i najlepsze rozwiązania
Ajax. Wzorce i najlepsze rozwiązania
 

More from Wydawnictwo Helion

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyWydawnictwo Helion
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikWydawnictwo Helion
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczneWydawnictwo Helion
 
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesieE-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesieWydawnictwo Helion
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsWydawnictwo Helion
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IIWydawnictwo Helion
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuWydawnictwo Helion
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIWydawnictwo Helion
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningWydawnictwo Helion
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykWydawnictwo Helion
 
Serwer SQL 2008. Administracja i programowanie
Serwer SQL 2008. Administracja i programowanieSerwer SQL 2008. Administracja i programowanie
Serwer SQL 2008. Administracja i programowanieWydawnictwo Helion
 
Microsoft Visual Studio 2008. Księga eksperta
Microsoft Visual Studio 2008. Księga ekspertaMicrosoft Visual Studio 2008. Księga eksperta
Microsoft Visual Studio 2008. Księga ekspertaWydawnictwo Helion
 
Rewizor GT. Prowadzenie ewidencji księgowej
Rewizor GT. Prowadzenie ewidencji księgowejRewizor GT. Prowadzenie ewidencji księgowej
Rewizor GT. Prowadzenie ewidencji księgowejWydawnictwo Helion
 

More from Wydawnictwo Helion (20)

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. Projekty
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnik
 
Access w biurze i nie tylko
Access w biurze i nie tylkoAccess w biurze i nie tylko
Access w biurze i nie tylko
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
 
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesieE-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image&#39;u w biznesie
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółu
 
Windows PowerShell. Podstawy
Windows PowerShell. PodstawyWindows PowerShell. Podstawy
Windows PowerShell. Podstawy
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie II
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny trening
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktyk
 
Excel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktykExcel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktyk
 
Access 2007 PL. Seria praktyk
Access 2007 PL. Seria praktykAccess 2007 PL. Seria praktyk
Access 2007 PL. Seria praktyk
 
Word 2007 PL. Seria praktyk
Word 2007 PL. Seria praktykWord 2007 PL. Seria praktyk
Word 2007 PL. Seria praktyk
 
AutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PLAutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PL
 
Inventor. Pierwsze kroki
Inventor. Pierwsze krokiInventor. Pierwsze kroki
Inventor. Pierwsze kroki
 
Serwer SQL 2008. Administracja i programowanie
Serwer SQL 2008. Administracja i programowanieSerwer SQL 2008. Administracja i programowanie
Serwer SQL 2008. Administracja i programowanie
 
Microsoft Visual Studio 2008. Księga eksperta
Microsoft Visual Studio 2008. Księga ekspertaMicrosoft Visual Studio 2008. Księga eksperta
Microsoft Visual Studio 2008. Księga eksperta
 
Rewizor GT. Prowadzenie ewidencji księgowej
Rewizor GT. Prowadzenie ewidencji księgowejRewizor GT. Prowadzenie ewidencji księgowej
Rewizor GT. Prowadzenie ewidencji księgowej
 

ASP.NET 3.5 dla programistów PHP

  • 1. ASP.NET 3.5 dla programistów PHP Autor: Krzysztof Rychlicki-Kicior ISBN: 978-83-246-1916-0 Format: 158x235, stron: 160 Stwórz aplikacje internetowe w technologii ASP.NET 3.5 • Poznaj i skonfiguruj œrodowisko programistyczne • Zaprojektuj strukturê aplikacji • Po³¹cz aplikacjê z baz¹ danych • Wyœwietl dane na stronach Technologie PHP i ASP.NET maj¹ kilka cech wspólnych — obie s³u¿¹ do tworzenia aplikacji internetowych, uruchamianych za poœrednictwem przegl¹darki internetowej, i generuj¹ wynik swojego dzia³ania w postaci dokumentów XHTML. Jednak istnieje miêdzy nimi jedna istotna ró¿nica — PHP wykorzystuje rozwi¹zania open source, a ASP.NET rozwi¹zania komercyjne, rozwijane przez firmê Microsoft. ASP.NET opiera siê na platformie .NET — uniwersalnym frameworku, pozwalaj¹cym na korzystanie z ró¿nych jêzyków programowania w celu tworzenia skalowalnych, szybkich i ³atwych do rozwijania aplikacji sieciowych. Nie bez znaczenia jest tak¿e œrodowisko programistyczne — Visual Studio to doskona³e narzêdzie, znacznie przyspieszaj¹ce i usprawniaj¹ce proces tworzenia oprogramowania. „ASP.NET 3.5 dla programistów PHP” to wprowadzenie do technologii ASP dla wszystkich twórców aplikacji internetowych, którzy dotychczas korzystali z PHP. Czytaj¹c tê ksi¹¿kê, zrozumiesz g³ówne zasady korzystania z platformy .NET i techniki budowania aplikacji sieciowych. Dowiesz siê, jak skonfigurowaæ œrodowisko pracy i zaprojektowaæ strukturê aplikacji. Nauczysz siê korzystaæ z najwa¿niejszych elementów platformy .NET — kontrolek bêd¹cych gotowymi „cegie³kami” do budowy stron internetowych ASP. Poznasz podstawowe kontrolki, tworz¹ce interfejs u¿ytkownika i zarz¹dzaj¹ce sesj¹, po³¹czysz aplikacjê z baz¹ danych i zastosujesz kontrolki do wyœwietlenia danych na stronie. Przeczytasz o sprawdzaniu poprawnoœci danych wprowadzanych do formularzy i przypisywaniu ról u¿ytkownikom aplikacji. Znajdziesz tu tak¿e informacje o tym, w jaki sposób wykorzystaæ technologiê AJAX do budowy interfejsów u¿ytkownika aplikacji ASP.NET. • Porównanie technologii s³u¿¹cych do tworzenia aplikacji sieciowych Wydawnictwo Helion • Konfiguracja bazy MS SQL i instalacja narzêdzi programistycznych ul. Koœciuszki 1c • Kontrolki interfejsu u¿ytkownika 44-100 Gliwice • Zarz¹dzanie sesj¹ i plikami cookie tel. 032 230 98 63 • Komunikacja z bazami danych za pomoc¹ ADO.NET e-mail: helion@helion.pl • Wyœwietlanie danych na stronach • Weryfikacja poprawnoœci danych z formularzy • Obs³uga kont u¿ytkowników • AJAX w aplikacjach ASP.NET Spróbuj czegoœ nowego. Mo¿e w ASP.NET 3.5 odnajdziesz to, czego brakowa³o Ci w PHP?
  • 2. Spis treści Podziękowania ................................................................................. 5 Wstęp .............................................................................................. 7 Rozdział 1. Aplikacje webowe — przegląd technologii ......................................... 9 Perl ................................................................................................................................. 11 Python ............................................................................................................................. 12 Ruby ............................................................................................................................... 13 J2EE/JSP ........................................................................................................................ 13 Rozdział 2. ASP.NET v. PHP ............................................................................. 15 Zalety .............................................................................................................................. 15 Wady .............................................................................................................................. 17 Rozdział 3. Środowisko programistyczne .......................................................... 19 Konfiguracja środowiska SQL ....................................................................................... 20 Pierwsza aplikacja webowa ............................................................................................ 22 Mikstura znaczników ............................................................................................... 24 Debugowanie aplikacji ............................................................................................. 26 Rozdział 4. Podstawowe kontrolki .................................................................... 29 HTML v. ASP.NET ........................................................................................................ 29 Control ............................................................................................................................ 30 WebControl .................................................................................................................... 33 TextBox (input type="text", textarea, input type="password") ...................................... 34 Button (input type="submit", type="button") ................................................................. 35 DropDownList (select) ................................................................................................... 36 Mechanizm PostBack ............................................................................................... 37 ListBox (select multiple="multiple") .............................................................................. 38 CheckBox (input type="checkbox") ............................................................................... 40 CheckBoxList ................................................................................................................. 41 RadioButton (input type="radio") .................................................................................. 42 RadioButtonList ............................................................................................................. 42 Image (<img>) ................................................................................................................ 42 ImageButton ............................................................................................................. 43 ImageMap ................................................................................................................ 43 FileUpload (input type="file") ........................................................................................ 45 Pozostałe kontrolki ......................................................................................................... 47
  • 3. 4 ASP.NET 3.5 dla programistów PHP Rozdział 5. Obsługa strony ............................................................................... 49 Wszystkie drogi prowadzą do strony — Page ................................................................ 49 Request — tak wszystko się zaczyna… .......................................................................... 52 Ciasteczka ................................................................................................................ 53 Niewinne szpiegowanie ............................................................................................ 54 Response — …a tak się kończy ..................................................................................... 54 Nie tylko dla studentów — potyczki z sesjami ............................................................... 56 Rozdział 6. Źródła danych ................................................................................ 59 Słowo o wzorcach… ....................................................................................................... 59 Źródła danych ................................................................................................................. 62 SqlDataSource ................................................................................................................ 63 Rozdział 7. Klasy struktur danych — ADO.NET .................................................. 67 DataColumn i DataRow — kolumny + wiersze = tabela ................................................ 68 Relacje ............................................................................................................................ 70 Widok danych ................................................................................................................. 73 Dostawca danych na przykładzie MS SQL ........................................................................... 73 Rozdział 8. Kontrolki danych ............................................................................ 77 Obsługa danych bez ogródek .......................................................................................... 79 Repeater ................................................................................................................... 80 DetailsView .............................................................................................................. 82 3 w 1 — kontrolki i źródła ....................................................................................... 84 GridView — cała władza w ręce siatki .................................................................... 87 Rozdział 9. Walidacja danych ........................................................................... 93 RequiredFieldValidator .................................................................................................. 93 RangeValidator ............................................................................................................... 95 CompareValidator .......................................................................................................... 97 RegularExpressionValidator ........................................................................................... 98 Rozdział 10. System użytkowników .................................................................... 99 Konfigurowanie aplikacji ASP.NET ............................................................................ 100 Role, czyli uprawnienia ................................................................................................ 104 Rozdział 11. Mistrz i uczeń, czyli zastępcy include’a ......................................... 107 ASP.NET i PHP — to samo czy tak samo? .................................................................. 108 Rozdział 12. Historia o starych znajomych, czyli AJAX w .NET ........................... 111 A(SP.NET) + A(JAX) — brzydkie kaczątko i piękny łabędź ...................................... 112 Rozdział 13. Praktyczne przykłady .................................................................... 117 Księga gości ................................................................................................................. 117 Licznik (pliki) ............................................................................................................... 120 Sonda (ankieta) ............................................................................................................. 127 Tokeny, czyli test na człowieczeństwo ......................................................................... 132 CMS ............................................................................................................................. 136 Bibliografia .................................................................................. 151 Skorowidz .................................................................................... 153
  • 4. Rozdział 5. Obsługa strony Strony internetowe to nie tylko kontrolki graficzne. Zanim ASP.NET zajmie się ob- sługą kontrolek, musi zostać wysłane przez klienta żądanie, a po wszystkim powinna zostać odesłana do niego odpowiedź. Ponadto często (nawet w poprzednim rozdziale) konieczne jest uzyskanie pewnych informacji o serwerze lub samej aplikacji niemoż- liwych do odczytania z poziomu kontrolek. Większość tych informacji można pobrać za pośrednictwem klasy Page i jej właściwości. Wszystkie drogi prowadzą do strony — Page Z klasą Page mieliśmy do tej pory kontakt wielokrotny, gdyż wszystkie tworzone przez nas proste aplikacje złożone z jednej strony (formularza) były w istocie klasami wy- wiedzionymi bezpośrednio z klasy Page. Co za tym idzie, wiele elementów wykorzy- stywanych uprzednio bezpośrednio (jak właściwości Response czy Server) stanowiło właściwości klasy Page. Można powiedzieć, że klasa Page sama w sobie nie oferuje rozbudowanej funkcjonalności; głównym jej zadaniem jest zebranie w jedną całość. Właściwości tej klasy można po- dzielić na dwie nieformalne grupy — zwykłe, pomocne w określeniu działania strony, i rozbudowane, których działanie nie jest blisko związane z samą klasą Page. W pew- nym sensie klasa Page stanowi jedynie zbiór odwołań do kluczowych obiektów, dzięki czemu nie trzeba ich szukać w innych miejscach. Oczywiście wszystkie te obiekty nie biorą się znikąd — instancje znajdujące się we właściwościach danej strony są po- wiązane właśnie z nią. Do „dużych” właściwości, które będą tematem osobnych pod- rozdziałów i rozdziałów, zaliczają się: HttpApplicationState Application — określa obiekt klasy, której zadaniem jest wymiana informacji między różnymi żądaniami i stronami, czyli zarządzanie stanem aplikacji. HttpRequest Request — zwraca obiekt aktualnie obsługiwanego żądania.
  • 5. 50 ASP.NET 3.5 dla programistów PHP HttpResponse Response — określa obiekt aktualnie generowanej odpowiedzi na żądanie. HttpServerUtility Server — określa obiekt pomocny przy obsługiwaniu żądań, udostępniając pewne mechanizmy serwera — w przeciwieństwie do właściwości Request, której zadaniem nie jest interakcja ze środowiskiem serwera. HttpSessionState Session — określa obiekt sesji, w którym można przechowywać wartości między kolejnymi żądaniami HTTP. IPrincipal User — określa dane użytkownika, który wysłał żądanie (przydatne zwłaszcza po wprowadzeniu do aplikacji mechanizmu autentyfikacji — uwierzytelnienia). Jak widać, klasa Page gromadzi niemal wszystkie istotne elementy przydatne w trak- cie projektowania aplikacji WWW. Oczywiście można wykorzystywać również inne właściwości; z niektórymi już mieliśmy kontakt (np. IsPostBack), niektóre poznamy przy okazji konkretnych rozwiązań zamieszczonych w dalszej części książki. Z pewnością w tym miejscu warto zapoznać się z modelem zdarzeń klasy Page. Opiera się on rzecz jasna na modelu zdarzeń klasy Control. Wytłuszczonym drukiem zostały zaznaczone zdarzenia wprowadzone dopiero w klasie Page: PreInit — na najwcześniejszym możliwym etapie ładowania strony można określić, czy strona jest ładowana w wyniku żądania zwrotnego (postback). Należy jednak pamiętać, że kontrolki nie są jeszcze w pełni załadowane. Z tego względu ustawianie ich wartości na tym etapie nie gwarantuje ich zachowania później. Init — w tym momencie kontrolki są zainicjalizowane (strona może wywołać zdarzenie dopiero wtedy, gdy wszystkie kontrolki zgłosiły to zdarzenie). Można więc dowolnie korzystać z ich właściwości. InitComplete — zgłaszane, gdy cały proces inicjalizacji (włącznie ze stroną) został zakończony. Jeśli jakaś czynność wymaga do działania zakończenia inicjalizacji, powinna znaleźć się w tej metodzie zdarzenia. PreLoad — podczas tego zdarzenia jest ładowany stan widoku strony i kontrolek oraz dane przesłane w żądaniu zwrotnym. Load — ładuje stronę, a następnie rekursywnie wszystkie kontrolki na stronie. W tym momencie można utworzyć połączenia z bazą danych. Po zdarzeniu Load następują inne zdarzenia kontrolek, takie jak kliknięcie przycisku. LoadComplete — podobnie jak InitComplete, to zdarzenie zachodzi po zakończeniu ładowania wszystkich kontrolek. PreRender — zachodzi tuż przed renderowaniem, czyli generowaniem kodu HTML na podstawie kontrolek ASP.NET. Przed zajściem tego zdarzenia kontrolki są wiązane ze źródłami danych, więc to jest najlepszy moment na wykonanie ewentualnych zmian związanych z danymi w takich kontrolkach. Bezpośrednio po tym zdarzeniu zachodzi renderowanie, po którym nie można zmodyfikować już w żaden sposób kontrolek.
  • 6. Rozdział 5. ♦ Obsługa strony 51 Unload — ma miejsce po zajściu zdarzenia dla wszystkich innych kontrolek. Można wtedy zwolnić zasoby przydzielone w ramach całej strony. Wszystkie te zdarzenia są częścią większego procesu, jakim jest realizacja żądania HTTP. Można powiedzieć, że proces ten składa się z trzech części: 1. Wysłanie żądania do serwera. 2. Analiza treści żądania i przetworzenie go (ten etap jest pomijany, w przypadku gdy wysyłane są statyczne strony HTML i nie są używane żadne technologie server-side) — powstanie odpowiedzi na podstawie plików znajdujących się na serwerze i danych zawartych w żądaniu. 3. Odesłanie odpowiedzi do klienta. W przeciwieństwie do innych protokołów sieciowych, takich jak FTP, protokół HTTP jest protokołem bezstanowych. Oznacza to, że każde nowe żądanie wysłane przez klienta nie ma związku z poprzednim. Gdyby nie zastosowanie mechanizmów, takich jak sesje czy ciasteczka (ang. cookies), praktycznie nie byłoby możliwe korzystanie np. z poczty elektronicznej za pośrednictwem przeglądarki — wysyłając każde żądanie, trzeba byłoby za każdym razem podawać login i hasło — protokół sam w sobie nie umożliwia zapamiętania takich danych. Etap nr 1 stanowi zadanie przeglądarki. Na podstawie decyzji podejmowanych przez użytkownika (wpisanie adresu URL, kliknięcie odnośnika, wysłanie formularza) ge- nerowane są odpowiednie żądania (ang. request) HTTP, które następnie są wysyłane do odpowiedniego serwera. Nasz kontakt z tym etapem sprowadza się do możliwości pobrania informacji na temat żądania — zajmuje się tym klasa HttpRequest, która za pośrednictwem właściwości Request jest obecna w klasie Page. Etap nr 2 stanowi meritum niniejszej publikacji. Niezależnie od użytej technologii se- rver-side schemat działania jest zawsze taki sam — serwer WWW sprawdza typ pliku (na podstawie rozszerzenia lub typu MIME), jaki jest zawarty w żądaniu. Na tej pod- stawie może po prostu odesłać zawartość pliku do klienta (jeśli jest to zwykły plik danych) lub poddać treść pliku działaniu którejś z dostępnych technologii server-side. Oczywiście w takiej sytuacji do modułu server-side musi przekazać także szereg innych danych — informacje przesłane przez klienta (np. z formularzy albo adresu URL), dane żądania, ciasteczka, etc. Gdy to wszystko zostanie razem połączone i przetworzone przez moduł server-side, w wyniku renderowania (używając terminologii ASP.NET, choć termin ten pasuje również do innych technologii server-side) powstaje końcowy dokument HTML. Etap nr 3 polega na przesłaniu danych od serwera do klienta. W przypadku pominię- cia etapu 2. przesyłane dane pochodzą po prostu z wczytanego pliku znajdującego się na dysku serwera. Gdy klient odbierze cały plik, połączenie jest zamykane, a operacja wykonana przez klienta i serwer przechodzi do historii. Co ważne, z poziomu ASP.NET możemy mieć wpływ również i na ten etap (np. przez ustawienie kodowania przesy- łanego tekstu) za pośrednictwem właściwości Response klasy Page (analogicznie jak w etapie 1.). Ponieważ drugi etap omawiamy w zasadzie w znamienitej większości tej książki, przyjrzymy się teraz pozostałym etapom procesu.
  • 7. 52 ASP.NET 3.5 dla programistów PHP Request — tak wszystko się zaczyna… Główną zaletą tej właściwości klasy Page jest możliwość odczytania wielu przydat- nych informacji zawartych w żądaniu. Chociaż samo żądanie jest jedynie łańcuchem zna- ków (może, co prawda, zawierać pliki w przypadku użycia kontrolki FileUpload, ale nie wpływa to na samą formę), zawarta w nim ilość informacji z pewnością zadziwi każdego, kto nie zna dokładnej struktury żądania. Przeglądarka przesyła wraz z adresem URL więcej informacji, niż można by się spodziewać. Zacznijmy jednak od tego, co najprostsze, czyli właśnie adresu URL. Wbrew pozorom nie jest on reprezentowany tylko przez jedną właściwość. Dostajemy aż trzy właści- wości, które umożliwiają nam dostęp do wybranych elementów całego adresu: string Url — określa pełny adres URL żądania (zawierający adres serwera, ścieżkę do pliku oraz parametry dodatkowe). string RawUrl — określa adres URL bez nazwy serwera, czyli np. /katalog/plik.aspx?parametr=wartosc. NameValueCollection QueryString — określa kolekcję parametrów przekazanych w żądaniu (po znaku zapytania). Na uwagę zasługuje zwłaszcza ostatnia właściwość. Łańcuch zapytania pozwala na prze- kazywanie parametrów do strony WWW przez adres URL. W innych technologiach server-side jest to jeden z dwóch głównych sposobów na przekazywanie informacji między kolejnymi żądaniami. W przypadku ASP.NET przekazywanie danych odbywa się bez ingerencji programisty — po wysłaniu żądania wystarczy po prostu odczytać wybrane wartości tak, jak zostało to opisane w rozdziale 4. Mimo to istnieje możliwość wykorzystania mechanizmów podstawowych, takich jak opisane wyżej przekazywanie parametrów przez adres URL, nazywane metodą GET, i przesyłanie danych przez formularz, jednak bez jawnej reprezentacji w ramach adresu, a jedynie w obrębie żądania, czyli metoda POST. Każda z tych metod ma swoje wady i zalety. Metoda GET umożliwia przechowanie danych w jednym łańcuchu znaków, ów dodatku widocznym w pasku przeglądarki. Z drugiej strony, istnieje ograniczenie długości przesyłanych danych (z reguły do kilku kilobajtów). Tych ograniczeń nie posiada metoda POST. Należy jednak pamiętać, że o ile żądanie GET można swobodnie przechowywać i przetwarzać (np. przesyłać pocztą elektro- niczną, umieszczać jako odnośniki na innych stronach WWW, etc.), to żądanie POST nie daje tej możliwości — raz wygenerowane żądanie przesłane do serwera nie może być wyświetlone w podobny sposób. Co za tym idzie, proste parametry są z reguły przesyłane za pośrednictwem metody GET, a bardziej skomplikowane — metodą POST. Chociaż dane w ASP.NET są niejawnie (tj. w sposób, który programista nie ingeruje) przekazywane za pomocą widoku stanu, można korzystać również z metody GET. Wy- starczy odpowiednio sformułować np. adresy zawarte w odnośnikach (kontrolka HyperLink): Strona.aspx?parametr1=wartosc1&parametr2=innawartosc
  • 8. Rozdział 5. ♦ Obsługa strony 53 W ten sposób mimo normalnego działania, zgodnego z ASP.NET, można odczytać warto- ści żądania GET. Wystarczy skorzystać z opisanej powyżej właściwości QueryString. Jest to typowa kolekcja-słownik, w której do żądanych elementów-wartości uzyskuje się dostęp przez podanie klucza-nazwy. Jeśli dla powyższego adresu chcemy pobrać wartość pierwszego parametru, wystarczy wywołać instrukcję: string s = Request.QueryString["parametr1"]; Drugą grupą właściwości, niejako spokrewnionych z adresem URL, są fizyczne ścieżki dostępu, czyli ścieżki określające położenie katalogu strony bądź samej strony na dysku serwera. string PhysicalApplicationPath — określa ścieżkę do katalogu na dysku serwera, w którym znajduje się dana strona. string PhysicalPath — określa ścieżkę do danej strony na dysku serwera. Można używać też właściwości bez słowa Physical w nazwie, które określają ścieżkę wirtualną, np. /WebSite (ApplicationPath) lub /WebSite1/Strona.aspx (Path). Taki ze- staw właściwości (łącznie siedem) pozwala na swobodne korzystanie z wszelkiego rodzaju ścieżek. Istotnym elementem każdego żądania HTTP są nagłówki. Są one reprezentowane przez właściwość NameValueCollection Headers. Jak widać, jest to kolejny słownik-kolekcja. Odpowiada to faktycznej strukturze nagłówków. Przykładowy nagłówek ma następującą postać: Content-type: text/html Przed dwukropkiem znajduje się klucz, a za dwukropkiem — wartość. Oczywiście zawartość nagłówków zależy od przeglądarki i konkretnego żądania — mogą one ulegać zmianie. Ciasteczka Inną istotną kolekcją są ciasteczka — specjalne pliki tekstowe o niedużym rozmiarze, zapisywane na komputerze użytkownika. Dzięki nim można zapisać informacje doty- czące na przykład danych logowania do poczty elektronicznej. Nie trzeba wtedy wpro- wadzać ich za każdym razem. Ciasteczka, w odróżnieniu od wykorzystywanego już typu NameValueCollection, mają nieco bardziej skomplikowaną strukturę, są więc re- prezentowane za pomocą właściwości HttpCookieCollection. Klasa ciasteczek (jak można się domyślić — HttpCookie) składa się z kilku ważnych właściwości, które charakteryzują każde ciasteczko. Oto najważniejsze: string Name — określa nazwę ciasteczka. string Value — określa wartość ciasteczka. DateTime Expires — określa datę wygaśnięcia ciasteczka.
  • 9. 54 ASP.NET 3.5 dla programistów PHP bool HasKeys — określa, czy wartość ciasteczka jest pojedyncza, czy stanowi kolekcję. NameValueCollection Values — określa kolekcję wartości w przypadku, gdy stwierdzono jej istnienie. Dwie pierwsze właściwości muszą być wypełnione, inaczej istnienie ciasteczka nie ma sensu. Pominięcie właściwości Expires skutkuje usunięciem ciasteczka z komputera użytkownika po zakończeniu sesji na danej stronie, czyli najczęściej po zamknięciu przeglądarki. Reszta parametrów jest opcjonalna i z reguły nie wymaga stosowania. Oczywiście można również tworzyć ciasteczka. Jak większość podobnych, ale odwrot- nych procesów (np. czytanie żądania HTTP — tworzenie odpowiedzi) tak i ten należy do odpowiedzi, czyli klasy HttpResponse. Niewinne szpiegowanie Żądania HTTP zawierają sporo informacji na temat użytkownika, a konkretnie jego prze- glądarki czy komputera. W tym celu można wykorzystać właściwości zaczynające się w większości od słów User: string UserAgent — określa nazwę i informacje o przeglądarce. string UserHostAddress — określa adres IP komputera, z którego zostało nawiązane połączenie. string[] UserLanguages — określa preferowane języki użytkownika (ustawione w przeglądarce; nie wszystkie mają taką możliwość). bool IsAuthenticated — określa, czy użytkownik jest zalogowany (o ile mechanizm ten został zaimplementowany). bool IsLocal — określa, czy żądanie pochodzi z lokalnego komputera (tego samego, na którym działa serwer) — właściwość przydatna zwłaszcza do celów testowych, umożliwiająca rozgraniczenie testów, dokonywanych często z lokalnego komputera, i innych żądań. bool IsSecure — określa, czy nawiązywane połączenie jest bezpieczne (z użyciem protokołu SSL). Na tym kończymy omawianie klasy HttpRequest; kilka ciekawych właściwości i metod, oprócz już poznanych, zostanie wykorzystanych przy okazji konkretnych przykładów. Response — …a tak się kończy W tej klasie odnajdziemy wiele podobieństw łączących ją z klasą HttpRequest. Przede wszystkim niektóre procesy, działające niejako „w jedną stronę” w klasie HttpRequest, zostaną odwrócone w klasie HttpResponse. Na przykład, wspomniane ciasteczka mogły
  • 10. Rozdział 5. ♦ Obsługa strony 55 być odczytywane za pośrednictwem klasy HttpRequest; teraz interesować nas będzie tworzenie ciasteczek i dodawanie ich do odpowiedzi — klasy HttpResponse. Ogólnie rzecz ujmując, w zdecydowanej większości przypadków, jeśli trzeba samemu zająć się właściwością Response klasy Page, polega to na dodawaniu/tworzeniu róż- nych obiektów. Zaczniemy przewrotnie od faktu pozwalającego na zlekceważenie aktualnie przetwa- rzanej strony. Dysponując właściwością Response, możemy pozbyć się treści HTML generowanej przez ASP.NET, a następnie wysłać do strumienia dowolną zawartość w bajtach. Zasada działania opiera się na kilku prostych elementach klasy HttpResponse: string ContentType — określa typ MIME odpowiedzi. W przeciwieństwie do klasy Request, gdzie właściwość ta pełniła rolę jedynie informacyjną, dzięki niej możemy określić typ odpowiedzi, np. na obrazek. void Clear() — czyści zawartość bufora z danych. Dzięki temu można pozbyć się danych, które już znalazły się w strumieniu odpowiedzi. bool BufferOutput — określa, czy odpowiedź zostanie wysłana dopiero po całkowitym przetworzeniu strony. Stream OutputStream — określa strumień, z którego dane zostaną wysłane do klienta. Ponadto klasa Response definiuje właściwości Cookies i Headers, które zostały opisane przy okazji klasy Request. Tym razem można do nich dodawać własne ciasteczka bądź nagłówki — wszystko dla lepszej kontroli wysyłanych do użytkownika danych. Wy- starczy wykorzystać do tego celu metodę Add(), która przyjmuje odpowiednio obiekty klas HttpCookie i parę danych: klucz-wartość. Z ciekawszych elementów tej klasy należy wymienić na pewno dwie metody, które są często wykorzystywane w praktyce. Są to: void Redirect(string url) — przerywa wykonywanie strony i przekierowuje klienta pod podany adres. Uwaga! Należy podawać absolutne adresy URL wraz z protokołem (np. http://www.helion.pl), gdyż w przeciwnym razie serwer potraktuje adres URL jako relatywny. void TransmitFile(string sciezka) — przekazuje plik o podanym adresie (należy podawać relatywny URL) do klienta, pomijając w odpowiedzi żądaną stronę. Zwłaszcza pierwsza z metod jest stosowana w wielu sytuacjach; najczęstszym przy- kładem jest przekierowanie przy logowaniu/wylogowaniu, o ile nie skorzystano z do- myślnych mechanizmów. Poniżej znajduje się przykładowy kod, który umożliwia skie- rowanie do klienta obrazka, wyświetlając przekazany w polu tekstowym tekst: Default.aspx <asp:Label ID="Label1" runat="server" Text="Podaj tekst do wyswietlenia:" ></asp:Label><br /> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="OK" />
  • 11. 56 ASP.NET 3.5 dla programistów PHP Default.aspx.cs protected void Page_Load(object sender, EventArgs e) { if (IsPostBack) { System.Drawing.Image img = System.Drawing.Image. FromFile(Server.MapPath("Puch.jpg")); System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(img); g.DrawString(TextBox1.Text, new System.Drawing.Font("Arial",20.0F), System.Drawing.Brushes.White, new System.Drawing.PointF(10, 10)); Response.ContentType = "image/bmp"; Response.Clear(); img.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg); g.Dispose(); img.Dispose(); } } Po kliknięciu przycisku (może być ono zastąpione utratą fokusa w połączeniu z wła- ściwością AutoPostBack) dochodzi do otwarcia i edycji obrazka. Wyświetlamy na nim tekst wysłany przez użytkownika. Następnie wykorzystujemy poznane wcześniej wła- ściwości i metody, aby przygotować strumień i zapisać do niego zawartość obrazka. Oczywiście powyższe rozwiązanie mogłoby zostać pominięte, gdyby chodziło jedynie o wyświetlenie obrazka — wystarczyłoby użyć poznanej metody TransmitFile(). Takie rozwiązanie jest jednak bardziej uniwersalne, pozwala na modyfikację danych, a nawet pobieranie ich z innych źródeł — wszystko, co można przekazać przez strumień, może być wykorzystane. Nie tylko dla studentów — potyczki z sesjami Sesja jest jednym z podstawowych pojęć, które spędza sen z powiek nie tylko studen- tom, ale i programistom aplikacji sieciowych. Uwzględniając to, że protokół HTTP nie umożliwia zachowania stanu (tak jak np. FTP), technologie server-side muszą umoż- liwiać przechowywanie danych pomiędzy poszczególnymi żądaniami. Jedną z metod są ciasteczka, ale użytkownik może wyłączyć ich obsługę w przeglądarce. Z tego względu powszechnie wykorzystywanym mechanizmem są sesje. Sesja, w technologiach server-side najczęściej reprezentowana jako kolekcja-słownik, umożliwia zapis i odczyt wartości niczym zwykła kolekcja. Dzięki specjalnym mecha- nizmom słownik ów ma taki sam stan; przechowuje te same wartości pomiędzy róż- nymi żądaniami. Typowymi zastosowaniami sesji są przechowywanie obiektów kluczo- wych dla obsługi użytkownika, takich jak koszyk z zakupami w sklepie internetowym, dane logowania lub ostatnie operacje wykonane przez użytkownika. Niektóre z infor- macji, które w innych technologiach programista musi zapisywać w sesji sam, są au- tomatycznie przechowywane przez ASP.NET.
  • 12. Rozdział 5. ♦ Obsługa strony 57 Klasa HttpSessionState, udostępniająca funkcjonalność sesji, jest najzwyklejszą kolekcją. Z tego względu zapis i odczyt danych w kolekcji przebiega znacznie prościej niż w PHP. Wystarczy po prostu zapisać dane w kolekcji. Prosty i krótki przykład prezentuje dwie pułapki, na jakie muszą uważać programiści korzystający z mechanizmu sesji: Default.aspx <asp:Label ID="Label1" runat="server" Text="Podaj login:"></asp:Label><br /> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Rejestruj" /> <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="Default.aspx"> Przeładuj stronę od nowa</asp:HyperLink> Default.aspx.cs protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack && Session["login"] != null) TextBox1.Text = Session["login"].ToString(); } protected void Button1_Click(object sender, EventArgs e) { Session["login"] = TextBox1.Text; } Zadanie strony jest proste — jest to zwykła symulacja zapamiętania wartości pola tekstowego w sesji i odtwarzania go w razie potrzeby. Zapis do właściwości (przy- pominam — Session jest właściwością klasy Page, więc możemy się do niej odwoły- wać bez dodatkowych zapisów). Interesujący jest również odczyt. Na pewno musimy sprawdzić, czy wartość loginu istnieje w sesji. Ciekawsze jest jednak sprawdzanie po- stbacku — to warunek konieczny wynikający z kolejności wywoływania zdarzeń. Gdy- byśmy pominęli tę część warunku, przypisanie wartości z sesji do pola tekstowego odbywałoby się za każdym razem po pierwszym określeniu loginu. Ze względu na kolejność wywoływania zdarzeń (Page.Load zachodzi przed innymi zdarzeniami kontrolek potomnych) każda kolejna próba zmiany wartości w sesji (metoda Button1_Click) nie mogłaby się powieść. Nowa wartość pola tekstowego byłaby zastępowana starą war- tością z sesji. Dzięki dodatkowemu warunkowi wartość z sesji pobieramy tylko wtedy, gdy nie podjęto próby przypisania nowej wartości. Oczywiście przy większej liczbie kontrolek, które również mogłyby wygenerować postback, należałoby po prostu do- konać przypisania po ewentualnym wywołaniu metody Button1_Click. Drugi haczyk tkwi w kontrolce, która pojawiła się po raz pierwszy — HyperLink. Zo- stała ona przedstawiona w prostym celu — aby zademonstrować, że sesja działa rze- czywiście. Można powiedzieć, że przycisk również powoduje przeładowanie strony. Problem w tym, że działają wtedy również mechanizmy widoku stanu i wartość pola tekstowego zostałaby zapamiętana bez względu na wykorzystanie sesji. Jeśli jednak prze- ładujemy stronę całkowicie, przy zakomentowanej treści metody Page_Load, wartość pola tekstowego nie zostanie zapamiętana. Pozostałe istotne klasy, które znalazły swoje odzwierciedlenie w klasie Page, zostaną omówione w praktyce, w drugiej części książki. Teraz możemy zająć się tym, co ty- grysy webowe lubią najbardziej — obsługą danych.