ASP.NET Web Forms. Kompletny przewodnik dla programistów interaktywnych aplikacji internetowych w Visual Studio

ASP.NET Web Forms. Kompletny przewodnik dla programistów interaktywnych aplikacji internetowych w Visual Studio

Autorzy: Maciej Pakulski Dawid Borycki Jacek Matulewski Maciej Grabek

Wydawnictwo: Helion

Kategorie: Informatyka

Typ: e-book

Formaty: EPUB MOBI

Ilość stron: 296

cena od: 47.20 zł



ASP.NET Web Forms - idealny wybór dla małych aplikacji!





  • Język C# w projektach ASP.NET Web Forms, czyli co musisz wiedzieć na początku


  • Bazy danych aplikacji, czyli gdzie umieścić bazę i jak korzystać z LINQ to SQL


  • Kontrolki Web Forms i CSS, czyli jak nadać stronie właściwy wygląd i zapewnić funkcjonalność




Jeszcze kilkanaście lat temu projektowanie aplikacji (nie tylko internetowych) wymagało nie lada wysiłku. Sytuacja zmieniła się dość radykalnie wraz z rozwojem technologii, która pozwala programiście budować aplikację z gotowych kontrolek. Programista ma w ten sposób do dyspozycji zestawy gotowych funkcjonalności, które można łatwo dodać do tworzonej aplikacji. Jedną z najczęściej używanych bibliotek jest ASP.NET Web Forms, która swoją popularność zawdzięcza podobieństwu do Windows Forms i równie dużej, jak w przypadku pierwowzoru łatwości stosowania. To właśnie tę bibliotekę wybierają programiści, gdy w krótkim czasie chcą stworzyć niewielkie, niezbyt skomplikowane aplikacje, jak również przy tworzeniu prototypów w większych projektach.





Ta książka zawiera wszystkie najważniejsze informacje pozwalające odkryć i wykorzystać zalety biblioteki Web Forms. Znajdziesz tu opis języka C# i programowania obiektowego w tym języku, a także dowiesz się, do czego przydaje się właściwa separacja modelu aplikacji. Odkryjesz, jak implementować usługę sieciową z użyciem technologii WCF, jak korzystać z baz danych i kaskadowych arkuszy stylów oraz do czego służy technologia AJAX. Ponadto poznasz kontrolki Web Forms, a potem zobaczysz, jak zastosować te informacje w praktyce - na przykładzie gry planszowej. Jeśli chcesz szybko i swobodnie projektować niewielkie aplikacje, musisz przeczytać tę książkę!







  • Prosta aplikacja ASP.NET Web Forms, czyli o wszystkim po trochu


  • Język C# 5.0


  • Programowanie obiektowe w C#


  • Wielkie porządki, czyli separacja modelu. Pliki XML


  • Udostępnianie danych przez usługę WCF


  • Baza danych SQL Server w ASP.NET Web Forms. LINQ to SQL


  • Podstawowe wiadomości o kaskadowych arkuszach stylu


  • Kontrolki uwierzytelniania użytkowników w Web Forms


  • Przegląd kontrolek biblioteki Web Forms


  • Studium przypadku: gra Reversi


  • Technologia AJAX i AJAX Control Toolkit


  • Zgodność z Visual Studio w wersjach 2010, 2012 i 2013




Wypróbuj możliwości Web Forms - tam, gdzie się sprawdzą najlepiej!



Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji.

Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.

Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte

w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce.

Redaktor prowadzący: Ewelina Burska

Projekt okładki: Studio Gravite/Olsztyn

Obarek, Pokoński, Pazdrijowski, Zaprucki

Materiały graficzne na okładce zostały wykorzystane za zgodą Shutterstock.

Wydawnictwo HELION

ul. Kościuszki 1c, 44-100 GLIWICE

tel. 32 231 22 19, 32 230 98 63

e-mail: helion@helion.pl

WWW: http://helion.pl (księgarnia internetowa, katalog książek)

Drogi Czytelniku!

Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres

http://helion.pl/user/opinie/aspnwe

Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.

ISBN: 978-83-246-8284-3

Copyright © Helion 2014

Printed in Poland.

• Kup książkę

• Księgarnia internetowa

• Poleć książkę

• Lubię to! » Nasza społeczność

• Oceń książkę

Spis treĈci

Przedmowa ...................................................................................... 9

Wstöp ............................................................................................ 11

Rozdziaä 1. Prosta aplikacja ASP.NET Web Forms, czyli o wszystkim po trochu ..... 15

Technologia ASP.NET ................................................................................................... 15

Trivia projektowania aplikacji ASP.NET ....................................................................... 16

Tworzenie pustego projektu w Visual Studio 2010 i 2012 ....................................... 16

Tworzenie pustego projektu w Visual Studio 2013 .................................................. 17

Dodawanie strony .aspx ........................................................................................... 18

Projektowanie interfejsu strony ................................................................................ 19

Dodawanie wpisu na stronie ..................................................................................... 21

Czas Īycia aplikacji ........................................................................................................ 23

Dane aplikacji ........................................................................................................... 24

Zdarzenia aplikacji — plik Global.asax ................................................................... 25

Przechowywanie stanu aplikacji na dysku serwera ........................................................ 26

Przechowywanie danych po stronie klienta (ciasteczka) ................................................ 30

Walidacja po stronie klienta ........................................................................................... 31

Wymagane pole formularza ..................................................................................... 31

Báąd w Visual Studio 2012 i 2013 ............................................................................ 32

Ograniczanie zawartoĞci wpisów ............................................................................. 34

Podsumowanie walidacji .......................................................................................... 34

Zadania ........................................................................................................................... 35

Rozdziaä 2. Jözyk C# 5.0 .................................................................................. 37

Platforma .NET .............................................................................................................. 38

ĝrodowisko uruchomieniowe ................................................................................... 38

Kod poĞredni i podwójna kompilacja ....................................................................... 38

Skróty, które warto poznaü ....................................................................................... 39

Podstawowe typy danych ............................................................................................... 40

Deklaracja i zmiana wartoĞci zmiennej .................................................................... 40

Typy liczbowe oraz znakowy ................................................................................... 41

OkreĞlanie typu zmiennej przy inicjacji (pseudotyp var) ......................................... 43

Operatory ................................................................................................................. 43

Konwersje typów podstawowych ............................................................................. 45

Operatory is i as ....................................................................................................... 46

àaĔcuchy .................................................................................................................. 47

Typ wyliczeniowy .................................................................................................... 50

Leniwe inicjowanie zmiennych ................................................................................ 51

Kup książkę

Poleć książkę

4

ASP.NET Web Forms. Kompletny przewodnik dla programistów

Metody ........................................................................................................................... 52

PrzeciąĪanie metod ................................................................................................... 53

DomyĞlne wartoĞci argumentów metod — argumenty opcjonalne

(nowoĞü jĊzyka C# 4.0) ......................................................................................... 54

Argumenty nazwane (nowoĞü jĊzyka C# 4.0) .......................................................... 55

WartoĞci zwracane przez metody ............................................................................. 55

Zwracanie wartoĞci przez argument metody ............................................................ 55

Delegacje i zdarzenia ............................................................................................... 57

WyraĪenia lambda .................................................................................................... 60

Typy wartoĞciowe i referencyjne .................................................................................... 62

Nullable .................................................................................................................... 63

Pudeákowanie ........................................................................................................... 64

Typy dynamiczne (nowoĞü jĊzyka C# 4.0) ..................................................................... 65

Sterowanie przepáywem ................................................................................................. 68

Instrukcja warunkowa if..else ................................................................................... 68

Instrukcja wyboru switch ......................................................................................... 68

PĊtle .......................................................................................................................... 69

Wyjątki ........................................................................................................................... 71

Dyrektywy preprocesora ................................................................................................. 73

Kompilacja warunkowa — ostrzeĪenia .................................................................... 74

Definiowanie staáych preprocesora .......................................................................... 74

Bloki ......................................................................................................................... 75

Atrybuty ......................................................................................................................... 76

Kolekcje ......................................................................................................................... 76

„Zwykáe” tablice ...................................................................................................... 77

PĊtla foreach ............................................................................................................. 79

Sortowanie ............................................................................................................... 80

Kolekcja List ............................................................................................................ 81

Kolekcja SortedList i inne sáowniki ......................................................................... 83

Kolejka i stos ............................................................................................................ 84

Tablice jako argumenty metod oraz metody z nieokreĞloną liczbą argumentów ...... 85

Sáowo kluczowe yield .............................................................................................. 86

Nowa forma inicjacji obiektów i tablic ........................................................................... 88

LINQ .............................................................................................................................. 88

Operatory LINQ ....................................................................................................... 89

Pobieranie danych (filtrowanie i sortowanie) ........................................................... 91

Najprostsza prezentacja pobranych danych .............................................................. 91

Analiza pobranych danych ....................................................................................... 92

Wybór elementu ....................................................................................................... 92

Weryfikowanie danych ............................................................................................. 92

Prezentacja w grupach .............................................................................................. 93

àączenie zbiorów danych ......................................................................................... 93

àączenie danych z róĪnych Ĩródeá w zapytaniu LINQ — operator join ................... 94

MoĪliwoĞü modyfikacji danych Ĩródáa ..................................................................... 95

Elementy programowania wspóábieĪnego (nowoĞü jĊzyka C# 4.0) ................................ 96

Równolegáa pĊtla for ................................................................................................ 96

Przerywanie pĊtli ...................................................................................................... 98

Programowanie asynchroniczne. Modyfikator async i operator await

(nowoĞü jĊzyka C# 5.0) ................................................................................................ 99

Caller Information (nowoĞü jĊzyka C# 5.0) .................................................................. 103

Kup książkę

Poleć książkę

Spis treĈci

5

Rozdziaä 3. Programowanie obiektowe w C# ................................................... 105

Przykáad struktury (Ulamek) ........................................................................................ 106

Przygotowywanie projektu ..................................................................................... 106

Konstruktor i statyczne obiekty skáadowe .............................................................. 108

Pierwsze testy ......................................................................................................... 109

Konwersje na áaĔcuch (metoda ToString) i na typ double ...................................... 109

Metoda upraszczająca uáamek ................................................................................ 110

WáaĞciwoĞci ........................................................................................................... 111

DomyĞlnie implementowane wáaĞciwoĞci (ang. auto-implemented properties) ..... 112

Operatory arytmetyczne ......................................................................................... 113

Operatory porównania oraz metody Equals i GetHashCode .................................. 114

Operatory konwersji ............................................................................................... 116

Implementacja interfejsu (na przykáadzie IComparable) .............................................. 117

Definiowanie typów parametrycznych ......................................................................... 119

Definiowanie typów ogólnych ............................................................................... 119

OkreĞlanie warunków, jakie mają speániaü parametry ............................................ 121

Implementacja interfejsów przez typ ogólny .......................................................... 122

Definiowanie aliasów ............................................................................................. 124

Typy ogólne z wieloma parametrami ..................................................................... 124

Rozszerzenia ................................................................................................................. 125

Typy anonimowe .......................................................................................................... 127

Rozdziaä 4. Wielkie porzñdki, czyli separacja modelu. Pliki XML ...................... 129

Separacja modelu .......................................................................................................... 129

Definicja klasy Wpisy ............................................................................................ 130

Osadzanie modelu w aplikacji ................................................................................ 131

Zapis kolekcji w plikach XML ..................................................................................... 133

Podstawy jĊzyka XML ........................................................................................... 133

UĪycie LINQ to XML ............................................................................................ 134

Odczyt danych z pliku XML .................................................................................. 137

Zapis do pliku XML ............................................................................................... 138

Rejestrowanie zdarzeĔ .................................................................................................. 139

Rozdziaä 5. Udostöpnianie danych przez usäugö WCF ....................................... 141

Tworzenie biblioteki usáug WCF .................................................................................. 141

Definiowanie kontraktów ............................................................................................. 143

Definiowanie metod udostĊpnianych przez usáugĊ ....................................................... 144

Dodawanie odwoáania do usáugi w aplikacji ASP.NET ............................................... 146

UĪycie usáugi WCF w aplikacji ASP.NET ................................................................... 147

Rozdziaä 6. Baza danych SQL Server w ASP.NET Web Forms. LINQ to SQL ....... 151

Tworzenie bazy danych SQL Server w Visual Studio 2010 ......................................... 152

Tworzenie bazy danych SQL Server w Visual Studio 2012 i 2013 .............................. 154

Klasa encji .................................................................................................................... 156

Prezentacja danych w kontrolkach ............................................................................... 160

Zadania ......................................................................................................................... 162

Rozdziaä 7. Strony wielojözyczne (lokalizacja) ................................................. 163

Rozdziaä 8. Podstawowe wiadomoĈci o kaskadowych arkuszach stylów ........... 169

Formatowanie na podstawie typu znacznika HTML .................................................... 170

Formatowanie na podstawie identyfikatora .................................................................. 173

Formatowanie na podstawie nazwy klasy ..................................................................... 174

Kup książkę

Poleć książkę

6

ASP.NET Web Forms. Kompletny przewodnik dla programistów

Rozdziaä 9. Kontrolki uwierzytelniania uĔytkowników w Web Forms ................. 177

Tworzenie wzorca ........................................................................................................ 177

Strona logowania .......................................................................................................... 179

Konfiguracja uwierzytelniania i baza danych ............................................................... 181

WyĞwietlanie nazwy uĪytkownika ............................................................................... 183

Strona rejestrowania nowego uĪytkownika .................................................................. 185

Strona przypominania hasáa .......................................................................................... 187

Strona zmiany hasáa i problem dostĊpu do stron .......................................................... 188

Odczytywanie informacji o koncie z poziomu kodu ..................................................... 191

Zadania ......................................................................................................................... 194

Rozdziaä 10. Przeglñd kontrolek biblioteki Web Forms ...................................... 195

Baza danych ................................................................................................................. 195

Strona z formularzem dodawania zdjĊü ........................................................................ 197

Strona przeglądania zbiorów zdjĊü ............................................................................... 204

Menu aplikacji .............................................................................................................. 209

Kontrolki GridView i DetailsView ............................................................................... 209

Zadania ......................................................................................................................... 213

Rozdziaä 11. Studium przypadku: gra Reversi .................................................... 215

Silnik ............................................................................................................................ 216

Konstruktor klasy ......................................................................................................... 220

Implementacja zasad gry .............................................................................................. 221

Pierwsze testy ............................................................................................................... 223

Metody dodatkowe ....................................................................................................... 225

Kontrolka prezentująca planszĊ .................................................................................... 226

Prezentacja stanu gry w kontrolce ................................................................................ 230

WyĞwietlanie dodatkowych informacji o stanie gry ..................................................... 231

Interakcja z uĪytkownikiem .......................................................................................... 234

Wykrywanie szczególnych sytuacji w grze .................................................................. 238

Dziedziczenie ............................................................................................................... 243

Jak znaleĨü najlepszy ruch? .......................................................................................... 245

PodpowiedĨ komputera .......................................................................................... 248

Gra z komputerem .................................................................................................. 250

Zadania ......................................................................................................................... 252

Rozdziaä 12. Technologia AJAX ........................................................................ 253

Kontrolka UpdatePanel .......................................................................................... 254

Dwie kontrolki UpdatePanel .................................................................................. 255

Kontrolka Timer ..................................................................................................... 257

Kontrolka UpdateProgress ..................................................................................... 259

Metody strony (page methods) ............................................................................... 262

Metody strony — wykorzystanie jQuery ............................................................... 263

Rozdziaä 13. AJAX Control Toolkit .................................................................... 265

Co to jest AJAX Control Toolkit? ................................................................................ 265

UĪywanie kontrolek ACT we wáasnych projektach ...................................................... 268

Instalacja kontrolek ACT w Ğrodowisku Visual Studio .......................................... 268

UĪycie rozszerzenia ConfirmButtonExtender ........................................................ 269

Jak to jest zrobione? ............................................................................................... 271

Suwaki .................................................................................................................... 272

Reklama ................................................................................................................. 274

Kup książkę

Poleć książkę

Spis treĈci

7

Rozdziaä 14. Typowe elementy aplikacji internetowych ASP.NET ....................... 277

Pliki konfiguracyjne ..................................................................................................... 277

SiteMap ........................................................................................................................ 280

Style, skórki i tematy .................................................................................................... 283

Temat ..................................................................................................................... 283

Skórki ..................................................................................................................... 285

Query String ................................................................................................................. 286

Buforowanie (cache) ..................................................................................................... 288

Skorowidz .................................................................................... 292

Kup książkę

Poleć książkę

8

ASP.NET Web Forms. Kompletny przewodnik dla programistów

Kup książkę

Poleć książkę

Rozdziaä 1.

Prosta aplikacja

ASP.NET Web Forms,

czyli o wszystkim

po trochu

Jacek Matulewski

Technologia ASP.NET

Czym jest ASP.NET? W wielkim skrócie jest to technologia uruchamiana na serwerze WWW, który korzystając z platformy .NET, dynamicznie generuje na podstawie przygotowanych przez programistów szablonów (plików .aspx) strony HTML ze skryptami JavaScript — są one nastĊpnie przekazywane do programu IIS (ang. Internet Information Services) udostĊpniającego ich zawartoĞü w internecie. ASP.NET jest wiĊc technologią pracującą po stronie serwera. Komputer-klient nie musi mieü nawet zain-stalowanej platformy .NET. Wystarczy, by dysponowaá przeglądarką obsáugującą skrypty JavaScript. To stawia ASP.NET w jednym szeregu z JSP (ang. Java Server Pages) czy aplikacjami internetowymi budowanymi na bazie PHP.

Nazwa ASP.NET wywodzi siĊ od poprzednika tej technologii, czyli ASP (ang. Active Server Pages), w której szablonom HTML towarzyszyá najczĊĞciej kod VBScript.

Aplikacje ASP w odróĪnieniu od ASP.NET, a tak samo jak w CGI (ang. Common Gateway Interface), nie posiadaáy jednak stanu, co bardzo utrudniaáo ich tworzenie.

Kup książkę

Poleć książkę

16

ASP.NET Web Forms. Kompletny przewodnik dla programistów

Trivia projektowania aplikacji ASP.NET

Zbudujmy aplikacjĊ, która bĊdzie implementacją prostej ksiĊgi goĞci. Idea aplikacji jest nastĊpująca: dowolny internauta po wejĞciu na stronĊ bez koniecznoĞci logowania bĊdzie mógá umieĞciü na niej swój wpis. Aby od podstaw przedstawiü elementy ASP.NET, zaczniemy od pustego projektu — domyĞlny projekt aplikacji ASP.NET

Web Forms wyposaĪony jest bowiem we wzorzec, strony zarządzania kontami, kaskadowe arkusze stylów, pliki JavaScript i inne elementy, które poznamy dopiero w dalszej czĊĞci ksiąĪki.

Technologiö ASP.NET Web Forms moĔna z powodzeniem zaliczyè obecnie do technologii dojrzaäych. Nie nastöpujñ w niej wobec tego tak duĔe zmiany jak w przypadku ASP.NET MVC. To powoduje, Ĕe opisane w tej ksiñĔce procedury tworzenia i rozwija-nia projektów Web Forms mogñ byè z powodzeniem stosowane w Ĉrodowisku 2010, 2012 i 2013. RóĔnice w przypadku poszczególnych Ĉrodowisk zostaäy w tekĈcie zaznaczone. Warto zwróciè uwagö na dwie najwaĔniejsze. Po pierwsze, w przypadku Visual Studio 2013 pojawiä siö zintegrowany kreator umoĔliwiajñcy tworzenie projektów aplikacji internetowych korzystajñcych z technologii ASP.NET Web Forms i MVC

w dowolnych kombinacjach. Tworzñc projekty na potrzeby tej ksiñĔki, wybieramy oczywiĈcie jedynie Web Forms. Drugñ zmianñ, która moĔe dezorientowaè, jest sposób edycji tabel w bazach danych (zob. rozdziaä 6). Od wersji Visual Studio 2012

odbywa siö to poprzez generowane specjalnie w tym celu skrypty SQL. W doäñczo-nych do tej ksiñĔki Ēródäach znajdujñ siö projekty dla Visual Studio 2010 i 2013

oraz przekonwertowane projekty dla Visual Studio 2013 RC (taka wersja byäa do-stöpna w momencie oddawania ksiñĔki do druku). Aktualizacja projektu z Visual Studio 2012 do 2013 jest automatyczna i pozostawia moĔliwoĈè otwarcia projektu takĔe w starszej wersji. Ze wzglödu na spójnoĈè opisów zrezygnowaliĈmy z „po-lonizacji” Visual Studio, która jest moĔliwa dopiero od wersji 2012.

Tworzenie pustego projektu

w Visual Studio 2010 i 2012

Utwórzmy pusty projekt aplikacji ASP.NET Web Forms:

1. Uruchom Visual Studio.

2. Z menu File/New wybierz Project… (moĪna równieĪ uĪyü klawiszy skrótu Ctrl+Shift+N).

3. Pojawi siĊ okno widoczne na rysunku 1.1, w którym naleĪy z listy zainstalowanych szablonów ( Installed/Templates) wybraü Visual C#/Web i wreszcie ASP.NET Empty Web Application.

4. Wpisz KsiegaGosci w polu Name, sprawdĨ, czy zaznaczone jest pole opcji Create directory for solution (stwórz katalog dla rozwiązania), i kliknij OK.

W efekcie powstanie projekt, w którym poza plikiem konfiguracyjnym Web.config nie ma Īadnych innych plików. Dodajmy wobec tego plik, który bĊdzie szablonem jedynej strony aplikacji (witryny).

Kup książkę

Poleć książkę

Rozdziaä 1. i Prosta aplikacja ASP.NET Web Forms, czyli o wszystkim po trochu 17

Rysunek 1.1. Wybór projektu

Tworzenie pustego projektu w Visual Studio 2013

W najnowszym Visual Studio wygląda to trochĊ inaczej, choü rozpoczyna siĊ podobnie.

1. Z menu File/New naleĪy wybraü pozycjĊ Project... .

2. Z listy szablonów w lewym panelu wybieramy Visual C#/Web, a nastĊpnie jedyną pozycjĊ: ASP.NET Web Application.

3. WskaĪmy nazwĊ projektu (pole Name), czyli KsiúgaGoħci. Upewnijmy siĊ, Īe pole opcji Create directory for solution jest zaznaczone.

4. Po klikniĊciu OK pojawi siĊ zintegrowany kreator dla wszystkich typów aplikacji internetowych obsáugiwanych przez Visual Studio 2013 (rysunek 1.2).

5. W nowym oknie zaznaczmy szablon Empty, a poniĪej pole opcji Web Forms (to ostatnie spowoduje utworzenie folderów typowych dla projektów Web

Forms oraz dodanie referencji do bibliotek wykorzystywanych w Web Forms).

6. Klikamy Create Project. Utworzenie projektu bĊdzie trwaáo dáuĪszą chwilĊ.

W koĔcu powstanie projekt, w którym oprócz pliku Web.config obecne bĊdą takĪe pliki Global.asax i Global.asax.cs, a do tego puste katalogi App_Data i Models.

Kup książkę

Poleć książkę

18

ASP.NET Web Forms. Kompletny przewodnik dla programistów

Rysunek 1.2.

Zintegrowany

kreator aplikacji

internetowych

w Visual Studio 2013

Dodawanie strony .aspx

Dodajmy do projektu stronĊ, która bĊdzie stanowiáa szablon gáównej i jedynej strony naszej witryny. Ta czynnoĞü, jak zresztą wiĊkszoĞü czynnoĞci związanych z projektowa-niem aplikacji Web Forms, jest niemal identyczna w Visual Studio 2010, 2012 i 2013.

1. Z menu Project wybierz Add New Item… (klawisze skrótu Ctrl+Shift+A).

2. Pojawi siĊ okno z rysunku 1.3, w którym z zakáadki Web wybierz Web Form.

ZmieĔ nazwĊ nowego pliku na Default.aspx.

3. Kliknij Add.

W podoknie Solution Explorer pojawiá siĊ nowy element — dodany przed chwilą do projektu plik Default.aspx. ZauwaĪmy jednak, Īe reprezentującą go gaáąĨ moĪna rozwinąü. Wówczas zobaczymy dwa towarzyszące mu dodatkowe pliki z kodem C#: Default.aspx.cs oraz Default.aspx.designer.cs. Do pierwszego bĊdziemy dodawaü wáasny kod C# kontrolujący dziaáanie strony, natomiast w drugim Visual Studio umieszczaü bĊdzie deklaracje zmiennych odpowiadających kontrolkom umieszczo-nym na stronie w oknie projektowania. Osoby poznające dopiero Ğrodowisko Visual Studio i jĊzyk C# nie powinny w tym pliku niczego zmieniaü.

Dlaczego wybraliĞmy taką nazwĊ nowego pliku? Serwer IIS traktuje pliki o tej nazwie jako domyĞlne w katalogach (analogicznie do index.html i Default.htm) — bĊdzie ona zatem wyĞwietlona, jeĪeli w przeglądarce wpisany zostanie adres zakoĔczony na katalogu aplikacji.

Kup książkę

Poleć książkę

Rozdziaä 1. i Prosta aplikacja ASP.NET Web Forms, czyli o wszystkim po trochu 19

Rysunek 1.3. Dodawanie pliku do projektu

Projektowanie interfejsu strony

Po utworzeniu pliku moĪemy jego zawartoĞü zobaczyü w podoknie widocznym w cen-trum Visual Studio. Zwróümy uwagĊ na obecne w jego dolnej czĊĞci przyciski Design, Split i Source. DomyĞlnie edytor ustawiony jest na zakáadce Source. W wyniku tego oglądamy kod XML bĊdący szablonem kodu HTML wysyáanego przez dziaáającą aplikacjĊ ASP.NET do przeglądarki. W tej chwili najwaĪniejszym dla nas znacznikiem jest div (znacznik grupujący, który okreĞla blok na stronie). To w nim umieĞcimy caáy dodawany przez nas kod. ZmieĔmy widok na Design, aby móc projektowaü wy-gląd strony za pomocą myszki. Na stronie umieĞümy dwa pola edycyjne (TextBox), przycisk (Button) i kontrolkĊ Label.

W tym celu:

1. Z lewej strony okna Visual Studio powinno byü widoczne podokno Toolbox.

JeĪeli nie jest — moĪna je wáączyü w menu View. Przypnijmy je tak, Īeby caáy czas byáa widoczna jego zawartoĞü.

2. Z podokna Toolbox przeciągnij dwa razy kontrolkĊ TextBox. NaleĪy umieĞciü je wewnątrz pustego elementu div widocznego na podglądzie strony.

3. MoĪemy równieĪ dodaü opis pól edycyjnych, wpisując je wprost z klawiatury w kodzie strony (jak w edytorze tekstu). Przykáad widoczny jest na rysunku 1.4.

Kup książkę

Poleć książkę

20

ASP.NET Web Forms. Kompletny przewodnik dla programistów

Rysunek 1.4. Edycja zawartoĞci strony

ZawartoĈè strony moĔna edytowaè podobnie jak w edytorach tekstu — strona tworzy dokument, w którym „dziaäajñ” znaki koþca linii. MoĔemy wobec tego ustawiè kursor miödzy dwoma dodanymi polami edycyjnymi TextBox i rozdzieliè je spacjñ lub zna-kiem koþca linii (klawisz Enter). Nie ma natomiast prostej moĔliwoĈci ustalania dowolnego poäoĔenia kontrolek (ich pozycji na stronie).

4. Tekst moĪna formatowaü, korzystając z ikon dostĊpnych po prawej stronie paska narzĊdzi (niewidoczne na rysunku 1.4). Odpowiadają one typowym

ikonom znanym z edytorów tekstu. Znajdziemy tam ikonĊ pozwalającą na

pogrubienie czcionki, uĪycie kursywy i podkreĞlenia, zmianĊ koloru czcionki i táa oraz wyrównania tekstu (do lewej, do prawej, do Ğrodka i justowanie).

Korzystając z tych ikon, utwórzmy nagáówek strony (rysunek 1.4).

a) Na górze podglądu strony wpiszmy jej tytuá: „KsiĊga goĞci” i zaznaczmy go.

b) Korzystając z paska narzĊdzi, zmieĔmy rozmiar tytuáu. W tym celu w rozwijanej liĞcie, w której po rozwiniĊciu widoczne są wzglĊdne

wielkoĞci (np. small, medium, large), wpiszmy wartoĞü 50.

c) ZmieĔmy kolor czcionki na granatowy. Táo niech pozostanie niezmienione.

Kup książkę

Poleć książkę

Rozdziaä 1. i Prosta aplikacja ASP.NET Web Forms, czyli o wszystkim po trochu 21

d) PrzejdĨmy do kodu pliku Default.aspx (zakáadka Source u doáu ekranu).

Zwróümy uwagĊ, Īe formatowanie zostaáo zapisane w klasie stylu CSS

o nazwie .style11 (wiĊcej informacji na temat stylów CSS w rozdziale 8.), natomiast tekst tytuáu zostaá otoczony znacznikiem span z referencją do klasy style1.

5. Wróümy do podglądu strony i zaznaczmy drugie pole edycyjne, a nastĊpnie za pomocą podokna Properties (jeĪeli go nie ma, znajdziemy je w menu View) zmieĔmy jego wáaĞciwoĞü TextMode na MultiLine. NastĊpnie w podglądzie

okna za pomocą myszy zwiĊkszmy jego wysokoĞü.

6. Teraz przeciągnijmy kontrolkĊ przycisku (Button) i zmieĔmy jego etykietĊ

(wáaĞciwoĞü Text) na WyĞlij.

7. I wreszcie miĊdzy polami edycyjnymi i nagáówkiem umieĞümy kontrolkĊ

Label. W odróĪnieniu do zwykáego tekstu wpisywanego w edytorze jej

zawartoĞü moĪe byü zmieniona z poziomu kodu w trakcie dziaáania aplikacji.

PosáuĪy nam do wyĞwietlenia zapisów w ksiĊdze goĞci. Na razie wyczyĞümy jej zawartoĞü, usuwając za pomocą podokna Properties tekst przypisany do wáaĞciwoĞci Text.

To tyle, jeĪeli chodzi o projektowanie aplikacji ASP.NET za pomocą myszki. Stwo-rzyliĞmy interfejs, którego dziaáanie moĪemy przetestowaü, uruchamiając aplikacjĊ

(klawisz F5). W polach edycyjnych moĪna wpisywaü tekst, klikniĊcie przycisku powoduje przeáadowanie strony, ale wpisana w formularzu wiadomoĞü nie pojawia siĊ

na stronie. To musimy dopiero zaprogramowaü.

Dodawanie wpisu na stronie

Stwórzmy metodĊ zdarzeniową przycisku:

1. W widoku projektowania strony (zakáadka Design u doáu okna) dwukrotnie kliknij przycisk WyĞlij (na podglądzie strony).

2. Otworzy siĊ edytor kodu z widoczną zawartoĞcią pliku Default.aspx.cs.

Kursor ustawiony jest w nowo utworzonej metodzie Button1_Click.

3. W tej metodzie umieĞü kod widoczny na listingu 1.1.

Korzystamy z jözyka C# (alternatywñ jest Visual Basic). Informacje o tym jözyku, które sñ niezbödne do zrozumienia kodów z tej ksiñĔki, czytelnik znajdzie w dwóch kolejnych rozdziaäach.

Listing 1.1. Reakcja na klikniĊcie przycisku WyĞlij

protected void Button1_Click(object sender, EventArgs e)

{ //walidacja po stronie serwera

if (TextBox1.Text == "" || TextBox2.Text == "") return; 1 W Visual Studio 2013 styl ten jest nazwany .auto-style1.

Kup książkę

Poleć książkę

22

ASP.NET Web Forms. Kompletny przewodnik dla programistów

//ustalanie treĞci wpisu

string kolorNagđówka = "navy";

string nagđówek = "<font color='" + kolorNagđówka +

´"'><b> Dodano dnia " + DateTime.Now.ToString() + "</b></font>"; string treħè = TextBox2.Text.Trim().Replace("\n", "<br />"); string podpis = "<i>" + TextBox1.Text + "</i> (" +

´this.Request.UserHostAddress + ")";

//dodawanie wpisu

string nowyWpis = nagđówek + "<br />" + treħè + "<br />" + podpis + "<P>"; nowyWpis += "<hr width='30%' align='left'>";

Label1.Text += nowyWpis;

//czyszczenie pola edycyjnego z treĞcią wpisu

TextBox2.Text = "";

}

MoĪemy ponownie uruchomiü aplikacjĊ ( F5) i spróbowaü dodaü wpis. Zwróümy uwagĊ, Īe kopiując z pól edycyjnych treĞü wpisu i pseudonim podany przez uĪytkownika, uwzglĊdniliĞmy formatowanie w postaci znaczników HTML. W szczególnoĞci znaki koĔca linii (\n), które mogą znaleĨü siĊ w áaĔcuchu wpisanym do pola edycyjnego TextBox2, zamieniliĞmy na znacznik <br />. Efekt widoczny jest na rysunku 1.5.

Rysunek 1.5.

Wpis w ksiĊdze goĞci.

Serwer WWW to IIS 7

uruchomiony

na Windows 7

W nawiasie za podpisem powinien znaleĨü siĊ numer IP komputera, z którego dokonano wpisu. W IIS 6 znaleĨlibyĞmy tam 127.0.0.1, ale w IIS 7 widaü tylko numer portu. Po przeniesieniu programu na wáaĞciwy serwer numer bĊdzie jednak wyĞwietlany poprawnie.

PowyĪsze rozwiązanie ma zasadniczą wadĊ. Wpisy przechowywane są tylko we wáa-snoĞci Text kontrolki Label1, wiĊc po zamkniĊciu aplikacji znikną. To jednak nie wszystko — co gorsza, nawet w trakcie dziaáania aplikacji inna osoba, która wejdzie

Kup książkę

Poleć książkę

Rozdziaä 1. i Prosta aplikacja ASP.NET Web Forms, czyli o wszystkim po trochu 23

na tĊ stronĊ, nie zobaczy wpisów zostawionych przez innych uĪytkowników. MoĪna siĊ o tym áatwo przekonaü, uruchamiając dodatkową sesjĊ przeglądarki i kopiując adres strony z okna uruchomionego przez Visual Studio (zapewne coĞ w stylu http://localhost:

´ 5262/Default.aspx, tylko z innym numerem portu). Aby ten báąd naprawiü, ko-nieczne jest wspóádzielenie wpisów na poziomie caáej aplikacji, a ponadto trwaáe ich magazynowanie na dysku serwera — w bazie danych, pliku XML lub choüby zwykáym pliku tekstowym.

Rozwój tej aplikacji bödö opisywaä nie tylko w tym, ale równieĔ w kilku nastöpnych rozdziaäach. Nie bödzie to rozwój dñĔñcy wprost do „jedynie säusznego” rozwiñzania

— bödö meandrowaä, opisujñc róĔne rozwiñzania i podejĈcia. Proszö wobec tego traktowaè go jedynie jako pretekst do prezentacji ASP.NET Web Forms, a nie jako wzór projektowania aplikacji internetowych.

Znaczniki tradycyjnego HTML mogñ byè pisane duĔymi lub maäymi literami. Nowñ liniö moĔna zatem zapisaè równowaĔnie jako <BR /> lub <br />. Warto jednak zwróciè uwagö, Ĕe specyfikacja XHTML, a za niñ HTML 5 wymusza zapisywanie znaczników maäymi literami. Bödö staraä siö do tego zalecenia stosowaè. Pozwolö sobie jednak na innego typu anachronizmy: m.in. bödö uĔywaä wycofywanego znacznika FONT, a takĔe nie zawsze bödö dbaä o domykanie pojedynczych znaczników (np. <p> zamiast <p />).

Czas Ĕycia aplikacji

Po pierwszym wywoáaniu witryny na serwerze WWW uruchamiana jest odpowie-dzialna za nią aplikacja ASP.NET, która od tego momentu najczĊĞciej nie przestaje dziaáaü aĪ do zakoĔczenia pracy serwera. JednoczeĞnie „w obrĊbie aplikacji” po-wstaje sesja, która związana jest z tym pierwszym Īądaniem. Kolejne Īądania od innych przeglądarek-klientów powodują tworzenie kolejnych sesji. Po opuszczeniu przez internautĊ witryny sesje koĔczą pracĊ, ale aplikacja wciąĪ jest na posterunku.

To zasadnicza zmiana w porównaniu do starszych technologii rozszerzeĔ serwerów WWW, w których aplikacja uruchamiana byáa tylko po to, aby przetworzyü otrzymane od przeglądarki Īądanie i wygenerowaü nowy kod HTML. W ASP.NET mamy do czynienia ze stale pracującą aplikacją, która przechowuje swój stan. CiągáoĞü pracy aplikacji powoduje w szczególnoĞci, Īe moĪemy zapamiĊtaü jakieĞ dane na jednej stronie witryny, a wykorzystaü na innej. Do tego sáuĪy zbiór danych (zmiennych) aplikacji. Nie ma takĪe problemu, aby utworzyü zmienną przechowywaną tylko w ob-rĊbie jednej sesji. Wystarczy umieĞciü ją w zbiorze danych sesji.

Kup książkę

Poleć książkę

36

ASP.NET Web Forms. Kompletny przewodnik dla programistów

Kup książkę

Poleć książkę

Skorowidz

A

C

E

ACT, AJAX Control Toolkit,

C# 5.0, 37–104

elementy

265

cache, 288

aplikacji internetowych, 277

AJAX Control Toolkit, 265

Caller Information, 103

tablicy, 78

AJAX, Asynchronous JavaScript

CAS, Code Access Security, 39

typu T, 121

and XML, 253

CGI, Common Gateway

encje, 156

algorytm bąbelkowy, 260

Interface, 15

aliasy, 124

ciasteczka, 30

F

analiza danych, 92

CLR, Common Language

aplikacja Kolory, 272, 274

Runtime, 38, 39

FIFO, 84

aplikacje

CLS, Common Language

FILO, 84

ASP.NET Web Forms, 15

Specification, 39

filtrowanie, 91, 210

ASP.NET, 146

CSS, Cascade Style Sheet, 169

formatowanie

desktopowe, 58

CTS, Common Type System, 39

identyfikator, 173

internetowe, 58, 277

czas Īycia aplikacji, 23

nazwa klasy, 174

argumenty

typ znacznika HTML, 170

nazwane, 55

D

opcjonalne, 54

G

ASP, Active Server Pages, 15

dane aplikacji, 24

ASP.NET, 15

delegacja, 127

generowanie ostrzeĪenia, 74

Cache, 288

delegacje, 57

gra Reversi, 215

Web Forms, 277, 291

DLR, Dynamic Language

dziedziczenie, 243

atrybuty, 76

Runtime, 38, 39, 68

informacje o stanie, 231

dodawanie

interakcja z uĪytkownikiem, 234

do siatki, 212

B

interfejs, 216, 233

elementu Site Map, 281

metody dodatkowe, 225

baza danych, 195

odwoáania do usáugi, 146

najlepszy ruch, 245

SQL Server, 151, 154

strony .aspx, 18

plansza, 226, 229

biblioteka

wpisu na stronie, 21

podpowiedĨ komputera, 248

jQuery, 263

zdjĊü, 197

prezentacja stanu, 230

domyĞlna wartoĞü argumentu, 54

Web Forms, 195

rozpoczynanie od nowa, 243

domyĞlnie implementowane

.NET, 38

ruch komputera, 251

wáaĞciwoĞci, 112

bloki, 75

dostĊp do stron, 188

silnik, 216

báĊdy, 32, 188

dyrektywy preprocesora, 73

testy, 223

buforowanie, caching, 288

dziaáanie bufora, 290

wykrywanie sytuacji, 238

dziaáanie polityki, 290

zasady, 221

dziedziczenie, 243

gra z komputerem, 250

Kup książkę

Poleć książkę

294

ASP.NET Web Forms. Kompletny przewodnik dla programistów

H

kolejki, queue, 84

lokalizacja, 163, 164, 166, 167, 168

kolekcja

hasáo, 187, 188

List, 81

ã

SortedList, 83

I

kolekcje, 76

áaĔcuchy, 47, 48

kolor panelu, 272, 273

áączenie

IIS, Internet Information

kompilacja warunkowa, 74

danych, 94

Services, 15, 288

komponent

zbiorów danych, 93

IL, Intermediate Language, 38

ConfirmButton, 266

implementacja

ValidationSummary, 266

M

interfejsów, 117, 122

konfiguracja

zasad gry, 221

czcionki, 173

mapa witryny, SiteMap, 280

informacja

filtra, 210

mapowanie obiektowo-relacyjne,

o báĊdach, 188

uwierzytelniania, 181

157

o koncie, 191

konfigurator witryny, 187

mechanizm reflection, 67

o uĪytkowniku, 193

konstrukcja

menu aplikacji, 209

inicjacja

try..catch, 71

metoda CompareTo, 118

obiektów, 88

yield return, 87

metoda Equals, 114

tablic, 88

konstruktor, 108, 220

metoda GetHashCode, 114

instalowanie kontrolek ACT,

konto uĪytkownika, 191

metoda GetValueOrDefault, 64

268

kontrakt danych, 143

metoda ToDouble, 109

instancja klasy, 105

kontrakty, 143

metoda ToString, 109

instrukcja

kontrolka

metody, 52, 55, 105

warunkowa if..else, 68

AlwaysVisibleControl

metody klasy String, 47, 48

wyboru switch, 68

Éxtender1, 275

metody rozszerzające, 90

interfejs

DetailsView, 209, 211

metody strony, 263

IComparable, 118

GridView, 209

metody strony, page methods,

strony, 19

Label, 255

262

uĪytkownika, 254, 258

LoginView, 184

metody udostĊpniane przez

Repeater, 161, 207, 211

usáugĊ, 144

J

ScriptManager, 256

metody z nieokreĞloną liczbą

Timer, 257

argumentów, 85

jĊzyk C# 5.0, 37–104

TreeView, 282

metody zdarzeniowe, 58

jĊzyk XML, 133

UpdatePanel, 254, 255

miniatura zdjĊcia, 201

JIT, Just-In-Time, 39, 40

UpdateProgress, 259

modyfikacja konstruktora

kontrolki, 235

jQuery, 263

kontrolki, 160, 173

modyfikacje danych, 95

JSON, 253

ACT, 266, 268

modyfikator async, 99

JSP, Java Server Pages, 15

logowania, 180

uwierzytelniania, 177

modyfikatory dostĊpu, 107

Web Forms, 195

K

konwersja

N

na áaĔcuch, 109

kaskadowe arkusze stylów,

na typ double, 109

nazwa uĪytkownika, 183

169, 283

typów podstawowych, 45

klasa

O

encji, 156

Lazy, 51

L

obiekty, 105

Random, 86

leniwe inicjowanie zmiennych, 51

obiekty staáe, 108

ReversiSilnik, 234

liczby pseudolosowe, 86

obsáuga

ReversiSilnikAI, 246

LINQ, 88, 89

wyjątków, 71, 73

String, 47

to Objects, 136

zdarzeĔ, 256

StringBuilder, 49

to SQL, 151

odczyt z pliku, 137

Wpisy, 130, 158

to XML, 85, 134, 137

odĞwieĪanie danych, 162

klasy, 105

logowanie, 179

okreĞlanie typu zmiennej, 43

klauzula OutputCache, 291

operator as, 46

Kup książkę

Poleć książkę

Skorowidz

295

await, 99

pseudotyp var, 43

tworzenia uĪytkownika, 182

is, 46

pudeákowanie, 64

z formularzem, 197

join, 94

pusty projekt, 17

zmiany hasáa, 188

new, 77

strony wielojĊzyczne, 163

operatory, 43, 45

Q

struktura

arytmetyczne, 113

typu FIFO, 84

konwersji, 116

Query String, 286

typu FILO, 84

LINQ, 89

Ulamek, 106

porównania, 114

R

Wpis, 156

osadzanie modelu, 131

struktury, 106

ostrzeĪenie, 74

refleksja, 68

styl kontrolki, 174

rejestrowanie uĪytkownika, 185

suwaki, 272

P

rejestrowanie zdarzeĔ, 139

szablony, 166

reklama, 274

Style Sheet, 283

parametr Query String, 287

rozszerzanie klasy, 126

WCF Data Service, 141

parametr T, 121

rozszerzenia, 125

parametry, 121

AlwaysVisibleControlExtender,

T

pĊtla

274

foreach, 79

ConfirmButtonExtender, 269,

tabela Zdjecia, 206

równolegáa for, 96

270

tablice, 77

pĊtle, 69

równolegáa pĊtla for, 96

dynamiczne, 77

platforma .NET, 15, 37

jako argumenty, 85

Ğrodowisko uruchomieniowe, 38

S

technologia

plik

AJAX, 253

AssemblyInfo.cs, 76

separacja modelu, 129

ASP.NET, 15

Default.aspx, 184, 191

siatka, 212

ASP.NET Web Forms, 16

Global.asax.cs, 27

SiteMap, 280

COM, 68

Web.config, 17, 184, 190, 277

skórki, 285

LINQ, 90

pliki

sáowniki, 83

LINQ to SQL, 151

.css, 169

sáowo kluczowe

LINQ to XML, 85

.Master, 177

default, 64

tematy, 283

konfiguracyjne, 277, 279

delegate, 57

testowanie struktury, 109

XML, 133

event, 58

testy dziaáania silnika, 224

pobieranie danych, 91

using, 148

táumaczenia, 165

pola, 105

yield, 86

tworzenie

polityka sliding expiration, 290

sortowanie, 80, 91, 123

bazy danych, 152, 154

prezentacja danych, 91, 160

bąbelkowe, 260

biblioteki usáug WCF, 141, 142

programowanie

tablicy, 118

konta, 186

asynchroniczne, 99

SQL Server, 151

projektu, 106

obiektowe, 105

staáe liczbowe, 42

pustego projektu, 16, 17

wspóábieĪne, 96

staáe preprocesora, 74

tablic, 77

projekt ASP.NET Web Forms, 16

stan

wiązania, 198

projektowanie interfejsu

aplikacji, 26

wzorca, 177

strony, 19

gry, 230

typ

przechowywanie danych, 30

statyczne obiekty skáadowe, 108

dynamic, 66

przechowywanie stanu

sterowanie przepáywem, 68

Nullable<int>, 64

aplikacji, 26

stos, stack, 84

object, 67

przeciąĪanie metod, 53

T, 121

strona

przerywanie pĊtli, 98

.aspx, 18

Variant, 65

przestrzeĔ

wyliczeniowy, 50

logowania, 179

System.Collections.Generic, 84

typy

przeglądania zbiorów zdjĊü, 204

przesyáanie

anonimowe, 127

przypominania hasáa, 187

plików, 204

danych, 40, 42

rejestrowania uĪytkownika, 185

zdjĊcia, 202

dynamiczne, 65

Kup książkę

Poleć książkę

296

ASP.NET Web Forms. Kompletny przewodnik dla programistów

typy

wartoĞü null, 63

wyzwalacze, triggers, 254

ogólne z wieloma parametrami,

WCF, 141, 149

wzorzec, 178

124

Data Service, 141

ogólne, generic types, 119

Service Library, 141

Z

parametryczne, 119

Web Forms, 195

pĊtli, 70

weryfikowanie danych, 92

zapis

referencyjne, 62

wiązanie

do pliku, 138

wartoĞciowe, 62

kontrolki, 199

kolekcji, 133

rozszerzeĔ ACT, 269

stanu, 29

U

rozwijanej listy, 200

zapytania LINQ, 89

wáaĞciwoĞci, 111

zdarzenia, 57, 139, 256

udostĊpnianie danych, 141

domyĞlnie implementowane,

aplikacji, 25

upraszczanie uáamków, 110

112

zdjĊcia, 195

usáuga WCF, 141, 147, 149

wpis na stronie, 21

miniatura, 201

uwierzytelnianie uĪytkowników,

wybór

przesyáanie, 202

177, 181

elementu, 92

uploadowanie, 197

jĊzyka, 168

zbiory, 204

W

wygląd strony, 199

zmiana hasáa, 188

wyjątki, exception, 71, 72

zmienne, 40

walidacja, 31, 34, 267

wyraĪenia lambda, 60

znaczniki HTML, 170

po stronie serwera, 162

wyĞwietlanie nazwy

znak hash, 126

walidator

uĪytkownika, 183

zwracanie wartoĞci

RegularExpressionValidator, 34

przez argument, 55

Kup książkę

Poleć książkę

KSIĄŻKI TEGO AUTORA

Visual C++. Gotowe rozwiązania dla programistów Windows ASP.NET Web Forms. Kompletny przewodnik dla programistów interaktywnych aplikacji internetowych w Visual Studio ASP.NET MVC. Kompletny przewodnik dla programistów interaktywnych aplikacji internetowych w Visual Studio