background image

14

ASP.NET Starter Kit

www.sdjournal.org

Software Developer’s Journal Extra!   20

Stefan Turalski

Podstawy ASP.NET 2.0 

– tworzenie aplikacji internetowych

N

iezwykle  trudno  jest  stworzyć  artykuł  oma-

wiający wszystkie aspekty zastosowania naj-

nowszej  platformy  programistycznej  firmy 

Microsoft. Wszak ASP.NET 2.0 to zestaw wielu narzę-

dzi oraz możliwość skorzystania z całego potencjału 

platformy .NET 2.0. Jeszcze trudniej jest przedstawić 

zarówno nowe, jak i istniejące już w poprzednich wer-

sjach elementy środowiska, tak aby zarówno doświad-

czeni programiści jak i osoby stawiające pierwsze kro-

ki  mogły  czerpać  z  tego  artykułu.  Postaraliśmy  się 

przedstawić  na  prostym  przykładzie  w  miarę  szero-

ki wachlarz możliwości ASP.NET 2.0. Zapraszamy do 

podróży – nasz cel to poznanie podstawowych funkcji 

ASP.NET 2.0 i narzędzi firmy Microsoft wspierających 

proces tworzenia aplikacji w tym środowisku.

Narzędzia

Zanim  rozpoczniemy  naszą  podróż  warto  się  do  niej 

odpowiednio  przygotować,  kolekcjonując  odpowied-

ni ekwipunek. Jak wiadomo, co do sprzętu i narzędzi 

opinii jest tyle, ilu jest ekspertów. Na początek propo-

nujemy sprawdzony duet: Visual Web Developer 2005 
Express  Edition
  oraz  SQL  Server  2005  Express  Edi-
tion
.  Dlaczego?  Przede  wszystkim  dlatego,  że  opro-

gramowanie to możemy nieodpłatnie pobrać ze strony 

Microsoft. Także dlatego, że wersje te posiadają niemal 

wszystkie funkcje potrzebne do rozwoju aplikacji inter-

netowych. Są wręcz przygotowane z myślą o osobie, 

która  dopiero  rozpoczyna  przygodę  z  ASP.NET.  Śro-

dowisko IDE pozwalające programiście w sposób łatwy 

i przyjemny tworzyć aplikacje jest jednym z wielu powo-

dów, dla jakich początkujący deweloperzy decydują się 

na wybór platformy .NET jako podstawy do dalszej na-

uki. Pod tym względem środowisko IDE Visual Web De-
veloper
 nie odstępuje o wiele bardziej rozbudowanym, 

ale dostępnym odpłatnie wersjom Visual Studio:

•   Zawiera graficzny interfejs, który umożliwia tworze-

nie interfejsu użytkownika przy pomocy „drag-and-
drop
”.

•   Zastosowano  w  nim  usprawnioną  technologię 

IntelliSense, która podpowiada programiście skład-

nię podczas tworzenia kodu. Mechanizm ten został 

udoskonalony – w porównaniu z poprzednią wersją 

produkt. Podpowiadanie działa nie tylko wtedy, gdy 

kod aplikacji tworzony jest w osobnym pliku, ale tak-

że gdy jest on wymieszany wraz z kodem odpowie-

dzialnym za wizualną część strony internetowej. Co 

więcej,  IntelliSense  wspomaga  programistę  także 

w tworzeniu tagów HTML, czy nawet w skryptów Ja-
vaScript
.

•   Wraz z platformą ASP.NET dostarczany jest boga-

ty zestaw kontrolek, przydatnych szczególnie przy 

tworzeniu konwencjonalnych rozwiązań, takich jak: 

typowe serwisy, strony internetowe czy standardo-

we metody uwierzytelniania. Znajdziemy też kom-

ponenty  usprawniające  proces  przeprowadzania 

operacji związanych z pobieraniem danych z wszel-

kich źródeł, takich jak bazy danych, pliki XML, itp.

•   W rozwiązanie wbudowany jest również samodziel-

ny  serwer  HTTP  o  ograniczonej  funkcjonalności, 

dzięki  czemu  tworzenie  oprogramowania  jest  ła-

twiejsze.

Jeśli  poważnie  myślisz  o  rozwoju  aplikacji  .NET  pole-

cam  jednak  pełną  wersję  środowiska  IDE,  używane-

go do rozwoju komercyjnych rozwiązań. Podczas two-

rzenia aplikacji internetowych często korzysta się z ba-

zy  danych.  Dlatego  kolejnym  narzędziem  przydatnym 

w  naszej  podróży  z  ASP.NET  jest  SQL  Server  2005 
Express  Edition
.  Wybór  był  oczywisty  –  SQL  Server 

Autor pracuje na stanowisku – projektant oprogramowa-
nia w firmie Silicon & Software Systems Polska. Z za-
interesowaniem przygląda się rozwojowi technologii IT, 
dawno już straciwszy nadzieję, że jest w stanie ogarnąć 
tę dziedzinę wiedzy.
Kontakt z autorem stefan.turalski@gmail.com

Rysunek 1. 

Okno Solution Explorer

Plik konfiguracyjny Web.config

Plik  Web.config  jest  plikiem  konfiguracyjnym  aplikacji 
w  formacie  XML.  Pozwala  on  modyfikować  zachowa-
nie aplikacji w takich aspektach jak: bezpieczeństwo, za-
rządzanie pamięcią, czy też tryb kompilacji oraz wiele in-
nych ustawień dotyczących elementów działania aplika-
cji webowej. Ustawienia modyfikujemy dodając do ele-
mentu 

<configuration><system.web>

 odpowiednie po-

delementy  np. 

<trace  enabled=„true”/>

.  Lista  ele-

mentów  jakie  może  zawierać  Web.con  fig  znajduje  się 
w  pliku  Web.config.comments  w  katalogu  C:\Windows\
Microsoft.NET\Framework\WersjaFramework\Config

background image

15

www.sdjournal.org

Software Developer’s Journal Extra!   20

2005 Express Edition posiada bowiem wiele funkcji silnie zintegro-

wanych ze środowiskiem .NET, jest dostępny nieodpłatnie i stan-

dardowo dołączony do pakietu instalacyjnego Visual Web Develo-
per
SQL Server 2005 Express Edition to także pełnowartościowy 

silnik bazy danych SQL Server 2005. Mimo pewnych ograniczeń, 

które stają się istotne dopiero przy wdrażaniu komercyjnych apli-

kacji, doskonale sprawdza się w warunkach deweloperskich.

Przygodę czas zacząć

Najtrudniej  będzie  nam  rozpocząć  podróż.  Część  z  Was  być 

może  jeszcze  nie  miała  doświadczenia  w  budowaniu  aplikacji 

webowych. Może tworzyliście rozwiązania w ASP lub w oparciu 

o PHP i z zainteresowaniem przypatrujecie się rozwojowi kon-

kurencyjnego środowiska. A może doskonale znacie rozwiąza-

nia ze świata J2EE lub programowaliście w ASP.NET 1.1 i inte-

resują Was tylko zmiany wprowadzone w nowej wersji? Jakakol-

wiek będzie Wasza odpowiedź, wędrówkę najlepiej będzie roz-

począć od początku, czyli od samych podstaw tworzenia aplika-

cji webowych w technologii ASP 2.0. Trasa będzie jednak na ty-

le urozmaicona, że mam nadzieję, że osoby sprawnie posługu-

jące się ASP.NET 1.* także znajdą w tym artykule coś dla siebie. 

Doświadczonych  programistów  rozwiązań  webowych  prosimy 

jednak o wyrozumiałość. Aby artykuł ten był ogólnie przystępny 

i  zrozumiały,  zastosowano  w  nim  wiele  uogólnień  czy  też 

uproszczeń.  Sugerowane  rozwiązania  mogą  być  zalecane 

głównie  przy  tworzeniu  niewielkich  serwisów  informacyjnych 

lub wręcz nie zalecane, np. jawne podanie hasła w Connection-
String
 w pliku konfiguracyjnym, który powinien być odpowiednio 

zaszyfrowany i niedostępny dla postronnych użytkowników.

Jak działają aplikacje internetowe?

Aplikacje  webowe  funkcjonują  dzięki  współpracy  i  komunikacji 

pomiędzy serwerem webowym (HTTP) oraz przeglądarką klien-

ta.  Wymiana  danych  odbywa  się  przy  użyciu  protokołu  HTTP, 

a  sam  mechanizm  komunikacji  jest  prosty  i  oferuje  zestaw  ko-

mend, z których najistotniejsze to 

HEAD

GET

 i 

POST

. Serwer webo-

wy nasłuchuje na żądania najczęściej na porcie TCP 80. Gdy ser-

wer otrzyma żądanie typu 

HEAD

, po odpowiednim przygotowaniu, 

klientowi zostaną odesłane informacje o udostępnionym pod da-

nym adresem URI dokumencie. Otrzymanie przez serwer żąda-

nia  typu 

GET

  spowoduje  odesłanie  oprócz  informacji  zawierają-

cych opis dokumentu także jego zawartość, natomiast polecenie 

POST

 uruchamia proces, który przetwarza informacje dostarczone 

przez klienta do serwera, a następnie odsyła odpowiedź. Doku-

ment przesyłany do przeglądarki to najczęściej: strumień znaków 

składających się na plik HTML, dane w formacie XML, zawartość 

multimedialna taka jak pliki graficzne, animacje, słowem wszystko 

z czego zbudowany jest dzisiejszy Internet. W przeszłości serwi-

sy internetowe złożone były głównie ze statycznych stron HTML. 

Znacznie ograniczało to ich funkcjonalność, a zarządzanie tego 

typu witryną, w miarę jej rozwoju, stawało się bardzo pracochłon-

nym zadaniem. W związku z tym pojawiało się wiele rozwiązań 

pozwalających  na  dynamiczne  generowanie  stron  HTML.  Jed-

nym z tych rozwiązań jest technologia Active Server Pages (ASP) 

oraz oczywiście jej następca – ASP.NET. Być może znasz już in-

ne platformy pozwalające na tworzenie dynamicznych serwisów 

i  zarządzanie  nimi  w  łatwy  i  przyjemny  sposób.  Postaramy  się 

jednak zaprezentować, w czym ASP.NET jest lepszy. 

Musimy zdać sobie sprawę z tego, że ASP.NET jest swoistym 

rozszerzeniem zwykłego serwera HTTP. Gdy serwer otrzyma żą-

danie  przetwarzania  strony,  która  jest  uruchamiana  w  środowi-

sku ASP.NET, silnik ASP.NET wywołuje specjalną metodę Pro-
cessRequest
 interfejsu IHttpHandler. Metoda ta dynamicznie two-

rzy specjalną klasę służącą do obsługi żądania pliku aspx. Auto-

matycznie jest ustanawiany cały kontekst wywołania HTTP oraz 

tworzone  są  obiekty  Request  i  Response  służące  jako  wejście 

i wyjście w komunikacji środowiska ze światem. Środowisko przy-

gotowuje również drzewo kontrolek, które są zadeklarowane we-

wnątrz plików stron ASP.NET (aspx). Następnie kolejno, w zależ-

ności od typu żądania, wczytywana i odpowiednio interpretowana 

jest zawartość strony. To właśnie dzięki temu, że praktycznie każ-

de odwołanie się do serwera może spowodować wygenerowanie 

nowej, zmodyfikowanej strony, środowiska typu ASP.NET są dziś 

tak  powszechnie  stosowane  przy  tworzeniu  zaawansowanych 

rozwiązań internetowych. Każda kontrolka może być odpowied-

nio modyfikowana w czasie działania aplikacji. Dane pochodzące 

od klienta mogą być odpowiednio przetwarzane po stronie ser-

wera np. mogą wpływać na proces przetwarzania i wyświetlania 

strony. Proces przetwarzania po stronie serwera umożliwia bar-

dzo łatwą integrację ze źródłami danych i warstwą logiki bizneso-

wej. A przy tym budowanie dynamicznych stron jest stosunkowo 

łatwe, dzięki wspomnianym już narzędziom. Jak wykorzystać po-

tencjał tego środowiska postaramy się zaprezentować na poniżej 

zaprezentowanym przykładzie.

Zarządzanie kodem

Visual  Web  Developer  pozwala  Ci  wybrać  jeden  z  dwóch  mode-
li zarządzania kodem. Pierwszy model zakłada, że cały kod: HTML 
i funkcje wywoływane po stronie serwera znajdują się w tym samym 
pliku. W odróżnieniu od ASP.NET 1.1 wersja 2.0 dostarcza pełnego 
wsparcia dla takiego rozwiązania. Możemy także wybrać opcję roz-
dzielenia kodu. Wtedy oprócz pliku .aspx, zostanie utworzony do-
datkowo powiązany z nim plik .cs lub vb. Jest to rozwiązanie zale-
cane głównie ze względu na czytelność kodu.

Rysunek 2. 

WelcomePage.aspx w widoku Source i Design

Rysunek 3. 

Web Form AddAlbum.aspx po dodaniu kontrolek

background image

16

ASP.NET Starter Kit

www.sdjournal.org

Software Developer’s Journal Extra!   20

Tworzymy aplikację w ASP.NET 2.0

Aby utworzyć nowy projekt należy z menu File->New Web Site 

wybrać opcję ‘Empty Web Site’ oraz podać nazwę projektu – w na-

szym przypadku WebSitePhotoAlbums. Postaramy się zbudować 

prosty webowy serwis służący do prezentowania albumów zdjęć.

Podczas tworzenia projektu mamy możliwość dokonania wy-

boru języka programowania. Zamieszczone w tym artykule frag-

menty kodu są stworzone w języku C#. Choć jeśli znasz Visual 
Basic.NET
 nic nie stoi na przeszkodzie, abyś wybrał tę opcję. Du-

żą zaletą środowiska .NET jest fakt, że sposób podejścia do roz-

woju aplikacji ASP.NET jest prawie niezależny od języka progra-

mowania. Im lepiej poznasz samą platformę .NET tym szybciej 

zorientujesz się, że wszystkie języki programowania, są wykony-

wane przez wspólny silnik – Common Language Runtime (CLR)

Kontynuując  konfigurowanie  nowego  projektu  lokację  po-

zostawimy  bez  zmian  (File  System).  Szczegółowe  informacje 

o tym, jakie możliwości stwarza, a jakie odbiera wybranie takiej 

lokacji, zawiera artykuł pod tytułem: „Możliwości umiejscowie-

nia Web Applications oferowane przez Visual Studio 2005”.

Pusta  aplikacja  internetowa  została  utworzona.  Pliki  wcho-

dzące w skład projektu można zawsze obejrzeć w oknie Solution 
Explorer
. Jeśli twoje środowisko jest skonfigurowane tak, że okno 

to nie jest widoczne, można je uruchomić korzystając z opcji me-

nu View->Solution Explorer. Narzędzie to, nie tylko prezentują-

ce w widoku drzewa pliki wchodzące w skład naszej aplikacji, ale 

także pozwalajala na zarządzanie nimi poprzez m.in. dodawa-

nie nowych elementów, zmianę ich nazwy, czy też przenoszenie 

ich w obrębie projektu. Należy zwrócić uwagę na fakt, że w skład 

aplikacji mogą wchodzić różne typy plików: począwszy od cha-

rakterystycznych dla stron ASP.NET plików o rozszerzeniu aspx

plików cs czy vb zawierających kod źródłowy poprzez pliki z ko-

dem HTML, pliki graficzne, arkusze styli CSS, pliki XML zawiera-

jące dane konfiguracyjne i wiele, wiele innych. 

Załóżmy, że posiadamy już stronę HTML, którą chcielibyśmy 

dołączyć do tworzonej aplikacji ASP.NET 2.0. Możemy to zrobić, 

klikając prawym klawiszem myszki WebSitePhotoAlbums w So-
lution Explorer
 i wybierając z menu ‘Add Exiting Item…’ Następ-

nie  wskazujemy  ścieżkę  do  pliku  HTML,  który  automatycznie 

zostanie dołączony do projektu. Pozostaje nam tylko dodać pli-

ki graficzne. Obrazy dodajemy do projektu tak samo jak wszyst-

kie inne pliki. Aby jednak zachować pewien porządek, środowi-

sko umożliwia nam tworzenie w ramach projektu struktury kata-

logów. Zakładamy zatem nowy folder o nazwie „graph”, w którym 

przechowywać będziemy pliki graficzne. Aby dodać nowy folder 

do  projektu,  z  menu  kontekstowego  WebSitePhotoAlbums  wy-

bieramy opcję ‘New Folder’. Gdy już utworzyliśmy katalog, mo-

żemy  dodać  do  niego  odpowiednie  pliki.  Po  zakończeniu  ope-

racji, widok w oknie Solution Explorer powinien prezentować się 

mniej więcej tak, jak na Rysunku 1.

Możemy teraz podejrzeć, jak wygląda nasza strona. Aby uru-

chomić  projekt,  wybieramy  opcję  menu  „Debug->Start  Debug-
ging
”. Środowisko zareaguje pytaniem, czy stworzyć nowy plik 

konfiguracyjny na potrzeby naszej aplikacji, czy wolimy urucho-

mić  aplikację  bez  funkcji  debuggowania.  My  wybieramy  opcję 

Add a new Web.config file’ i w oknie przeglądarki możemy oglą-

dać nasze dzieło. Nic imponującego? Faktycznie, mimo iż Visu-
al  Web  Developer
  udostępnia  funkcjonalność  związaną  z  two-

rzeniem tradycyjnych stron, taką jak kolorowanie składni czy for-

matowanie kodu, to szkoda nie wykorzystać pełni możliwości te-

go środowiska IDE, ograniczając się jedynie do tworzenia stron 

HTML. Dodajmy zatem do projektu prawdziwą stronę ASP.NET. 

Klikamy prawym klawiszem WebSitePhotoAlbums i korzystamy 

z funkcji ‘Add New Item…’. W pojawiającym się oknie wybiera-

my ‘Web Form’ i podajmy nazwę pliku „WelcomePage.aspx”. Po-

nownie będziemy mogli wybrać język programowania. Będziemy 

mogli także zadecydować, czy chcemy aby kod został umiesz-

czony w osobnym pliku. Ze względu na to, że przykład zawiera 

niewielką ilość kodu, opcję ‘Place code in separate file’ pozosta-

wiamy niezaznaczoną. Na razie nie wybieramy także opcji ‘Se-
lect Master Page’ – do 
czego ona służy, dowiemy się w ramce 

Zarządzanie kode”.

Nowo utworzona strona pojawi się w oknie Solution Explorer

Poprzez dwukrotne kliknięcie otwieramy ją w głównym oknie śro-

dowiska IDE. Strona jest pusta, istnieje wiele sposobów na wy-

pełnienie jej treścią. Wykonać to zadanie możemy edytując za-

wartość strony w domyślnym widoku, jakim jest Source. Wówczas 

modyfikujemy zawartość strony, tak jak zawartość zwykłego pliku 

Listing 1. 

Obsługa zdarzenia oraz pobranie pliku 

graficznego

protected

 

void

 

ButtonAddPhoto_Click

(

object

 

sender

,

     

EventArgs

 

e

{

   

string

 

newfilename

=

""

;

   

if

 

(

FileUpload

.

HasFile

)

 

{

      

try 

{

         

string

 

fileextention

 

=

 

         

FileUpload

.

FileName

.

Substring

(

             

FileUpload

.

FileName

.

LastIndexOf

(

'.'

)

4

);

         

newfilename

 

=

 

System

.

Guid

.

NewGuid

()

.

ToString

()+

                      

fileextention

;

         

FileUpload

.

SaveAs

(

System

.

Configuration

.

             

ConfigurationManager

.

AppSettings

[

             

"PhotoResources"

]

.

ToString

()+

"

      

}

      

catch

 

(

Exception

 

ex

)

 

{

         

LabelInfo

.

Text

 

=

 

"Wystapil blad podczas 

              zapisywania pliku "

 

+

 

ex

.

Message

;

      

}

         

LabelInfo

.

Text

 

=

 

"Obrazek pobrano i zapisano 

              na serwerze"

;

         

ViewState

.

Add

(

"Filename"

newfilename

);

 

         

ImageCover

.

ImageUrl

 

=

 "

   

}

 

else

 

{

      

LabelInfo

.

Text

 

=

 

"Wskaz lokalizacje obrazka"

;

   

}

}

Layout

Po upuszczeniu kontrolki zostanie ona przesunięta tak, by jej poło-
żenie było dopasowane do położenia poprzedniej kontrolki lub le-
wego górnego brzegu strony. Taki layout nazywa się ‘flow’ i jest do-
myślnym sposobem rozmieszczenia elementów na stronie. Jednak 
jeśli chcemy, aby po upuszczeniu kontrolka znajdowała się dokład-
nie w miejscu, w którym ją położyliśmy, możemy zmienić wartość 
własności layout na absolute. W menu Layout->Position->Auto po-
sition Options
… należy wybrać opcję ‘Absolutely positioned’.

background image

17

www.sdjournal.org

Software Developer’s Journal Extra!   20

HTML w dowolnym edytorze. Możemy także skopiować fragment 

dokumentu HTML czy nawet treści pochodzącej z innej aplika-

cji np. programu Microsoft Word, zmienić widok na Design i wkle-

ić zawartość schowka na stronę. Dodatkowo trzeba także zacho-

wać szczególną ostrożność przy linkach oraz obrazkach.

Aby  strona  WelcomePage.aspx  była  uruchamiana  jako 

pierwsza  strona  naszego  serwisu,  w  jej  menu  kontekstowym 

wybieramy opcję ‘Set As Start Page’. I tak oto powstał zalążek 

pierwszego  serwisu  internetowego.  Jednak  aby  stworzyć  taki 

serwis, wystarczy przecież zwykły edytor HTML, więc aby wy-

jaśnić zaletę wykorzystania ASP.NET będziemy musieli zapre-

zentować kilka bardziej zaawansowanych elementów platformy.

Kontrolki

Jedną z zalet, która sprawia, że pisanie aplikacji w ASP.NET jest 

tak  szybkie,  jest  zestaw  kilkudziesięciu  kontrolek  gotowych  do 

użycia na naszych stronach WWW. Kontrolki, które są przetwa-

rzane po stronie serwera HTTP możemy podzielić na dwie gru-

py. Są to kontrolki HTMLServer controls, czyli dobrze znane języ-

ka HTML tagi: buttontextradioselect i inne oraz kontrolki Web 
Server controls
 – czyli charakterystyczne dla ASP.NET kontrolki, 

posiadające funkcje renderujące je do kodu HTML

Oczywiście jeśli chcesz, możesz nadal bezpośrednio w kor-

dzie używać kontrolek HTML, do których jesteś zapewne przy-

zwyczajony.  Ale  warto  skorzystać  z  kontrolek  Web  Server,  po-

nieważ mają one dużo większą funkcjonalność. Zawierają mię-

dzy innymi możliwość konfigurowania własności (j.ang. Proper-
ties
)  które  pozwalają  nam  zarządzać  wyglądem,  zawartością 

i stanem kontrolki. Każda kontrolka posiada tzw.handlery repre-

zentujące charakterystyczne dla danej kontrolki zdarzenia (j.ang. 
Events), które pozwalają nam określić zachowanie kontrolki w in-

terakcji z użytkownikiem. Dysponują także mechanizmem poma-

gające zarządzać stanem kontrolki (j.ang. ViewState).

Aby dodać nową kontrolkę do strony, wystarczy wybrać od-

powiedni symbol z listy dostępnej w oknie Toolbox a następnie 

przeciągnąć ją na Web Form (można to zrobić zarówno w wi-

doku Design jak i Source). Bardziej szczegółowe informacje za-

wiera artykuł „Kontrolki serwerowe dostępne w ASP.NET”.

Otwórzmy nowy Web Form o nazwie „AddAlbum” i przejdź-

my do prezentacji strony w widoku Design. Aby ułatwić rozmiesz-

czanie  kontrolek,  najpierw  umieszczamy  na  formularzu  tabelę

o 6 wierszach i 3 kolumnach (Layout->Insert Table ). A następ-

nie w odpowiednie miejsca (patrz Rysunek 3) przeciągamy na 

formularz kilka kontrolek, które umożliwią użytkownikowi poda-

nie podstawowych informacji o albumie: TextBox(x3), Label(x1), 
Image(x1), FileUpload(x1), Button (x2).

Jak widzimy na Rysunku 3, po prawej stronie okna znajdu-

je  się  narzędzie  Properties  umożliwiające  nam  zmianę  własno-

ści kontrolek. Skoro już dodaliśmy kontrolki, wykorzystajmy teraz 

ich możliwości. Na formularzu znajduje się kontrolka FileUpload

Ma ona bardzo podobną funkcjonalność uzyskana poprzez frag-

ment kodu HTML 

<input type="file">

, którą być może już dobrze 

znacie. Gdy użytkownik kliknie przycisk [Browse] podczas prze-

glądania strony, uruchomi dialog umożliwiający mu wskazanie lo-

kacji pliku na dysku. Po kliknięciu OK wybrana ścieżka pojawi się 

w polu tekstowym kontrolki. Obok kontrolki FileUpload znajduje 

się Button, a poniżej kontrolka Image. Chcemy, aby po kliknięciu 

przycisku [Dodaj Album], wskazany za pośrednictwem kontrolki 
FileUpload obrazek został przesłany do serwera, a następnie wy-

świetlony w kontrolce Image. Musimy zatem podpiąć odpowiednią 

funkcję  pod  zdarzenie  kliknięcia  przycisku 

ButtonAddPhoto

.  Jest 

kilka sposobów, aby to zrobić. Możemy np. zaznaczyć przycisk, 

a  następnie  w  oknie  Properties  kliknąć  symbol  błyskawicy. 

W miejsce listy własności kontrolki pojawi się lista zdarzeń. My wy-

bieramy zdarzenie Click, poprzez dwukrotne kliknięcie pola obok 

nazwy zdarzenia. Automatycznie zostaniemy przeniesieni do wi-

doku Source, w którym czekać na nas będzie już przygotowany 

szkielet funkcji. Uzupełnimy ją kodem zgodnie z Listingiem 1.

Powyższa  funkcja  pobiera  wskazaną  przez  użytkownika 

ścieżkę do pliku graficznego, który zawiera okładkę albumu. Dla 

uproszczenia  zakładamy,  że  to  rzeczywiście  jest  plik  graficz-

ny. Aby nazwy plików nie kolidowały ze sobą, za pomocą kla-

sy System.GUID generowany jest unikalny klucz, który będzie 

nową nazwą pliku. Następnie plik jest pobierany i zapisywany 

w folderze „Photo” na serwerze. Adres do miejsca na serwerze, 

w którym chcemy zapisywać pliki jest pobierany z pliku konfigu-

racyjnego Web.config. Dlatego w pliku tym dodano element:

<appSettings>
<add key="PhotoResources" value="C:\Documents and Settings\
     Developer\My Documents\Visual Studio 2005\WebSites\
     WebSitePhoto\"/>
</appSettings>

Na  zakończenie  funkcja  zapamiętuje  nazwę  zapisywane-

go pliku w ViewState i wyświetla zawartość pliku graficznego 

w kontrolce ImageCover.

Master Pages

Stworzona do tej pory niewielka kolekcja formularzy, sprawia 

raczej  wrażenie  chaotycznego  zbioru  niż  aplikacji  webowej. 

Aby to zmienić, proponujemy wykorzystać kilka dodatkowych 

elementów i funkcjonalności specyficznych dla ASP.NET 2.0.

Serwisy internetowe składają się najczęściej nie z kilku ani 

kilkudziesięciu, ale wręcz z setek podstron. I tu projektant in-

terfejsu  użytkownika  napotyka  wiele  problemów.  Jednym 

z  głównych  wyzwań  jest  zapewnienie  spójności  w  obszarze 

układu (struktury) strony. Twórcy środowiska ASP.NET opra-

cowali dedykowane do tego problemu rozwiązanie. ASP.NET 

2.0  wprowadza  nowy  mechanizm  –  tzw.  Master  Pages
Master page jest szablonem, definiującym ogólny wygląd stro-

ny w obszarach wspólnych dla wszystkich podstron. Dodatko-

wo Master Page wyznacza regiony (j.ang. containers), w któ-

rych umieszczona zostanie zawartość stron podrzędnych. Tak 

więc efekt końcowy jest jakby złożeniem podstrony z zawarto-

ścią zdefiniowaną w stronie podrzędnej.

ViewState

ViewState jest jednym z mechanizmów pozwalających przechowy-
wać informacje zawarte na stronie. Jeśli własność EnableViewState 
dla kontrolki jest ustawiona na true, jej stan czyli np. tekst który wpi-
saliśmy do pola TextBox nie znika po zajściu zdarzenia postback – 
czyli odesłaniu treści strony do serwera. Należy jednak pamiętać, 
że dla każdej kontrolki obiekt ViewState musi dokonać odpowied-
niego ukrytego zapisu informacji, co może znacznie zwiększyć ilość 
przesyłanych  danych.  ViewState  działa  nie  tylko  dla  kontrolek  ale 
i dla całej strony. Możemy wykorzystać go także do zapisu informa-
cji w postaci pary – klucza i skojarzonej z nim wartości.

background image

18

ASP.NET Starter Kit

www.sdjournal.org

Software Developer’s Journal Extra!   20

Jak pozostałe elementy, Master Page dodajemy do aplikacji 

korzystając z menu ‘Add New Item’Master Page edytuje się jak 

zwykły plik html, tak więc tworzenie go nie powinno przysporzyć 

Wam  trudności.  Trzeba  tylko  pamiętać,  aby  odpowiednio  wy-

brać miejsce dla elementu ContentPlaceHolder – to w tym miej-

scu pojawiać się będzie zawartość stron podrzędnych względem 
Master Page. Jak już się pewnie domyślacie, aby stworzyć stro-

nę  podrzędną  wystarczy  dodając  nowy  Web  Form  zaznaczyć 

opcję  ‘Select  Master  Page’  i  wskazać  odpowiedni  plik.  Jednak 

ponieważ nasz serwis zawiera już strony, chcielibyśmy je także 

uwzględnić podczas wykorzystywania mechanizmów Master Pa-
ge
. Jest to zadanie nieco trudniejsze, aczkolwiek nie niewykonal-

ne. Jako przykład weźmy plik „WelcomePage.aspx”. Po pierwsze 

musimy dodać w dyrektywie Page odpowiednia deklarację:

<%@ Page Language="C#"  MasterPageFile="~/MasterPage.master"%>

Dodatkowy warunek to taki, że Content file nie może zawierać 

takich elementów html jak: 

<html>

<body>,

 

<form>

 , a treść, którą 

chcemy wyświetlić, powinna zawierać się w elemencie 

<asp:Con-

tent>. 

Zatem najlepiej jest wyciąć właściwy fragment kodu, usu-

wając  całą  resztę  zbytecznych  elementów  HTML.  A  następnie 

dodać  element 

<asp:Content>

  z  odpowiednio  ustawionym  atry-

butem 

ContentPlaceHolderID

 (nazwa powinna być taka sama, jak 

nazwa odpowiedniego ContentPlaceHolder w pliku MasterPage).

Po przekształceniu na Content file, plik WelcomePage.aspx wy-

gląda jak na Listingu 2.

Theme i skin

Wykorzystanie  Master  Pages  nie  jest  jedynym  mechani-

zmem  ułatwiającym  developerowi  zachowanie  spójnego  tzw. 

Look&Feel” aplikacji. Aby ułatwić zarządzanie układem strony 

oraz jej szatą graficzną w ASP.NET 2.0 wprowadzono dwa nowe 

mechanizmy: Themes i Skins. Na temat, bo tak pozwolę sobie 

przetłumaczyć Theme, składać się mogą arkusze styli, obrazki, 
XSLT lub też skinsSkin to specjalny rodzaj arkusza stylów dedy-

kowany do formatowania wyglądu kontrolek serwerowych. Funk-

cjonalność powyższych mechanizmów najłatwiej będzie zrozu-

mieć, obserwując je w działaniu.

Aby  stworzyć  nowy  temat  w  Solution  Explorer  zaznacza-

my  korzeń  strony  i  wybieramy  ‘Add  ASP.NET  Folde’r->|Theme

W  ten  sposób  do  projektu  zostanie  dodany  folder  App_Theme 

wraz z przykładowym, ale pustym tematem. Zmieńmy jego na-

zwę na „Szaruga”. Temat, jak już wspomniano, może składać się 

z różnych typów plików. Na początek dodajmy do naszego tema-

tu zwykły i dobrze znany arkusz styli (j.ang. Style Sheet). Nie bę-

dziemy tłumaczyli, co można wpisać do arkuszów styli, ponieważ 

zakładamy, że już nieraz je tworzyliście. Dodawanie nowych sty-

li dla poszczególnych tagów oraz klas nie różni się niczym od two-

rzenia CSS formatującego zwykłe pliki HTML. Z tą małą różnicą, 

że w skład Visual Web Developer wchodzi narzędzie Style Builder

które może ułatwić definiowanie styli. Ale oczywiście programista 

nadal może wpisywać selektory bez pomocy kreatora lub też do-

dać do swojego projektu plik CSS stworzony w innym narzędziu.

Oprócz  arkusza  styli,  do  naszego  tematu  „Szaruga”  do-

damy także Skin File (‘Add New Item…’ -> Skin file). Skin file 

tworzy się prawie identycznie jak arkusz styli. Pozwala on jed-

nak na formatowanie kontrolek serwera (takich jak np. Label
GridView czy Calendar), dlatego lista właściwości wchodzących 

w skład stylu jest znacznie szersza i zależy od typu kontrolki.

I tak oto temat został stworzony. Teraz wystarczy tylko za-

deklarować jego użycie na stronie. Można to zrobić na kilka 

sposobów, w zależności od tego czy chcemy zastosować te-

mat do całej aplikacji, czy tylko do wybranych stron. My za-

stosujemy wariant pierwszy. Aby podpiąć temat pod wszystkie 

strony dodajemy odpowiedni element do pliku Web.config:

<pages theme="Szaruga" styleSheetTheme="Szaruga"/>

Po  dokonaniu  powyższych  operacji  wszystkie  strony  wcho-

dzące w skład aplikacji powinny zostać sformatowane.

Zastosowanie tematów ułatwia także personalizację apli-

kacji webowych, czyli zmianę wyglądu aplikacji w zależności 

od preferencji użytkownika. W takich sytuacjach twórca apli-

kacji tworzy kilka tematów, aby dać użytkownikowi możliwość 

wyboru. Ale to już wykracza poza temat tego artykułu.

Nawigacja

Mimo, iż w zakres naszego serwisu wchodzi już całkiem pokaź-

ny zbiór elementów, nadal nie tworzą one spójnej całości. Bra-

kuje bowiem funkcjonalności, która umożliwiałaby nam swobod-

ne poruszanie się między stronami. Przy użyciu kilku elementów 

wchodzących w skład ASP.NET 2.0 możemy szybko umożliwić 

sprawną nawigację po stronie. Zaczynamy od dodania do pro-

jektu nowego elementu Site MapSite Map jest to plik XML o roz-

szerzeniu sitemap przechowujący, jak sama nazwa mówi, mapę 

strony. Każda strona, do której chcemy umożliwić nawigację, jest 

reprezentowana  w  postaci  elementu 

<siteMapNode>

.  Zawartość 

naszego pliku Web.sitemap jest zaprezentowana na Listingu 4.

Gdy stworzyliśmy już mapę strony, pozostało nam tylko udo-

stępnienie elementu prezentującego tą mapę. Element ten pro-

ponuję dodać do Master Page, tak aby nawigacja była dostępna 

Listing 3. 

Przykładowy fragment pliku skin

<

asp

:

button

 

runat

=

"server"

 

BackColor

=

"#6D7894"

 

     

Font

-

Bold

=

"True"

 

ForeColor

=

"White"

/

>

<

asp

:

GridView

 

runat

=

"server"

 

GridLines

=

"Horizontal"

 

     

BorderColor

=

"#6d7894"

 

BorderStyle

=

"Double"

 

     

BorderWidth

=

"3px"

 

CellSpacing

=

"1"

 

ForeColor

=

"DimGray"

>

<

RowStyle

 

BackColor

=

"#F5F7FC"

 

ForeColor

=

"#483D64"

 

     

BorderColor

=

Gray

 

BorderStyle

=

Solid

 

BorderWidth

=

5

px

 /

>

   

<

HeaderStyle

 

BackColor

=

"#6D7894"

 

Font

-

Bold

=

"True"

       

 

ForeColor

=

"White"

 /

>

<

/

asp

:

GridView

>

Listing 2. 

Przykładowy ContentPlaceHolder

<

script

 

runat

=

"server"

>

(

)

<

/

script

>

<

asp

:

Content

 

ID

=

"Content1"

 

runat

=

"server"

 

     

ContentPlaceHolderID

=

"ContentPlaceHolder"

>

    

<

div

>

<

p

 

align

=

"center"

 

style

=

"text-align: center; 

   font-family: Arial"

>

Witajcie

 

mi

ł

o

ś

nicy

 

fotografii

.

       

(

)

<

/

p

><

/

div

><

/

asp

:

Content

>

background image

19

www.sdjournal.org

Software Developer’s Journal Extra!   20

na każdej podstronie. Gdy na formularzu Master Page umieści-

my element TreeView, automatycznie otworzy się okienko ‘Tre-
eView Tasks’
. Z listy ‘Choose Data Source’ wybieramy opcję ‘New 
Data’
,  a  na  pojawiającym  się  oknie  ‘Data  Source  Configuration 
Wizard’
 opcję ‘Site Map’. Po czym zatwierdzamy wybór. Utworzo-

na przez nas mapa strony zostanie automatycznie wyszukana 

i podpięta pod TreeView. Aż trudno uwierzyć, że to takie proste.

Zachęcam  do  klikania  niepozornie  wyglądających  małych 

czarnych strzałek przy kontrolkach. Zawierają one wiele intere-

sujących kreatorów, takich jak np. ‘Auto Format…’ który umożliwia 

wybór jednego z kilkunastu szablonów formatowania kontrolki.

Wstęp do ADO.NET

Korzystając z zaprezentowanych do tej pory elementów skła-

dających się na ASP.NET 2.0 można stworzyć serwis interne-

towy o bogatej funkcjonalności. Jednak na zakończenie chcie-

libyśmy  jeszcze  pokazać,  jaki  dodatkowy  potencjał  stwarza 

wykorzystanie w aplikacji bazy danych.

Na początku musimy stworzyć bazę, korzystając przy tym 

rzecz  jasna  z  SQL  Server  Express  Edition.  Jak  wspominali-

śmy  SQL  Express  jest  silnie  zintegrowany  z  aplikacją  Visu-
al Web Developer
. Środowisko IDE będziemy wykorzystywali 

do wykonywania wszystkich podstawowych operacji na bazie 

danych. Aby stworzyć nową bazę, dodajemy do projektu fol-

der App_Data (menu ‘Add ASP.NET Folder’). Folder ten poja-

wi się w oknie Solution Explorer. W jego menu kontekstowym 

znajduje się opcja ‘Add New Item’, wybieramy SQL Database 

i wpisujemy nazwę bazy „dbAlbums.mdf”

Ponieważ obsługa baz danych leży poza obszarem tego ar-

tykułu, pominiemy etap dodawania do bazy tabel i wypełniania 

ich danymi. Podpowiemy tylko, że we wszelkich operacjach wy-

konywanych  na  bazie  danych  pomocne  jest  narzędzie  Databa-
se Explorer
 (dostępne w menu View). Zakładamy, że mamy już 

wypełnioną  danymi  bazę  danych  dbAlbums  zawierająca  tabelę 

tblAlbum

.

Do prezentacji danych służyć nam będzie nowy Web Form 

– „TopAlbums.aspx”. Aby wyświetlić na formularzu zawartość 

tabeli 

tblAlbum

,  wystarczy  chwycić  tabelę  w  oknie  Databa-

se Explorer i przeciągnąć ją na odpowiednie miejsce w Web 
Form
. Kontrolka GridView, który pojawi się na formularzu, jest 

wierną reprezentacją danych znajdujących się w wybranej ta-

beli.  Wiadomo  jednak,  że  do  prezentacji  chcielibyśmy  wy-

brać tylko kilka kolumn. Edycji kolumn można dokonać w wi-

doku Design, jednak GridView jest kontrolką o bardzo rozbu-

dowanej funkcjonalności i do jej formatowania służy wiele roż-

nych narzędzi. Zatem tym razem zaprezentujemy, jak wyglą-

da fragment kodu w widoku Source

Na Listingu 5 widzimy przykładową konfigurację Gridview

W  zademonstrowanym  fragmencie  kodu  pominięto  formato-

wanie samego elementu GridView, ponieważ jest ono już za-

deklarowane w stworzonym uprzednio pliku skin (patrz Listing 

3).  Do  zaprezentowania  wybrano  kolumny  Title,  Author  oraz 
Cover - pole Cover zawiera nazwę pliku graficznego znajdu-

jącego się na serwerze. Atrybut 

DataImageUrlFormatString

 po-

zwala  stworzyć  adres  url  obrazka  -  wstawiając  wartość  po-

la 

DataImageUrlField

  w  miejsce 

{0}

.  Dodatkowo  dzięki  zasto-

sowaniu 

<ControlStyle  Width="80px"  />

 wczytywany obrazek 

jest proporcjonalnie skalowany.

I tak oto praktycznie bez konieczności pisania kodu, uda-

ło nam się połączyć z serwerem i zaprezentować dane z ba-

zy danych. To oczywiście tylko minimalny wycinek z tego, co 

oferuje ASP.NET 2.0 w kwestii obsługi bazy danych. W skład 

platformy wchodzi wiele mechanizmów pozwalających na do-

dawanie, edycję i usuwanie danych.

Publikujemy aplikację

W sekcji dotyczącej ekwipunku wspomniano, że  Visual Web 
Developer
 posiada wbudowany lokalny serwer HTTP (Cassini).

Jednak jest on przeznaczony tylko do wspomagania procesu 

rozwoju aplikacji Web i prędzej czy później i tak zaistnieje po-

trzeba  umieszczenia  naszej  aplikacji  na  pełnowartościowym 

serwerze HTTP. W ASP.NET rolę tą pełni IIS (Internet Infor-
mation Services
). 

O tym jak przeprowadzić poprawną konfigurację serwera 

IIS przeczytasz w artykule „ Aplikacje ASP.NET na platformie 
Internet Information Services

Podsumowanie

I  tak  oto  od  początku  do  końca  stworzyliśmy  naszą  pierw-

szą  aplikację  internetową  przy  pomocy  programu  Visual 
Web Developer
SQL Server 2005 Express Edition i środowi-

ska ASP.NET 2.0. Zadania, których się podjęliśmy nie są być 

może ambitne aczkolwiek pozwoliły nam poznać te z elemen-

tów  ASP.NET  2.0,  które  są  najważniejsze  dla  początkujące-

go programisty. Z czasem z pewnością Twój apetyt na wiedzę 

o ASP.NET będzie rósł. Mamy nadzieję, że pomoże Ci w tym 

ten numer naszego czasopisma. 

n

Listing 5. 

Konfiguracja GridView

<

asp

:

GridView

 

ID

=

"GridView1"

 

runat

=

"server"

 

     

AutoGenerateColumns

=

"False"

 

     

DataSourceID

=

"SqlDataSource1"

 

>

<

Columns

>

<

asp

:

ImageField

 

DataImageUrlField

=

"Cover"

 

     

HeaderText

=

"Okladka"

 

ReadOnly

=

"True"

 

     

NullImageUrl

=

"~/graph/DefaultCover.jpg"

 

     

DataImageUrlFormatString

=

"~/Photo/{0} "

 

>

    

<

ControlStyle

 

Width

=

"80px"

 /

>

   

<

/

asp

:

ImageField

>

   

<

asp

:

BoundField

 

DataField

=

"Title"

 

HeaderText

=

"Tytul"

 /

>

   

<

asp

:

BoundField

 

DataField

=

"Author"

 

HeaderText

=

"Autor"

 /

>

<

/

Columns

>

<

/

asp

:

GridView

>

Listing 4. 

Mapa strony Web.sitemap

<

?

xml

 

version

=

"1.0"

 

encoding

=

"utf-8"

 ?

>

<

siteMap

 

xmlns

=

"http://schemas.microsoft.com/AspNet/

     SiteMap-File-1.0"

 

>

  

<

siteMapNode

 

url

=

"Default.aspx"

 

title

=

"Strona glowna"

 

>

    

<

siteMapNode

 

url

=

"WelcomePage.aspx"

 

                 

title

=

"Strona Powitalna"

 /

>

     

<

siteMapNode

 

url

=

"AddAlbum.aspx"

 

                 

title

=

"Dodaj Album"

 /

>

    

<

siteMapNode

 

url

=

"TopGaleries.html"

 

                 

title

=

"Najlepsze Albumy"

 /

>

  

<

/

siteMapNode

><

/

siteMap

>