Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00728 010517 11034277 na godz. na dobę w sumie
ASP.NET. Programowanie - książka
ASP.NET. Programowanie - książka
Autor: , Liczba stron: 920
Wydawca: Helion Język publikacji: polski
ISBN: 83-246-0361-1 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> webmasterstwo >> asp
Porównaj ceny (książka, ebook, audiobook).

ASP.NET to jedna z najpopularniejszych obecnie technologii tworzenia dynamicznych witryn WWW i aplikacji internetowych. Autor tej technologii -- Microsoft -- udostępnił twórcom doskonałe narzędzia programistyczne oraz bogaty zbiór bibliotek i kontrolek. Dzięki możliwościom pakietu Visual Studio 2005 i platformy programistycznej .NET 2.0 przygotowanie nawet najbardziej rozbudowanej aplikacji sieciowej przebiega błyskawicznie. Natomiast za pomocą gotowych elementów można zbudować formularze, zrealizować połączenia z bazą danych i zabezpieczyć aplikację przed nieautoryzowanym dostępem tak łatwo, że programista może skupić się wyłącznie na projektowaniu i tworzeniu logiki aplikacji.

Książka 'ASP.NET. Programowanie' to podręcznik opisujący zasady tworzenia aplikacji i witryn internetowych przy użyciu języka C# 2.0, środowiska programistycznego Visual Studio 2005 i bibliotek .NET 2.0. Przedstawia środowisko Visual Studio 2005 i szczegółowo omawia koncepcję budowania aplikacji za pomocą kontrolek. Po przeczytaniu tej książki stworzysz witryny internetowe w technologii ASP.NET 2.0, implementując w nich mechanizmy uwierzytelniania i personalizacji, dostępu do baz danych oraz usług sieciowych. Dowiesz się, jak budować własne usługi sieciowe i z nich korzystać, a także jak optymalizować wydajność aplikacji i wdrażać je, posługując się mechanizmami udostępnianymi przez platformę .NET 2.0.

Stwórz wydajne i bezpieczne witryny internetowe,
korzystając z ASP.NET 2.0

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

IDZ DO IDZ DO PRZYK£ADOWY ROZDZIA£ PRZYK£ADOWY ROZDZIA£ SPIS TREœCI SPIS TREœCI KATALOG KSI¥¯EK KATALOG KSI¥¯EK KATALOG ONLINE KATALOG ONLINE ZAMÓW DRUKOWANY KATALOG ZAMÓW DRUKOWANY KATALOG TWÓJ KOSZYK TWÓJ KOSZYK DODAJ DO KOSZYKA DODAJ DO KOSZYKA CENNIK I INFORMACJE CENNIK I INFORMACJE ZAMÓW INFORMACJE ZAMÓW INFORMACJE O NOWOœCIACH O NOWOœCIACH ZAMÓW CENNIK ZAMÓW CENNIK CZYTELNIA CZYTELNIA FRAGMENTY KSI¥¯EK ONLINE FRAGMENTY KSI¥¯EK ONLINE Wydawnictwo Helion ul. Koœciuszki 1c 44-100 Gliwice tel. 032 230 98 63 e-mail: helion@helion.pl ASP.NET. Programowanie Autorzy: Jesse Liberty, Dan Hurwitz ISBN: 83-246-0361-1 Tytu³ orygina³u: Programming ASP.NET Format: B5, stron: 920 ASP.NET to jedna z najpopularniejszych obecnie technologii tworzenia dynamicznych witryn WWW i aplikacji internetowych. Autor tej technologii — Microsoft — udostêpni³ twórcom doskona³e narzêdzia programistyczne oraz bogaty zbiór bibliotek i kontrolek. Dziêki mo¿liwoœciom pakietu Visual Studio 2005 i platformy programistycznej .NET 2.0 przygotowanie nawet najbardziej rozbudowanej aplikacji sieciowej przebiega b³yskawicznie. Natomiast za pomoc¹ gotowych elementów mo¿na zbudowaæ formularze, zrealizowaæ po³¹czenia z baz¹ danych i zabezpieczyæ aplikacjê przed nieautoryzowanym dostêpem tak ³atwo, ¿e programista mo¿e skupiæ siê wy³¹cznie na projektowaniu i tworzeniu logiki aplikacji. Ksi¹¿ka „ASP.NET. Programowanie” to podrêcznik opisuj¹cy zasady tworzenia aplikacji i witryn internetowych przy u¿yciu jêzyka C# 2.0, œrodowiska programistycznego Visual Studio 2005 i bibliotek .NET 2.0. Przedstawia œrodowisko Visual Studio 2005 i szczegó³owo omawia koncepcjê budowania aplikacji za pomoc¹ kontrolek. Po przeczytaniu tej ksi¹¿ki stworzysz witryny internetowe w technologii ASP.NET 2.0, implementuj¹c w nich mechanizmy uwierzytelniania i personalizacji, dostêpu do baz danych oraz us³ug sieciowych. Dowiesz siê, jak budowaæ w³asne us³ugi sieciowe i z nich korzystaæ, a tak¿e jak optymalizowaæ wydajnoœæ aplikacji i wdra¿aæ je, pos³uguj¹c siê mechanizmami udostêpnianymi przez platformê .NET 2.0. (cid:129) Interfejs u¿ytkownika œrodowiska Visual Studio 2005 (cid:129) Obs³uga zdarzeñ za pomoc¹ kontrolek (cid:129) Przegl¹d kontrolek platformy .NET 2.0 (cid:129) Tworzenie szkieletu witryny internetowej (cid:129) Wyszukiwanie b³êdów w kodzie, ich usuwanie i obs³uga (cid:129) Weryfikacja danych z formularzy (cid:129) Dostêp do baz danych za pomoc¹ ADO.NET (cid:129) Uwierzytelnianie u¿ytkowników i personalizacja witryny (cid:129) Mechanizmy nawigacyjne (cid:129) Tworzenie i wykorzystywanie us³ug sieciowych (cid:129) Wdra¿anie aplikacji Stwórz wydajne i bezpieczne witryny internetowe, korzystaj¹c z ASP.NET 2.0 Wstęp ........................................................................................................................................15 Platforma .NET 2.0 ASP.NET 2.0 Nowe funkcje 1. ASP.NET 2.0 ....................................................................................................................21 22 24 25 25 26 26 26 26 26 26 27 27 28 29 Katalogi specjalne ułatwiają integrację Bezpieczeństwo Personalizacja Strony wzorcowe Nawigacja Witryny internetowe bez serwera IIS Ulepszone kontrolki Nowe kontrolki Visual Studio 2005 (VS2005) Urządzenia przenośne Visual Studio 2005 Strona początkowa Projekty i rozwiązania File System HTTP FTP Utworzenie pierwszej strony internetowej 2. Visual Studio 2005 .........................................................................................................31 32 34 35 35 36 38 39 40 41 42 Rozwiązania Projekty i pliki Szablony Nazwy projektów 5 Zintegrowane środowisko programistyczne (IDE) Układ Budowanie i uruchamianie aplikacji Menu i paski narzędziowe Menu File Menu Edit Menu View Menu Refactor Menu Website Menu Project Menu Build Menu Debug Menu Data Menu Format Menu Tools Menu Window Menu Help 43 43 47 47 48 50 59 68 70 72 73 74 74 74 75 79 80 Zdarzenia Zdarzenia ASP.NET Argumenty zdarzenia Zdarzenia aplikacji i sesji Zdarzenia strony i kontrolki Zdarzenia typu Postback a zdarzenia typu Non-Postback Właściwość IsPostBack Zdarzenia w Visual Studio 2005 Wiele kontrolek i jedna obsługa zdarzeń 3. Kontrolki — podstawowe założenia .......................................................................... 81 83 84 85 85 86 86 86 87 90 90 98 99 103 104 108 Kontrolki serwerowe HTML Przetwarzanie po stronie klienta Kontrolki serwerowe ASP.NET ASP.NET a przeglądarki internetowe Hierarchia klas kontrolek serwerowych ASP.NET Style CSS 4. Kontrolki podstawowe ................................................................................................113 113 119 119 122 126 130 Podstawy Kontrolka Label Kontrolka TextBox Kontrolka HiddenField Kontrolki Button Kontrolka HyperLink 6 | Spis treści Zaznaczanie wartości Kontrolka CheckBox Kontrolka RadioButton Zaznaczanie z listy Obiekt ListItem Kontrolka CheckBoxList Kontrolka RadioButtonList Kontrolka DropDownList Kontrolka ListBox Kontrolka BulletedList Tabele Wiersze tabeli Komórki tabeli Szerokość komórki Kontrolka Panel Elementy graficzne Kontrolka Image Kontrolka ImageMap 132 132 134 137 138 139 150 153 155 159 165 172 173 176 177 185 185 188 Kontrolki MultiView i View Kontrolka Wizard Kontrolka FileUpload Kontrolka AdRotator 5. Kontrolki zaawansowane .......................................................................................... 195 195 203 217 222 223 225 227 230 232 234 Zaznaczanie dat w kontrolce Calendar Sterowanie wyglądem kontrolki Calendar Programowanie kontrolki Calendar Plik Advertisement Używanie kontrolki AdRotator Kontrolka Calendar Klasa Page Plik ukrytego kodu Przejście na inną stronę 6. Podstawy witryny internetowej ................................................................................ 251 251 252 257 257 257 258 259 270 271 279 Kontrolka HyperLink Metoda Server.Transfer Metoda Response.Redirect Mechanizm Cross-Page Posting Stan sesji Stan widoku Stan Spis treści | 7 Zbiór stanu Stan aplikacji Cykl życiowy Dyrektywy Dyrektywa Application Dyrektywa Assembly Dyrektywa Control Dyrektywa Implements Dyrektywa Import Dyrektywa Master Dyrektywa MasterType Dyrektywa OutputCache Dyrektywa Page Dyrektywa Reference Dyrektywa Register 281 283 289 292 292 293 293 294 294 295 295 295 295 297 297 Tworzenie przykładowej aplikacji Śledzenie Śledzenie na poziomie strony Umieszczanie danych w dzienniku śledzenia Śledzenie na poziomie aplikacji Przeglądarka zdarzeń Trace Wykrywanie i usuwanie błędów 7. Śledzenie, usuwanie i obsługa błędów .....................................................................299 300 301 302 302 307 308 310 310 311 317 318 318 323 324 325 328 Pasek narzędziowy Debug Punkty kontrolne Przejście krok po kroku przez kod Analiza zmiennych i obiektów Okna procesu usuwania błędów Obsługa błędów Nieobsłużone błędy Strony błędów o zasięgu aplikacji Strony błędu określonej strony Kontrolka RequiredFieldValidator Kontrolka Summary Kontrolka CompareValidator 8. Sprawdzanie poprawności ........................................................................................329 332 337 340 342 342 Sprawdzanie typu danych wejściowych Porównywanie z inną kontrolką 8 | Spis treści Sprawdzanie zakresu Wyrażenia regularne Kontrolka CustomValidator Sprawdzanie poprawności grup 344 344 346 348 Polecenia Insert, Update i Delete Kontrolka DataList Uaktualnienia przeprowadzane przez wielu użytkowników Pobieranie danych z bazy danych Kontrolki źródeł danych Kontrolka GridView Optymistyczna współbieżność Wyświetlanie i uaktualnianie siatki Bierzemy aplikację w obroty Śledzenie uaktualnień za pomocą zdarzeń Modyfikacja siatki na podstawie zdarzeń Przekazywanie parametrów do zapytania Select 9. Dostęp do danych ....................................................................................................... 351 351 355 355 362 365 366 369 370 371 373 374 378 383 386 389 390 395 402 405 405 Kontrolka Repeater Kontrolka DetailsView — analiza jednego rekordu w danym momencie Kontrolka FormView — analiza pojedynczego rekordu jako Master/Detail Edycja za pomocą kontrolki FormView Wstawianie nowych rekordów Zdarzenia kontrolek DetailsView i FormView Edycja elementów w kontrolkach ListControl Usuwanie elementów z kontrolki ListControl Model obiektowy ADO.NET Klasa DataSet Obiekty DbCommand i DbConnection Obiekt DataAdapter Obiekt DataReader 10. ADO.NET ......................................................................................................................409 409 410 414 414 415 415 417 420 429 429 432 442 Zastosowanie obiektu DataReader Tworzenie związków między danymi wewnątrz obiektów DataSet Projekt bazy danych bug Ręczne tworzenie obiektu DataTable Tworzenie kluczy podstawowych Ręczne tworzenie obiektów danych Rozpoczynamy pracę z ADO.NET Spis treści | 9 Tworzenie kluczy zewnętrznych Tworzenie związków między danymi Procedury składowane Tworzenie prostej procedury składowanej Parametryzowane procedury składowane Uaktualnianie za pomocą SQL i ADO.NET Uaktualnianie danych za pomocą transakcji Test ACID Implementacja transakcji Łączenie z obiektami Business 443 444 445 445 447 449 454 454 455 469 Uwierzytelnianie Dostęp anonimowego użytkownika Uwierzytelnianie Windows Uwierzytelnienie Microsoft Passport Uwierzytelnienie na bazie formularzy 11. Bezpieczeństwo na bazie formularzy ....................................................................... 477 478 480 482 486 487 488 488 495 497 510 510 Użycie narzędzia Web Administrator Tool do ustawienia ról Ograniczenie dostępu do stron na podstawie ról Tworzenie aplikacji Dodawanie przypomnienia hasła Szczegółowy opis uwierzytelniania na bazie formularzy Dodawanie ról do kont ASP.NET Nawigacja Strony wzorcowe Dodanie stron z treścią Użycie zagnieżdżonych stron wzorcowych Dynamiczna edycja strony wzorcowej 12. Strony wzorcowe i nawigacja ................................................................................... 513 513 518 520 523 526 526 528 532 535 537 537 538 540 541 542 543 544 Rozpoczynamy pracę z nawigacją witryny Ustawienia stron Dostosowanie wyglądu i działania do własnych potrzeb Wypełnianie na żądanie Użycie kontrolki Menu w celach nawigacji Programowe wyliczanie węzłów mapy witryny Filtrowanie na podstawie systemu bezpieczeństwa Włączenie kont użytkowników Dodanie ról Dodanie strony logowania Tworzenie zasad dostępu Tworzenie mapy witryny na podstawie praw dostępu 10 | Spis treści Tworzenie spersonalizowanych witryn internetowych Web Parts Personalizacja za pomocą złożonych typów Personalizacja anonimowego użytkownika Tematy i skórki Odczytywanie spersonalizowanych informacji Ustawienie obsługi profili Rozpoznawanie tabel profilu 13. Personalizacja ............................................................................................................. 547 547 547 548 552 554 558 564 566 567 569 569 569 570 571 571 572 573 574 574 575 576 579 Utworzenie witryny testowej Zorganizowanie tematów i skórek witryny Włączenie tematów i skórek Określenie tematów dla witryny Ustawienie tematów arkuszy stylów Ustawienie tematów personalizacji Użycie skórek o danych nazwach Architektura Web Parts Tworzenie stref Dodanie kontrolek do stref Minimalizowanie i przywracanie Włączenie edycji oraz zmiany układu Tworzenie kontrolki użytkownika umożliwiającej zmianę układu strony Dodanie elementów z katalogu Kontrolki użytkownika Kontrolki użytkownika wraz z kodem Dyrektywa @Control Właściwości Obsługa zdarzeń 14. Kontrolki własne oraz kontrolki użytkownika .........................................................585 585 588 591 591 595 602 606 606 607 608 611 614 Właściwości Metoda Render Uaktualnienie kontrolki Utrzymywanie stanu Tworzenie kontrolek pochodnych Tworzenie kontrolek złożonych Kontrolki własne W jaki sposób działają usługi sieciowe? 15. Tworzenie usług sieciowych ......................................................................................625 626 629 629 631 Projektowanie usługi sieciowej Proxy Tworzenie konsumenta Spis treści | 11 Protokoły i standardy Tworzenie prostej usługi sieciowej Dyrektywa WebService Wywodząc się z klasy WebService Stan Application za pomocą klasy HttpContext Atrybut WebServiceBinding Atrybut WebMethod HTTP XML SOAP Web Services Enhancements (WSE) Właściwość BufferResponse Właściwość CacheDuration Właściwość Description Właściwość EnableSession Właściwość MessageName Właściwość TransactionOption 632 632 633 634 635 636 637 Model usługi włączonej do pliku, utworzony za pomocą edytora tekstowego Model usługi w pliku ukrytego kodu utworzony za pomocą Visual Studio 2005 639 642 643 643 644 645 646 646 647 647 648 652 654 654 654 655 655 656 658 660 661 666 666 667 668 668 669 Odkrycie za pomocą ciągu tekstowego zapytania Statyczny plik odkrywający Aplikacja StockTickerComplete Tworzenie dokumentów odkrywających Atrybut WebService Właściwość Description Właściwość Name Właściwość Namespace Typy danych Tablice Klasy i struktury Obiekty DataSet Wdrażanie Prekompilowane podzespoły Dynamicznie kompilowane podzespoły Odkrywanie Tworzenie klienta za pomocą VS2005 Ręczne tworzenie klienta 16. Korzystanie z usług sieciowych ..................................................................................671 672 673 678 679 681 Tworzenie zawartości strony internetowej konsumenta Tworzenie proxy 12 | Spis treści Kompilacja klasy proxy Ukończenie aplikacji konsumenta Użycie asynchronicznych wywołań metod 690 692 695 Buforowanie danych Buforowanie danych wyjściowych Buforowanie DataSourceControl Bufor zależności SQL Rodzaje buforowania Buforowanie klas Buforowanie konfiguracji Buforowanie danych Buforowanie danych wyjściowych Buforowanie obiektów 17. Buforowanie i wydajność .......................................................................................... 705 706 706 706 706 707 707 707 707 711 715 715 722 729 733 735 743 744 748 750 750 753 756 757 Buforowanie obiektów Funkcje klasy Cache Zależności Oczyszczanie Obsługa wywołań zwrotnych Kwestie charakterystyczne dla ASP.NET Ogólne kwestie .NET Kwestie związane z bazą danych Dyrektywa OutputCache Buforowanie częściowe: buforowanie fragmentu strony Klasa HttpCachePolicy Wydajność Testowanie wydajności i profilowanie Internet Information Server (IIS) Wersje IIS Katalogi wirtualne Zrozumienie aplikacji sieciowych Logika o zasięgu całej aplikacji 18. Logika aplikacji i konfiguracja ................................................................................... 759 759 759 760 764 765 766 766 781 783 784 786 Obiekt HttpApplication Plik global.asax Elementy globalne Konfiguracja aplikacji Konfiguracja hierarchiczna Format Spis treści | 13 Interfejs użytkownika ustawień konfiguracyjnych Web Site Administration Tool Inne ustawienia konfiguracyjne Własne sekcje konfiguracyjne 790 807 815 819 Podzespoły Microsoft Intermediate Language (MSIL) ILDASM Element Manifest Oznaczanie kolejnych wersji Podzespoły prywatne a współużytkowane Silne nazwy 19. Wdrożenie ................................................................................................................... 827 828 830 830 832 833 835 837 839 841 841 843 844 844 847 851 852 854 856 860 Budowa konfiguracji Dodanie projektu instalacji za pomocą kreatora Setup Ręczne dodanie projektu instalacji Dalsze dostosowanie do własnych potrzeb Wdrożenie witryny internetowej Wdrożenie lokalne Pełna kompilacja w trakcie uruchomienia Ręczna kompilacja podzespołów Wcześniejsza pełna kompilacja Kompilacja jedynie kodu Wdrożenie globalne Instalator Windows A Skróty klawiaturowe ..................................................................................................863 B Wprowadzenie do technologii relacyjnych baz danych .......................................... 867 Skorowidz ................................................................................................................... 873 14 | Spis treści ROZDZIAŁ 4. Informacje dotyczące kontrolek przedstawiliśmy już w rozdziale 3. Chociaż pokrótce wspo- mniano zarówno o serwerowych, jak i o klasycznych kontrolkach HTML, to jednak większość informacji dotyczyła kontrolek serwerowych ASP.NET, serca technologii ASP.NET. Jak już o tym wcześniej wspomnieliśmy, kontrolki serwerowe są nazywane w różny sposób: „kontrolki ASP”, „kontrolki ASP.NET”, „kontrolki serwerowe ASP.NET”, „kon- trolki sieciowe” i „kontrolki serwera sieciowego”. W tej książce używamy określenia „kontrolki serwerowe ASP.NET” lub „kontrolki serwerowe”. Kiedy odwołujemy się do „kontrolek serwerowych”, to z kontekstu powinno wynikać, czy mamy na myśli jedynie kontrolki serwerowe ASP.NET, czy również kontrolki serwerowe HTML. Zagadnienia wspólne dla wszystkich kontrolek serwerowych ASP.NET zostały już przedsta- wione i obejmowały: zdarzenia, składnię, programowy dostęp do kontrolek w trakcie działania aplikacji (za pomocą właściwości ID) oraz użycie VS2005 do budowania witryny internetowej z wykorzystaniem kontrolek, jednakże w przypadku żadnej z kontrolek nie zagłębialiśmy się w szczegóły. Ten rozdział dostarczy licznych szczegółów dotyczących wielu podstawowych kontrolek ASP.NET, między innymi: TextBox, Button, CheckBox, kontrolek RadioButton, list, tabel i grafiki. Dokonamy analizy wspólnych dla wielu kontrolek funkcji i właściwości oraz przyj- rzymy się określonym szczegółom podstawowych kontrolek serwerowych ASP.NET dostęp- nych na platformie .NET. W kolejnym rozdziale przedstawimy wiele zaawansowanych kontrolek serwerowych będą- cych częścią ASP.NET, na przykład kontrolek wyświetlania, Wizard, FileUpload, AdRotator i Calendar. W innych rozdziałach skupimy się na kontrolkach danych, kontrolkach spraw- dzania poprawności, kontrolkach logowania i bezpieczeństwa itd. Podstawy W tym podrozdziale pokażemy dwa różne sposoby tworzenia prostej witryny internetowej. W pierwszym przypadku skorzystamy z prostego edytora tekstowego (Notatnik), natomiast za drugim razem wykorzystamy VS2005. Celem tego ćwiczenia jest zaprezentowanie, w jaki sposób można utworzyć witrynę internetową za pomocą dowolnego edytora tekstowego oraz jak znacznie łatwiej użyć do tego celu pakietu VS2005. 113 Będzie to jedyny przypadek w całej książce, gdy witryna internetowa zostanie utwo- rzona bez użycia VS2005. Niezależnie od wykorzystanej techniki, końcowa strona internetowa będzie podobna do przedstawionej na rysunku 4.1. Utworzona strona będzie prezentowała pewne właściwości, zdarzenia i metody, która są wspólne dla wszystkich kontrolek serwerowych ASP.NET. Rysunek 4.1. Kontrolki serwerowe ASP.NET: Podstawy W celu utworzenia tej strony internetowej bez korzystania z zalet VS2005, otwieramy program Notatnik lub inny ulubiony edytor tekstowy, w którym można utworzyć zwykły plik tekstowy (nie jest nim na przykład Microsoft Word). W pliku umieszczamy kod przedstawiony na listingu 4.1. Listing 4.1. Plik ASPNETServerControlBasics-TextEditor.aspx @ Page Language= C# script runat= server void lblTime_Init(object sender, EventArgs e) { lblTime.Font.Name = Verdana ; lblTime.Font.Size = 20; lblTime.Font.Underline = true; lblTime.Font.Bold = true; lblTime.Font.Italic = true; lblTime.Font.Overline = true; lblTime.Font.Strikeout = true; lblTime.Text = DateTime.Now.ToString() + . Font Name: + lblTime.Font.Name; } /script html body form id= form1 runat= server h2 Podstawy /h2 asp:Label ID= lblTime runat= server OnInit= lblTime_Init / /form /body /html 114 | Rozdział 4. Kontrolki podstawowe Zapisujemy plik pod nazwą ASPNETServerControlBasics-TextEditor.aspx w dowolnym katalogu, powiedzmy, c:websites. W celu łatwego przetworzenia strony przez ASP.NET na serwerze, musimy uzyskać do niej dostęp w przeglądarce przez localhost. Tak więc, zachodzi potrzeba utworzenia katalogu wirtu- alnego dla katalogu zawierającego plik strony internetowej. localhost oznacza dla przeglądarki adres odnajdujący serwer WWW IIS na kom- puterze lokalnym. Brak zainstalowanego serwera IIS na komputerze uniemożliwi zobaczenie tej strony, uruchomionej w przeglądarce spoza VS2005. VS2005 nie wymaga instalacji IIS, ponieważ w domyślnym trybie jest w stanie sa- modzielnie zapewniać obsługę swoich stron. Istnieje możliwość wymuszenia na VS2005 korzystania z trybu IIS w celu uzyskania dostępu do stron internetowych. W tym celu, podczas tworzenia nowej witryny w oknie dialogowym New Web Site, trzeba zaznaczyć opcję HTTP z menu Location. Wówczas VS2005 automatycznie utworzy nie- zbędny katalog wirtualny. Pełny opis różnych sposobów dostępu do witryn internetowych w VS2005 został przedstawiony w rozdziale 2. Należy otworzyć Zarządzanie komputerem, klikając prawym przyciskiem myszy ikonę Mój komputer i wybierając opcję Zarządzanie komputerem. Opcjonalnie można również przejść do Panelu Sterowania/Narzędzia administracyjne/Zarządzanie komputerem. Trzeba rozwinąć węzeł Aplikacje i usługi/Internetowe usługi informacyjne i kliknąć prawym przyciskiem myszy pozycję Domyślna witryna sieci Web. Z rozwijanego menu wybieramy Nowy/Katalog wirtualny i podą- żamy za wskazówkami kreatora, używając website jako aliasu. Oczywiście, wskazujemy również położenie katalogu, w którym został umieszczony plik .aspx. Następnie, po otworzeniu przeglądarki internetowej, wpisujemy następujący adres URL: http://localhost/websites/ASPNETServerControlBasics-TextEditor.aspx Po krótkiej chwili oczekiwania, w trakcie której ASP.NET przetworzy i zwróci stronę, prze- glądarka wyświetli wygenerowany kod HTML. Teraz można utworzyć dokładnie taka samą stronę, ale za pomocą VS2005. Otwieramy więc IDE i tworzymy nową witrynę internetową o nazwie ASPNETServerControlBasic. Wprowadza- my kilka elementów nagłówkowych HTML, a następnie przeciągamy i upuszczamy na stro- nie kontrolkę Label. Ukończona strona default.aspx będzie posiadała kod podobny do przed- stawionego na listingu 4.2. Zwróćmy uwagę, jak połączenie techniki przeciągnij i upuść oraz listy IntelliSense powoduje, że proces ten jest znacznie mniej uciążliwy i bardziej odporny na powstawanie błędów. Listing 4.2. Zawartość pliku Default.aspx w projekcie ASPNETServerControlBasics @ Page Language= C# AutoEventWireup= true CodeFile= Default.aspx.cs Inherits= _Default !DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.1//EN http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd html xmlns= http://www.w3.org/1999/xhtml head runat= server title Kontrolki serwerowe ASP.NET - Podstawy /title /head Podstawy | 115 body form id= form1 runat= server div h1 Kontrolki serwerowe ASP.NET /h1 h2 Podstawy /h2 asp:Label ID= lblTime runat= server OnInit= lblTime_Init /asp:Label /div /form /body /html Instrukcje krok po kroku, w jaki sposób utworzyć tę stronę internetową za pomocą VS2005, technologii przeciągnij i upuść oraz IntelliSense znajdują się w ramce „Od ASPX do technologii przeciągnij i upuść”. Kiedy kontrolki zostaną już umieszczone na swoich miejscach, zajmiemy się utworzeniem obsługi zdarzeń dla zdarzenia Init kontrolki Label lblTime. Jeżeli nie otwarto widoku Design view, to należy teraz do niego przejść i zaznaczyć kontrolkę lblTime. W górnej części okna Properties pojawi się symbol zaznaczonej błyskawicy. Kliknięcie tej błyskawicy spowoduje wyświetlenie wszystkich zdarzeń dostępnych dla danej kon- trolki. Dwukrotnie klikamy komórkę obok zdarzenia Init. W obszarze roboczym zostanie otwarty plik ukrytego kodu default.aspx.cs, zawierający szkielet kodu w miejscu obsługi zdarzenia lblTime_ Init. Umieszczony w nawiasie kursor pozwala na wpisywanie kodu C# programisty. Wprowa- dzamy te wiersze kodu przedstawionego na listingu 4.3, które zapisano pogrubioną czcionką. Listing 4.3. Kod obsługi zdarzenia lblTime using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void lblTime_Init(object sender, EventArgs e) { lblTime.Font.Name = Verdana ; lblTime.Font.Size = 20; lblTime.Font.Underline = true; lblTime.Font.Bold = true; lblTime.Font.Italic = true; lblTime.Font.Overline = true; lblTime.Font.Strikeout = true; lblTime.Text = DateTime.Now.ToString() + . Nazwa czcionki: + lblTime.Font.Name; } } 116 | Rozdział 4. Kontrolki podstawowe Od ASPX do technologii przeciągnij i upuść W trakcie programowania z wykorzystaniem VS2005, jeśli tylko staje się to możliwe, warto używać listy IntelliSense oraz technologii przeciągnij i upuść zamiast ręcznego wpisywania kodu. Z drugiej jednak strony, uznajemy, że zamiast podawać za każdym razem żmudne in- strukcje krok po kroku, dokładnie wskazujące sposób budowania każdej witryny, znacznie efektywniej i elastyczniej dla Czytelnika, a przy tym mniej podatne na błędy będzie pokaza- nie ukończonej aplikacji w formie zrzutu ekranu i/lub strony .asapx. Praca Czytelnika nie powinna polegać na przepisywaniu całej strony .aspx, ale na odczyty- waniu przedstawionej na niej zawartości i odtworzeniu tej zawartości na swoim komputerze przy użyciu najodpowiedniejszej techniki: przeciągnij i upuść lub ręcznej edycji kodu. Zapre- zentujemy teraz, w jaki sposób można utworzyć aplikację spoglądając na rysunek 4.1 oraz odczytując listing 4.2. Pierwszym zauważalnym elementem jest nazwa witryny internetowej (pokazana w adresie URL na rysunku 4.1) ASPNETServerControlBasics. Tworzymy więc nową witrynę internetową i nadajemy jej nazwę ASPNETServerControlBasics. Następnie otwieramy stronę default.aspx tej witryny. Należy zwrócić uwagę, analizując listing 4.2, że tytuł został ustalony (wiersz w listingu: Kon- trolki serwerowe ASP.NET — podstawy). Wprowadzamy więc ten tytuł w pliku default.aspx, dokonując bezpośredniej edycji pliku. Następnie zwracamy uwagę na dwa elementy nagłówków HTML: h1 i h2. One również zo- stały wpisane bezpośrednio w widoku Source view pliku default.aspx, ponieważ pasek narzę- dziowy nie zawiera żadnych kontrolek nagłówków HTML. W tym miejscu jednakże po wpi- saniu otwierającego znaku nawiasu z pomocą przychodzi lista IntelliSense, która wyświetla rozwijaną listę wszystkich elementów możliwych do prawidłowego umieszczenia wewnątrz tej pary nawiasów. W trakcie wpisywania kolejnych znaków, lista dynamicznie prezentuje dostępne możliwości. Kolejny krok to przeciągnięcie na stronę kontrolki Label z sekcji Standard paska narzędzio- wego. Można to zrobić zarówno w widoku Design view, jak i Source view. Zaletą korzystania z tej pierwszej możliwości jest trochę łatwiejsze generowanie obsługi zdarzeń. Po umieszczeniu wskaźnika myszy na kontrolce Label, ponownie zarówno w widoku Design view, jak i Source view, okno Properties wyświetli bieżące właściwości kontrolki. Zmieniamy wartość właściwości ID z domyślnej Label1 na lblTime. Usuwamy zawartość właściwości Text. Alternatywną możliwością jest bezpośrednie wpisanie w widoku Source view deklaracji kontrolek bez używania okna Properties. IntelliSense ponownie okazuje się pomocne, wy- świetlając listę wszystkich możliwych argumentów (właściwości) i zdarzeń. Jeżeli dokonamy zmian w dowolnym widoku lub oknie Properties, wówczas pozostałe widoki i okna natych- miast uwzględnią wprowadzone zmiany. Zaletą przedstawienia Czytelnikowi pliku .aspx jest to, że w ten sposób staje się jasne, jak powinien wyglądać ukończony kod. Dzięki temu można budować kod albo ręcznie, albo za pomocą technologii przeciągnij i upuść i/lub okna Properties — wybór należy do programisty. W rzeczywistości, jeżeli Czytelnik nie ma ochoty na wykonywanie czynności w żaden z przed- stawionych sposobów, to może pobrać kompletne kody źródłowe z witryny wydawnictwa Helion poświęconej tej książce, jak to zostało opisane we wstępie. Podstawy | 117 Uruchamiamy stronę, naciskając klawisz F5 bądź wybierając z menu Debug opcję Start. Uzy- skany wynik powinien być podobny do tego pokazanego na rysunku 4.1. Te dwa przykłady demonstrują zastosowanie kontrolki Label, obsługę zdarzenia oraz wła- ściwości ustawione kontrolce. Przedstawiona prosta strona internetowa zawiera statyczny tekst oraz kontrolkę serwerową Label, której przypisano identyfikator id o wartości lblTime. Identyfikator pozwala na od- wołanie się do tej kontrolki z dowolnego miejsca w kodzie. Bardziej interesujący jest atrybut onInit, który definiuje obsługę zdarzeń dla zdarzenia Init. Zdarzenie Init, będące elementem klasy Control, zostaje wywołane w trakcie inicjalizacji kontrolki. Jest to pierwszy krok w cyklu życia każdej kontrolki. Wszystkie WebControls, jako że wywodzą się z klasy Control, posiadają zdarzenie Init. W listingach 4.1 i 4.3, zdarzenie Init jest obsługiwane przez metodę o nazwie lblTime_Init, zdefiniowaną, odpowiednio, w bloku kodu na początku pliku .aspx lub w pliku ukrytego kodu. Metoda lblTime_Init ustawia kilka właściwości czcionki etykiety (Name, Size itd.) oraz ustawia wartość właściwości Text. Wartość właściwości Text jest połączeniem aktualnej daty i czasu, właściwym ciągiem znakowym oraz nazwą użytej czcionki. Ponieważ DateTime.Now jest typem DateTime, to musi zostać skonwertowany w kodzie C# do postaci ciągu znakowego. Wynik działania tego kodu, pokazany na rysunku 4.1, nie jest ładny, ale kształcący. Na ry- sunku pokazano, w jaki sposób można stosować kilka atrybutów tekstowych — pogrubienie, kursywa, podkreślenie i skreślenie — do formatowania tekstu na etykiecie. Czcionki (obiekt Font) wymagają specjalnej wzmianki, ponieważ zawierają podwłaściwości, które zostały przedstawione w tabeli 4.1. Kiedy podwłaściwości są używane w HTML, dostęp do nich w kodzie jest deklaracyjny w formie: Font-Italic Tabela 4.1. Podwłaściwości obiektu Font Podwłaściwość Typ Wartości Opis Bold Italic Name Boolean Boolean String true, false true, false Verdana, Curier itd. Names String Times itd. Strikeout Boolean true, false Underline Boolean true, false Overline Boolean true, false Size FontUn it lub String Small, Smaller, Large, Larger lub liczba całkowita oznaczająca wielkość w punktach. Powoduje pogrubienie tekstu. Wartością domyślną jest false. Tekst zostaje napisany kursywą. Wartością domyślną jest false. Automatycznie uaktualnia pierwszy element właściwości Names. Czcionka musi być zainstalowana i dostępna dla przeglądarki klienta. Uporządkowana tablica nazw czcionek. Właściwość Name zostaje automatycznie uaktualniona pierwszym elementem tablicy. Umieszcza linię biegnącą poprzez tekst (skreślenie). Wartością domyślną jest false. Umieszcza linię pod tekstem (podkreślenie). Wartością domyślną jest false. Umieszcza linię nad tekstem. Wartością domyślną jest false. Nie jest generowana w przeglądarkach typu downlevel. Stosuje nazwy wielkości lub liczby całkowite oznaczające wielkość czcionki. Nazwy wielkości działają deklaracyjnie tylko jako atrybuty kontrolki. 118 | Rozdział 4. Kontrolki podstawowe W blokach kodu podwłaściwości są dostępne programowo w taki sposób: Font.Italic W przypadku używania liczby punktów zamiast nazw wielkości dla określenia wielkości czcionki, warto zwrócić uwagę, że wersja C# FontUnit dostarcza operatora konwersji, który pobiera liczbę całkowitą int, a tworzy FontUnit. Dlatego też można skorzystać z następują- cego zapisu: lblTime.Font.Size = 20; Można to zrobić bez wyraźnego posiadania egzemplarza obiektu FontUnit (co jest wymagane, przykładowo, w VS2005). Przypominamy, że w tym rozdziale analizujemy różne kontrolki dostępne dla programisty. Wyjaśnimy, w jaki sposób używać każdej z nich oraz przedstawiamy przykłady ich wyko- rzystania. Kontrolka Label Kontrolka Label jest używana do wyświetlania tekstu. Właściwość Text kontrolki Label za- wiera wyświetlany przez nią ciąg tekstowy. Właściwość Text jest jedyną właściwością kon- trolki Label, która nie jest dziedziczona z klas Control lub WebControl. Kontrolka Label nie posiada zdarzeń lub metod, które nie wywodzą się z klas Control lub WebControl. W poprzednich rozdziałach opisaliśmy kontrolkę Label w kilku przykładowych kodach. Właściwości Text i Font kontrolki Label mogą zostać ustawione programowo (jak przedsta- wiono to w listingach 4.1 i 4.3) lub deklaracyjnie. Kontrolka TextBox Kontrolka TextBox może być wykorzystywana zarówno do wprowadzania danych przez użytkownika, jak i jedynie do wyświetlania tekstu. Możliwości konfiguracyjne kontrolki obejmują przedstawienie jej w postaci jednego wiersza lub kilku wierszy, a nawet do przyj- mowania haseł. Jeżeli zostanie zastosowana w postaci wielowierszowej, słowa będą auto- matycznie przenoszone do nowego wiersza, dopóki właściwość Wrap nie zostanie ustawiona jako false. Tekst zawarty w kontrolce może przekraczać wielkość kontrolki wyświetlanej na ekranie. Kontrolki TextBox, DropDownList, Label i inne kontrolki tekstowe implementują interfejs ITextControl, który jest nowością w ASP.NET 2.0. Wspomniany interfejs posiada pojedynczą właściwość Text, która jest wizualną zawartością kontrolki. W tabeli 4.2 zostały przedstawione najczęściej wykorzystywane właściwości, które można określać dla kontrolki TextBox. Jeżeli jakikolwiek z tych argumentów zostanie pominięty w kontrolce, wówczas zostanie zastosowana jego domyślna wartość. Oprócz zdarzeń dziedziczonych z klasy WebControl, takich jak Init, Load i PreRender, kon- trolka TextBox wywołuje również zdarzenie TextChanged, gdy zawartość pola tekstowego zostanie zmieniona, a kontrolka utraci aktywność. Nie jest to zdarzenie powodujące ponowne wysłanie żądania do serwera, chyba że wartość właściwości AutoPostBack wynosi true. Kontrolka TextBox | 119 Tabela 4.2. Niektóre właściwości określone dla kontrolki TextBox Nazwa Typ Pobierz Ustaw Wartości Opis AutoPostBack Boolean x Columns MaxLength Int32 Int32 ReadOnly Boolean Rows Int32 Text TextMode String TextBox- Mode Validation- Group String Wrap Boolean x x x x x x x x x x x x x x x x x true, false 0, 1, 2 itd. 0, 1, 2 itd. true, false 0, 1, 2 itd. SingleLine, MultiLine, Password true, false Określa, czy zmiana zawartości kontrolki przez użytkownika powoduje ponowne wysłanie żądania do serwera. W przypadku wartości false, ponowne komunikowanie się z serwerem nie wystąpi, dopóki strona nie zostanie odświeżona albo przyciskiem, albo przez inną kontrolkę z właściwością AutoPostBack ustawioną na true. Wartością domyślną jest false. Szerokość pola tekstowego w znakach. Wartość domyślna — 0 — wskazuje, że właściwość nie jest ustawiona. Maksymalna dozwolona liczba znaków. Jeżeli wartość MaxLength jest większa od Columns, wówczas jedynie fragment ciągu znaków zostanie wyświetlony bez używania klawiszy Home, End i strzałek. Wartością domyślną jest 0, oznaczające brak ograniczenia w liczbie znaków możliwych do wprowadzenia do pola tekstowego. Wartość true oznacza, że zawartość kontrolki nie może zostać zmieniona przez użytkownika, chociaż wciąż może zostać zmieniona programowo. Wartością domyślną jest false. Liczba wierszy tekstu w wielowierszowym polu tekstowym. Wartością domyślną jest 0, co oznacza brak ograniczenia w liczbie wierszy. Zawartość kontrolki TextBox. SingleLine jest wartością domyślną i wyświetla pojedynczy wiersz tekstu. MultiLine pozwala na wyświetlanie wielu wierszy tekstu oraz pionowego paska przewijania, nawet dla Rows = 1. Po osiągnięciu szerokości pola, tekst jest automatycznie przenoszony do nowego wiersza. Klawisz Enter wprowadza znak powrotu karetki/nowego wiersza. Kliknięcie myszą lub klawisz Tab powodują wycofanie aktywności z pola i inicjalizację ponownego zapytania do serwera, jeśli AutoPostBack ma wartość true. Password wyświetla gwiazdki jako zawartość pola, a przy odświeżeniu strony czyści pole. Wartość nie uwzględnia wielkości liter. Określa, której grupy sprawdzania poprawności (jeżeli w ogóle), ta kontrolka jest elementem. Sprawdzanie poprawności zostanie omówione w rozdziale 8. Wskazuje, czy tekst wewnątrz wielowierszowego pola tekstowego powinien być przenoszony do nowego wiersza. W przypadku wartości false, pole tekstowe będzie posiadało poziomy suwak przewijania. Wartością domyślną jest true. 120 | Rozdział 4. Kontrolki podstawowe Kiedy kontrolka TextBox zostaje zadeklarowana w pliku z treścią (.aspx lub .ascx), wówczas metoda obsługi zdarzenia TextChanged zostaje określona atrybutem OnTextChanged. Text- Changed jest domyślną obsługą zdarzenia, utworzoną przez VS2005 po dwukrotnym kliknię- ciu kontrolki TextBox w widoku Design view. Obsługa zdarzenia jest przekazywana standar- dowym argumentem EventArgs. Poniższy przykład zademonstruje podstawowe wykorzystanie kontrolki TextBox z uwzględ- nieniem obsługi zdarzenia TextChanged. Na omawianej, przykładowej stronie znajdują się dwa pola tekstowe: pierwsze służące do wprowadzania tekstu, natomiast drugie w postaci kontrolki tylko do odczytu, wyświetla zawartość pierwszego pola. Ukończona strona, po zmianie tekstu w polu wejściowym, powinna być podobna do pokazanej na rysunku 4.2. Rysunek 4.2. Aplikacja TextBoxDemo W VS2005 tworzymy nową witrynę internetową i nadajemy jej nazwę TextBoxDemo. Następ- nie na stronę przeciągamy dwie kontrolki TextBox. Właściwość ID pierwszej kontrolki po- winna zostać ustawiona jako txtInput, natomiast drugiej — na txtEcho. W przypadku pola txtInput właściwość AutoPostBack ustawiamy jako true, tak więc formularz automatycznie odświeży zawartość strony, jeżeli zawartość kontrolki ulegnie zmianie. Kontrolce txtEcho ustawiamy wartość LightGray właściwości BackColor, a właściwość ReadOnly otrzymuje wartość true. Zawartość pliku przedstawionego na listingu 4.4 obejmuje również atrybut OnTextChanged, którego dodanie zostanie omówione w kolejnym akapicie. Listing 4.4. Plik Default.aspx aplikacji TextBoxDemo @ Page Language= C# AutoEventWireup= true CodeFile= Default.aspx.cs Inherits= _Default !DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.1//EN http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd html xmlns= http://www.w3.org/1999/xhtml head runat= server title Demo kontrolki TextBox /title /head Kontrolka TextBox | 121 body form id= form1 runat= server div h1 TextBox Demo /h1 asp:TextBox ID= txtInput runat= server AutoPostBack= true OnTextChanged= txtInput_TextChanged Wprowadź dowolny tekst /asp:TextBox br / asp:TextBox ID= txtEcho runat= server BackColor= LightGray ReadOnly= True /asp:TextBox /div /form /body /html W celu łatwego utworzenia domyślnej obsługi zdarzenia pola txtInput wystarczy przejść do widoku Design view i dwukrotnie kliknąć kontrolkę TextBox. VS2005 doda do deklaracji txtInput w pliku z treścią atrybut OnTextChanged i otworzy plik ukrytego kodu, który będzie zawierał szkielet obsługi zdarzenia. W tym miejscu musimy wpisać pogrubiony wiersz z kodu przedstawionego na listingu 4.5. Listing 4.5. Obsługa zdarzenia TextChanged w aplikacji TextBoxDemo protected void txtInput_TextChanged(object sender, EventArgs e) { txtEcho.Text = txtInput.Text; } Przy pierwszym uruchomieniu aplikacji pole tekstowe txtInput będzie zawierało komunikat „Wprowadź dowolny tekst”. Kiedy zawartość kontrolki zostanie zmieniona i użytkownik opuści pole tekstowe, wtedy nastąpi wywołanie zdarzenia TextChanged. Określona w atry- bucie OnTextChanged obsługa zdarzeń txtInput_TextChanged zostanie uruchomiona i wypełni pole tekstowe txtEcho. Kontrolka HiddenField Ukryte pola są częstym trikiem programistów HTML, pozwalającym na przenoszenie infor- macji między stronami, jeśli te informacje nie powinny być widoczne dla użytkownika. Łatwiejszym i bardziej eleganckim sposobem realizacji tego zadania jest użycie jednego z me- chanizmu stanów dostarczanych przez platformę .NET (pełna analiza stanów zostanie przed- stawiona w rozdziale 6.), jednakże czasami jest to niemożliwe, być może z powodu wydajności, przepustowości łącza bądź kwestii bezpieczeństwa (w rzeczywistości, wydajność aplikacji i przepustowość łącza są jak dwie strony tej samej monety). W klasycznych stronach HTML czasami stosuje się poniższy fragment kodu w celu imple- mentacji ukrytego pola: input type= hidden value= foo 122 | Rozdział 4. Kontrolki podstawowe ASP.NET używa ukrytego pola w implementacji stanu widoku (view state). Można się o tym przekonać, analizując kod źródłowy, który został wygenerowany w prze- glądarce. W celu wyświetlenia kodu źródłowego w przeglądarce Internet Explorer należy wybrać polecenie Źródło z menu Widok (inne przeglądarki posiadają analo- giczne opcje). W kodzie źródłowym można zauważyć fragmenty podobne do po- niższego, w którym atrybut value zawiera wszystkie informacje zapisane w sta- nie widoku. input type= hidden name= __VIEWSTATE value= /wEPDwUJLOCHlBR...YfL+BDX7xhMw= / W celu skorzystania z zalet przetwarzania po stronie serwera, można dokonać konwersji kontrolki na kontrolkę serwerową HTML, dodając atrybuty id i runat: input type= hidden value= foo id= myHiddenControl runat= server Kontrolka ASP.NET HiddenField jest najlepszym rozwiązaniem ze wszystkich przedstawio- nych opcji (zakładamy, że istnieje jakiś istotny powód niepozwalający na użycie możliwości stanów ASP.NET) ponieważ zapewnia następujące możliwości: · · spójność programową; łatwy dostęp do wartości Value, która przechowuje wartość obsługiwaną przez kontrolkę; właściwość ClientID dziedziczoną z klasy Control, która zapewnia samej kontrolce atrybut id; dostęp do zdarzenia ValueChanged (domyślne zdarzenie kontrolki HiddenField w VS2005). · · Kontrolka HiddenField jest nowością w ASP.NET 2.0. Zdarzenie ValueChanged jest wywoływane w trakcie odświeżenia strony, gdy wartość Value kontrolki różni się od poprzedniego odświeżenia strony. Zdarzenie nie powoduje wysłania żądania do serwera — w przeciwieństwie do większości kontrolek typu non-postback, kon- trolka HiddenField nie posiada właściwości AutoPostBack do wymuszenia wysłania na- tychmiastowego żądania do serwera. Podobnie jak w przypadku wszystkich kontrolek typu non-postback (przedstawionych w poprzednim rozdziale), zdarzenie będzie buforowane, do- póki formularz nie zostanie odświeżony przez inną kontrolkę. Wówczas zdarzenie zostanie obsłużone przez serwer. Wymienione funkcje zostaną przedstawione na listingu 4.6, prezentującego plik o nazwie HiddenFieldDemo. Plik z treścią został również umieszczony w tym listingu. Oprócz wyświe- tlania kodu HTML, w którym uwzględniono nagłówek h2 , informujący o odświeżeniu strony, formularz zawiera kontrolkę TextBox. Kontrolka ta służy do wprowadzenia nowej wartości dla kontrolki HiddenField. Na stronie znajduje się również przycisk HTML (zasto- sowany do uruchamiania funkcji po stronie klienta, bez powodowania ponownego wysłania żądania do serwera) oraz przycisk ASP.NET (wymuszający ponowne wysłanie żądania do serwera). Kontrolka Label wyświetla zawartość ukrytego pola. Kontrolka HiddenField | 123 Listing 4.6. Plik Default.aspx witryny internetowej HiddenFieldDemo @ Page Language= C# AutoEventWireup= true CodeFile= Default.aspx.cs Inherits= _Default !DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.1//EN http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd html xmlns= http://www.w3.org/1999/xhtml head runat= server title Kontrolka HiddenField /title /head script language=javascript function ChangeHiddenValue() { alert( Wprowadzanie ChangeHiddenValue ); var hdnId = =hdnSecretValue.ClientID var hdn = document.getElementById(hdnId); var txt = document.getElementById( txtSecretValue ); hdn.value = txt.value; alert( Wartość została zmieniona ); } /script body form id= form1 runat= server div h1 Kontrolka HiddenField /h1 h2 Strona została odświeżona o =DateTime.Now.ToString() . /h2 asp:HiddenField ID= hdnSecretValue runat= server OnValueChanged= hdnSecretValue_ValueChanged / Wprowadź tajną wartość: asp:TextBox ID= txtSecretValue runat= server / br / br / input type=button value= Zmiana ukrytej wartości onclick= ChangeHiddenValue() / asp:Button ID= btnPost runat= server Text= Odśwież / br / br / asp:Label ID= lblMessage runat= server Text= / /div /form /body /html Przycisk HTML wywołuje funkcję ChangeHiddenValue, która jest zawarta wewnątrz bloku skryptu JavaScript, zaznaczonego w listingu pogrubionymi wierszami. Funkcja posiada dwie metody alert pomocne w trakcie usuwania błędów. Mogą one zostać pominięte lub umiesz- czone w komentarzach. Funkcja ChangeHiddenValue pokazuje dwie równoznaczne drogi pobrania odniesienia do kontrolki na stronie. Każdy z tych sposobów korzysta z metody JavaScript getElementById, która zwraca odniesienie do pierwszego znalezionego na stronie elementu, posiadającego podany atrybut ID. 124 | Rozdział 4. Kontrolki podstawowe W przypadku pierwszej z przedstawionych technik, kontrolka HiddenField otrzymuje od- niesienie dzięki swojej właściwości ClientID. Odkąd ta właściwość wywodzi się z klasy Control, stała się dostępna dla wszystkich kontrolek serwerowych ASP.NET. Odpowiedni fragment kodu, wykonywany po stronie serwera, jest wywoływany z wewnątrz funkcji JavaScript przez umieszczenie go między znacznikami = . W przypadku drugiej z technik, atrybut ID kontrolki TextBox jest przekazywany do metody getElementById. Zdarzenie HiddenField ValueChanged jest obsługiwane przez metodę po stronie serwera hdnSecretValue_ValueChanged, jak jest to wskazane przez pogrubiony na listingu 4.6 atry- but OnValueChanged. Obsługa zdarzenia umieszczona w pliku ukrytego kodu default.aspx.cs została przedstawiona na listingu 4.7. Pozostała część pliku ukrytego kodu nie została w tym miejscu zaprezentowana, ponieważ jest standardowym kodem umieszczanym przez VS2005. Listing 4.7. Fragment pliku default.aspx.cs witryny HiddenFieldDemo protected void hdnSecretValue_ValueChanged(object sender, EventArgs e) { HiddenField hdn = (HiddenField)sender; lblMessage.Text = Nowa wartość wynosi + hdn.Value + . ; } Pierwszy wiersz w hdnSecretValue_ValueChanged otrzymuje odniesienie do kontrolki, która wywołała zdarzenie. Jest ono przechowywane w argumencie sender i zgłasza sender jako HiddenField. Następnie właściwość Value obiektu HiddenField jest używana do ustawienia właściwości Text etykiety lblMessage. Po wprowadzeniu tajnej wartości i naciśnięciu przycisku Odśwież, zobaczymy stronę inter- netową podobną do pokazanej na rysunku 4.3. Przycisk Odśwież nie posiada obsługi zdarzenia, ponieważ nie potrzebujemy jej do wykonywania żadnej funkcji, innej niż powodującej po- nowne zapytanie serwera. Rysunek 4.3. Aplikacja HiddenFieldDemo Kontrolka HiddenField | 125 Kontrolki Button Kontrolki Button przekazują formularz z powrotem do serwera, rozpoczynając tym samym proces przetwarzania po stronie serwera. Istnieją trzy typy kontrolek ASP.NET Button, wszystkie należą do przestrzeni nazw System.Web.UI.WebControls: Button Standardowy przycisk. LinkButton Kontrolka LinkButton jest czymś w rodzaju połączenia standardowego przycisku oraz kontrolki HyperLink (zostanie opisana w kolejnym podrozdziale). Kontrolka LinkButton jest wyświetlana użytkownikowi jako łącze (na przykład kolorowy i podkreślony tekst). ImageButton Kontrolka ImageButton wykonuje te same funkcje, co standardowy przycisk. Od standar- dowego przycisku różni się tym, że w przeglądarce jest wyświetlana jako element graficzny. Kontrolka ImageButton nie posiada właściwości Text, ale zawiera atrybut AlternateText, który wyświetla odpowiedni tekst w przeglądarkach tekstowych. Dodatkowo, obsługa zdarzeń stosuje argument zdarzenia ImageClickEventArgs, który jest odmienny od obsługi zdarzeń kontrolek Button i LinkButton. Ten argument zdarze- nia posiada dwa pola (nie zostały zaprezentowane w przedstawionym przykładzie) za- wierające współrzędne X i Y miejsca, w którym użytkownik kliknął obrazek. Wspomniane pola mogą zostać wykorzystane przez programistę do implementacji jego własnej funk- cjonalności mapy graficznej. Oprócz wszystkich właściwości, metod i zdarzeń dziedziczonych z klasy WebControl, wszystkie trzy przyciski zapewniają obsługę dwóch następujących zdarzeń: Click To zdarzenie jest wywoływane po kliknięciu kontrolki, gdy do przycisku nie zostanie przypisana żadna nazwa polecenia (to znaczy do właściwości CommandName kontrolki Button nie przypisano żadnej wartości). Metoda jest przekazywana argumentem typu EventArgs. Command To zdarzenie jest wywoływane po kliknięciu kontrolki, gdy do przycisku przypisano na- zwę polecenia (to znaczy do właściwości CommandName kontrolki Button przypisano nazwę polecenia). Zdarzenie jest przekazywane argumentem typu CommandEventArgs, które po- siada dwa następujące elementy: CommandName Nazwa polecenia. CommandArgument Opcjonalny argument polecenia. Wszystkie trzy typy kontrolki Button implementują interfejs IButtonControl, który jest no- wością w ASP.NET 2.0. Interfejs wymaga zdarzeń Click i Command oraz takich właściwości jak Text i CausesValidation, jak również innych, które zostaną wkrótce opisane. To dzięki interfejsowi IButtonControl kontrolka działa jak przycisk. 126 | Rozdział 4. Kontrolki podstawowe Kolejny przykład ButtonDemo tworzy stronę internetową zawierającą kontrolki Button, Link- Button i ImageButton. Każdy z przycisków wykonuje to samo zadanie: przekazuje kontrolę innej stronie internetowej. Plik z treścią został przedstawiony na listingu 4.8. Listing 4.8. Strona Default.aspx witryny internetowej ButtonDemo @ Page Language= C# AutoEventWireup= true CodeFile= Default.aspx.cs Inherits= _Default !DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.1//EN http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd html xmlns= http://www.w3.org/1999/xhtml head runat= server title Przyciski /title /head body form id= form1 runat= server div h1 Kontrolki Button /h1 asp:Button ID= btnLink runat= server Text= Łącze do strony docelowej ToolTip= Kliknij tutaj, aby przejść do strony docelowej. OnClick= btnLink_Click / asp:ImageButton ID= imgLink runat= server AlternateText= Łącze do strony docelowej ImageUrl= Dan at Vernal Pool.jpg ToolTip= Kliknij tutaj, aby przejść do strony docelowej. OnClick= imgLink_Click / asp:LinkButton ID= lnkLink runat= server ToolTip= Kliknij tutaj, aby przejść do strony docelowej. Font-Name= Comic Sans MS Bold Font-Size= 16pt OnClick= btnLink_Click LinkButton do strony docelowej /asp:LinkButton /div /form /body /html Obsługa zdarzeń Click umieszczona w pliku ukrytego kodu została przestawiona na li- stingu 4.9. Listing 4.9. Obsługa zdarzeń Click dla witryny ButtonDemo protected void btnLink_Click(object sender, EventArgs e) { Response.Redirect( //localhost/websites/StronaDocelowa.aspx ); } protected void imgLink_Click(object sender, ImageClickEventArgs e) { Response.Redirect( //localhost/websites/StronaDocelowa.aspx ); } Kontrolki Button | 127 Położenia plików Niezależnie od tego, że położenie plików jest wymagane przez ASP.NET jako argument metody Redirect czy jako właściwość, na przykład ImageButton.ImageURL, istnieją cztery sposoby przedstawienia adresu URL: Względne Położenie jest określane w odniesieniu do katalogu głównego aplikacji. Adres rozpoczyna się od znaku kropki (.) lub samą nazwą, ale nie znakiem ukośnika (/). Względem aplikacji Położenie jest względem katalogu głównego aplikacji. Wykorzystywany jest operator ~ (tylda), który oznacza katalog główny aplikacji, jak to przedstawiono w poniższym przykładzie: BackImageUrl= ~/images/Sunflower Bkgrd.jpg Powyższy zapis powoduje odniesienie do pliku w katalogu images, który znajduje się w katalogu głównym. Zaletą używania adresowania względnego lub względem aplikacji jest łatwiejsze pro- gramowanie. Pełna analiza zagadnień związanych z programowaniem zostanie przed- stawiona w rozdziale 19. Absolutne Ścieżka do pliku zapisanego na komputerze lokalnym rozpoczyna się od ukośnika (/), wskazując katalog na bieżącym dysku twardym lub inny napęd, inny napęd oraz ścieżkę dostępu. Jeżeli aplikacja została zaprogramowana na komputerze z zupełnie inną strukturą kata- logów, wprowadzony tu kod może wymagać zmian. W ten sposób można uniknąć wy- stąpienia błędów. Pełna ścieżka Może być to jeden z kilku typów. Format Universal Naming Convention (UNC) określa poło- żenie wszystkich możliwych zasobów w sieci i przyjmuje następującą formę: \nazwa-serwerasciezka-do-wspoldzielonego-zasobu Może być to adres URL do strony w internecie, na przykład: http://www.DowolnaDomena.pl Może być to również usługa serwera obecnego na komputerze lokalnym, na przykład: //localhost/witryny_www/StronaDocelowa.aspx Ukończona strona została pokazana na rysunku 4.4. Aby zapewnić prawidłowe działanie kodu przedstawionego w witrynie ButtonDemo, musimy posiadać docelową stronę internetową, do której prowadzi łącze. Może to być dowolny prawidłowy plik .html, .asp lub .aspx. W powyższym przykładzie stro- na docelowa została zdefiniowana jako StronaDocelowa.aspx umieszczona w katalogu wirtualnym websites. Oprócz tego będzie konieczny plik graficzny dla kontrolki ImageButton. W naszym przykładzie wykorzystaliśmy plik Dan at vernal pool.jpg umieszczony w katalogu witryny internetowej, aczkolwiek może zostać użyty dowolny plik graficzny. 128 | Rozdział 4. Kontrolki podstawowe Rysunek 4.4. Witryna internetowa ButtonDemo Duża różnica między kontrolką LinkButton a standardową kontrolką Button polega na tym, że dostępne funkcje kontrolki LinkButton są implementowane za pomocą skryptu po stronie klienta. Stanie się to wyraźnie oczywiste, jeżeli spojrzymy na kod źródłowy wygenerowany przez przeglądarkę wyświetlającą stronę internetową ButtonDemo. Fragment tego kodu został przedstawiony na listingu 4.10. Należy pamiętać, że ten kod źródłowy został wygenerowany przez ASP.NET, a nie wpisany przez programistę. Listing 4.10. Fragment kodu źródłowego strony ButtonDemo script type= text/javascript !-- var theForm = document.forms[ form1 ]; function __doPostBack(eventTarget, eventArgument) { if (theForm.onsubmit == null || theForm.onsubmit()) { theForm.__EVENTTARGET.value = eventTarget; theForm.__EVENTARGUMENT.value = eventArgument; theForm.submit(); } } // --- /script input type= submit name= btnLink value= Łącze do strony docelowej id= btnLink title= Kliknij tutaj, aby przejść do strony docelowej. / input type= image name= imgLink id= imgLink title= Kliknij tutaj, aby przejść do strony docelowej. src= Dan 20at 20Vernal 20Pool.jpg alt= Łącze do strony docelowej style= border-width:0px; / a id= lnkLink title= Kliknij tutaj, aby przejść do strony docelowej. href= javascript:__doPostBack( lnkLink , ) style= font-family:Comic Sans MS Bold;font-size:16pt; Łącze do strony docelowej /a Kontrolki Button | 129 Kontrolka HyperLink Kontrolka HyperLink jest podobna do kontrolki LinkButton, choć dzieli je zasadnicza różnica. Otóż kontrolka HyperLink natychmiast wywołuje docelowy adresu URL, bez ponownego od- świeżania formularza, podczas gdy kontrolka LinkButton to odświeżanie wykonuje. Jeżeli zostanie wybrana obsługa zdarzenia kontrolki LinkButton, nastąpi przejście do docelowego adresu URL. Kontrolka HyperLink zachowuje się w sposób podobny do kontrolki HTML. Kontrolka HyperLink posiada cztery określone parametry: ImageUrl Ścieżka do pliku graficznego przeznaczonego do wyświetlenia zamiast tekstu. W przy- padku zastosowania tego atrybutu, kontrolka będzie wyświetlana użytkownikowi dokład- nie tak samo jak kontrolka ImageButton. Oczywiście, kontrolka ImageButton wciąż od- świeża stronę, podczas gdy HyperLink jedynie ją wywołuje. NavigateUrl Docelowy adres URL. Text Ciąg znakowy, który zostanie wyświetlony w przeglądarce jako łącze. Jeżeli ustawiono jednocześnie właściwości Text i ImageUrl, wówczas zastosowana będzie właściwość ImageUrl. Tekst zostanie wyświetlony, jeśli plik graficzny będzie niedostępny. Jeżeli przeglądarka obsługuje mechanizm podpowiedzi, a właściwość ToolTip (dziedzi- czona z klasy WebControl) nie została ustawiona, wtedy wartość Text zostanie wyświetlona jako podpowiedź. Jeśli właściwość ToolTip została ustawiona, wtedy jako podpowiedź zostanie wyświetlony ciąg znakowy ToolTip. Target Definiuje docelowe okno lub ramkę, do którego zostanie wczytana strona docelowa. Wartość rozróżnia wielkość liter i musi rozpoczynać się znakiem z zakresu a-z, za wyjąt- kiem wartości specjalnych przedstawionych w tabeli 4.3. Wszystkie wartości specjalne rozpoczynają się od znaku podkreślenia. Tabela 4.3. Wartości specjalne atrybutu Target Wartość docelowa Opis _blank _new _parent _self _top Generuje zawartość w nowym nienazwanym oknie bez ramek. Nieudokumentowana, ale zachowuje się tak samo jak wartość _blank. Generuje zawartość w oknie nadrzędnym albo bloku frameset okna albo ramce z łączem. Jeżeli element potomny jest oknem lub ramką najwyższego poziomu, wówczas zachowuje się tak samo jak _self. Generuje zawartość w bieżącej ramce lub aktywnym oknie. Jest to wartość domyślna. Generuje zawartość w bieżącym pełnym oknie bez ramek. Poniżej prezentujemy przykładowy plik HyperLinkDemo pokazuje w działaniu kontrolkę HyperLink. Plik z treścią został przedstawiony na listingu 4.11. Kontrolka HyperLink nie wysyła żądania do serwera, tak więc ten przykład nie zawiera pliku ukrytego kodu. 130 | Rozdział 4. Kontrolki podstawowe Listing 4.11. Plik Default.aspx z aplikacji HyperLinkDemo @ Page Language= C# AutoEventWireup= true CodeFile= Default.aspx.cs Inherits= _Default !DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.1//EN http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd html xmlns= http://www.w3.org/1999/xhtml head runat= server title Kontrolka HyperLink /title /head body form id= form1 runat= server div h1 Kontrolka HyperLink /h1 asp:HyperLink ID= hypLink runat= server NavigateUrl= //localhost/websites/StronaDocelowa.aspx Target= _self Font-Names= Impact Font-Size= 16 ToolTip= Kliknij tutaj, aby przejść do strony docelowej. HyperLink do strony docelowej /asp:HyperLink /div /form /body /html Kiedy strona HyperLinkDemo zostanie uruchomiona, będzie wyglądała podobnie do pokaza- nej na rysunku 4.5. Aby zapewnić prawidłowe działanie przedstawionego kodu, musimy po- siadać stronę internetową o nazwie StronaDocelowa.aspx, umieszczoną w katalogu fizycznym, który odpowiada wirtualnemu katalogowi websites na komputerze lokalnym. Rysunek 4.5. Aplikacja HyperLinkDemo Kontrolka HyperLink jest generowana w przeglądarce klienta jako znacznik kotwiczący HTML (to znaczy a ). Możemy to sprawdzić, analizując w przeglądarce kod źródłowy wyświetlonej strony. Kontrolka HyperLink | 131 Zaznaczanie wartości Kilka kontrolek serwerowych ASP.NET pozwala użytkownikowi na zaznaczenie jednej lub wielu wartości: CheckBox Pozwala na zaznaczenie danych typu Boolean. CheckBoxList Grupa kontrolek CheckBox, które mogą być dynamicznie tworzone i łączone ze źródłami danych. RadioButton Pozwala na wybranie tylko jednej opcji z grupy. RadioButtonList Grupa kontrolek RadioButton, które mogą być dynamicznie tworzone i łączone ze źró- dłami danych. ListBox Pozwala na zaznaczenie jednego bądź większej liczby elementów z zdefiniowanej wcze- śniej listy. DropDownList Podobna do kontrolki ListBox, ale pozwala na zaznaczenie tylko jednego elementu. BulletedList Formatowanie za pomocą znaku wypunktowania, może być zwykłym tekstem lub łączem. Wszystkie wymienione kontrolki wywodzą się z klasy WebControl. Kontrolka RadioButton wywodzi się później z klasy CheckBox, a wszystkie kontrolki list wywodzą się z klasy abs- trakcyjnej ListControl. Każda z wymienionych kontrolek zostanie szczegółowo przedsta- wiona w kolejnych podrozdziałach. Kontrolka CheckBox Kontrolka CheckBox umożliwia użytkownikowi zaznaczenie danych typu Boolean (na przy- kład Tak/Nie lub Prawda/Fałsz). Jeżeli ułożono razem kilka pól wyboru (nie należy ich mylić z kontrolką CheckBoxList, która zostanie omówiona w kolejnym podrozdziale), wówczas można zaznaczyć wiele opcji. Żadna z opcji nie wyklucza innej. Kontrolki CheckBox i RadioButton implementują interfejs ICheckBoxControl, który jest no- wością w ASP.NET 2.0. Interfejs udostępnia jedną właściwość o nazwie Checked oraz jedno zdarzenie CheckedChanged. Poniżej zostały one opisane. Aplikacja CheckBoxDemo, pokazana na rysunku 4.6, demonstruje użycie trzech niezależnych kontrolek CheckBox do sterowania sposobem pojawienia się kontrolki Label. Klikając do- wolne z przedstawionych w przykładzie pól wyboru — Podkreślenie, Nakreślenie lub Przekre- ślenie — spowoduje nałożenie odpowiedniego atrybutu czcionki na ciąg tekstowy zawarty w kontrolce Label. 132 | Rozdział 4. Kontrolki podstawowe Rysunek 4.6. Aplikacja CheckBoxDemo Zawartość pliku z treścią znajduje się na listingu 4.12. Listing 4.12. Plik Default.aspx z aplikacji CheckBoxDemo @ Page Language= C# AutoEventWireup= true CodeFile= Default.aspx.cs Inherits= _Default !DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.1//EN http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd html xmlns= http://www.w3.org/1999/xhtml head runat= server title Kontrolka CheckBox /title /head body form id= form1 runat= serv
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

ASP.NET. Programowanie
Autor:
,

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: