Platformy Technologiczne ASP.NET

Download Report

Transcript Platformy Technologiczne ASP.NET

PLATFORMY
TECHNOLOGICZNE
ASP.NET
mgr inż. Tomasz Gawron
Protokół HTTP
2

Protokół zaprojektowany jako bezstanowy (brak pojęcia sesji
grupującej interakcje). Interakcja przeglądarki z serwerem
WWW odbywa się według schematu żądanie - odpowiedź:

Serwer nadsłuchuje żądania,

Klient otwiera połączenie – serwer odpowiada potwierdzeniem,

Żądanie HTTP jest wysyłane przez klienta,

Serwer przekazuje w odpowiedzi żądane zasoby lub informację o
ich niedostępności,

Klient
Serwer
SYN()
SYN / ACK()
ACK()
żądanie()
ACK()
Połączenie zostaje zamknięte przez serwer

Protokół określa format komunikatu żądania oraz odpowiedzi

Domyślny numer portu: 80
odpowiedź()
ACK()
FIN()
ACK()
FIN()
ACK()
Platformy Technologiczne 2012
Struktura komunikatu HTTP
3
Request Line
• Method
• Request URI
• HTTP Version Info
Response Line
• HTTP Version Info
• Status Code
• Description
Headers
CRLF
Message Body

Formaty żądania i odpowiedzi są podobne:





wiersz początkowy (zależny od typu komunikatu)
dowolna liczba wierszy nagłówków
typy nagłówków: General, Request, Response, Entity
pusta linia (CRLF) – dla zaznaczenia końca sekcji nagłówkowej
opcjonalne ciało komunikatu
Platformy Technologiczne 2012
Rodzaje metod komunikatów
4

GET






POST




Do pobrania informacji poprzez podanie URI wymaganego zasobu
Parametry dołączane do URI (po znaku zapytania)
Jeżeli adres wskazuje na proces wykonujący przetwarzanie danych to wynikiem jest
wytworzona przez ten proces informacja
Możliwość warunkowego wykonania metody, gdy spełniony jest warunek podany w
dodatkowych nagłówkach (If-Modified-Since, If-Match, …)
Ograniczona długość przekazywanych parametrów (~240 znaków)
Przesłanie danych do zasobu o podanym URI, dane zawarte są w treści żądania (większa
ilość przesyłanych danych)
Opisane dodatkowo nagłówkami Content-Type oraz Content-Length
Odwołanie do zasobu (URI) wskazuje zwykle na program obsługujący, nie zaś na
pobierany zasób; odpowiedź jest zwykle dokumentem generowanym
HEAD

Jak GET, ale służy jedynie sprawdzeniu dostępności zasobu: zwracany w odpowiedzi tylko
nagłówek dokumentu
Platformy Technologiczne 2012
Rodzaje metod komunikatów
5

PUT


OPTIONS


Do usunięcia wyspecyfikowanego zasobu
TRACE


Żądanie przesłania informacji o opcjach związanych z wyspecyfikowanym
zasobem. Pozwala określić możliwości serwera bez wywoływania akcji na
zasobie.
DELETE


Wymusza zapisanie zawartości żądania pod wskazanym adresem URI
Do zdalnego wywoływania śledzenia wysłanego żądania. Pozwala klientowi
zobaczyć co zostało odebrane po drugiej stronie; użycie nagłówka Via daje
informację o ścieżce wysłanego żądania
CONNECT

Do użytku z serwerami proxy, które mogą się przełączać dynamicznie w stan
tunelowania
Platformy Technologiczne 2012
Elementy komunikatu odpowiedzi
6

Kody statusu
1xx
kody informacyjne, klient powinien odpowiedzieć na nie wykonując jakąś czynność,
2xx
żądanie zostało poprawnie obsłużone
3xx
plik został przeniesiony; w takim przypadku odpowiedź zazwyczaj zawiera nagłówek Location określający nowe położenie pliku
4xx
błąd klienta (np. 400 - nieprawidłowe zapytanie, 403 - dostęp do zasobu zabroniony, 404 - zasób nie znaleziony)
5xx
błąd serwera

Nagłówki odpowiedzi
Content-Encoding
określa sposób kodowania dokumentu
Content-Length
ilość bajtów przesyłanych w odpowiedzi
Content-Type
typ MIME zwracanego dokumentu
Expires
czas, po którym dokument należy uznać za nieaktualny i usunąć z pamięci podręcznej przeglądarki
Last-Modified
czas ostatniej modyfikacji dokumentu
Location
adres URL pod który przeglądarka powinna przesłać kolejne żądanie
Refresh
ilość sekund, po upłynięciu których przeglądarka powinna ponownie odświeżyć stronę. Nagłówek może także zawierać adres URL strony, którą
przeglądarka ma pobrać
Set-Cookie
cookie, które przeglądarka powinna zapamiętać
WWW-Authenticate
typ oraz obszar autoryzacji jaki przeglądarka powinna podać w nagłówku Authorization przesłanym w kolejnym żądaniu
Server
rodzaj oprogramowania serwera (analogicznie jak User-Agent)
Platformy Technologiczne 2012
Aplikacje ASP.NET
7

Obiektowe środowisko projektowania dynamicznych aplikacji WWW
Rozdzielenie projektowania prezentacji strony od kodu logiki biznesowej (logika strony)

Użycie komponentów dostarczanych przez .NET Framework - kontrolki Web, HTML działające po
stronie serwera
 Kod strony jest kompilowany przy pierwszym żądaniu strony ASP.NET (.aspx)
 Możliwość użycia języków programowania VB.NET, C#
Web Client
Organizacja UI - strony główne i strony z treścią

Zarządzanie stanem, bezpieczeństwem


HTTP
IIS

Aplikacja ASP.NET może składać się elementów:






Asp.Net Engine
Formularze Internetowe (Web Form) – pliki z rozszerzeniem (.aspx)
Usługi Web (Web services) – pliki z rozszerzeniem (.asmx)
Pliki logiki aplikacji – pliki z rozszerzeniem (.vb lub .cs)
Globalnej klasy aplikacji (.asax)
Pliku konfiguracyjnego Web.config
innych pliki typu: strona HTML, arkusz CSS
Platformy Technologiczne 2012
ASP.NET
Applications
.NET
Framework
Operating System
Pliki konfiguracyjne i katalogi
8

Pliki konfiguracyjne



Machine.config - ustawienia dotyczą wszystkich aplikacji na komputerze lokalnym
Web.config - ustawienia dotyczą tylko wybranej aplikacji
Katalogi aplikacji








Bin - zawiera wszystkie prekompilowane podzespoły (assemblies) wykorzystywane w
aplikacji
App_Browsers - zawiera tzw. „Browser Capabilities” – specjalne pliki, w których definiuje
się, jakich funkcjonalności od klienta przesyłającego w żądaniu określony łańcuch USERAGENT może oczekiwać serwer.
App_Code - zawiera pliki źródłowe klas wykorzystywanych na stronach.
App_Data - zawiera pliki z danymi dla aplikacji np. plikami baz danych Microsoft Access
(.mdb), XML itp.
App_Themes - zawiera pliku definiujące wygląd strony internetowej i kontrolek.
App_GlobalResources - zawiera globalne pliki zasobów aplikacji (.resx)
App_LocalResources - zawiera pliki zasobów dla określonej strony (.resx).
App_WebReferences - zawiera pliki połączenia serwisów Web z aplikacją (.wsdl)
Platformy Technologiczne 2012
ASP.NET - od wewnątrz
9




Kod zawarty w aplikacjach i usługach WWW opartych na ASP.NET jest
wykonywany w pojedynczej instancji procesu roboczego aspnet_wp.exe
Żądania dotyczące plików ASP.NET są obsługiwane przez rozszerzenie ASP.NET
ISAPI działające w przestrzeni adresów procesu IIS (inetinfo.exe)
Komunikacja pomiędzy tym procesem a procesem roboczym ASP.NET odbywa się
za pomocą potoku nazwanego
Izolacja aplikacji polega na utworzeniu odrębnych domen aplikacji w ramach
procesu roboczego (po jednej dla każdego katalogu wirtualnego IIS lub usługi
WWW opartej na ASP.NET)
Platformy Technologiczne 2012
Web Form
10

Sekcja dyrektyw strony




Sekcja kodu


Konfigurują środowisko, w którym będzie pracowała strona.
Określają sposób przetwarzania strony przez moduł wykonawczy HTTP.
Umożliwiają importowanie przestrzeni nazw, ładowanie podzespołów, których nie ma w danym momencie w GAC,
rejestrowanie nowych kontrolek z niestandardowymi nazwami tagów i prefiksami przestrzeni nazw.
Opatrywana tagiem <script> zawiera kod związany z daną stroną. Zawiera zwykle procedury obsługi zdarzeń i
funkcje pomocnicze. Kod aplikacji może zostać umieszczony bezpośrednio w pliku .aspx tzw. Code Inline lub w
dodatkowym pliku tzw. Code Behind.
Sekcja układu strony

Zawiera reprezentację widoku strony w postaci zbioru kontrolek serwerowych, tekstu oraz znaczników HTML, który jest
uszczegóławiany przez kod.
Single file
Separate files
code
<tags>
Form1.aspx
code
<tags>
Form1.aspx
Platformy Technologiczne 2012
Form1.aspx.vb
or Form1.aspx.cs
Web Form
11


Formularz Web składa się z znaczników ASP.NET oraz
logiki przetwarzania
Rozdzielnie kodu obsługi strony od zawartości interfejsu
użytkownika
Kod inline - kod znaczników i kod aplikacji (C#, VB)
współistnieją w pojedynczym pliku .aspx
 Kod ukryty - kod znaczników i kod aplikacji są w odrębnych
plikach (.aspx, .aspx.cx, dll)
 Kod ukryty - klasy częściowe – plik z kodem ukrytym jest
implementowany za pomocą klas częściowych
 Programiści i projektanci UI mogą pracować niezależnie

Platformy Technologiczne 2012
Składowe strony ASP.NET
12

Sekcja dyrektyw strony





Sekcja kodu



Konfiguruje środowisko, w którym będzie pracowała strona
Określa przestrzeń nazw, języka programowania, sposób przetwarzania strony
przez moduł wykonawczy HTTP (parametrów protokołu),
Umożliwia importowanie przestrzeni nazw, ładowanie podzespołów, których nie
ma w danym momencie w GAC, rejestrowanie nowych kontrolek z
niestandardowymi nazwami tagów i prefiksami przestrzeni nazw.
<%@ dyrektywa atrybut=”wartość” [, atrybut=wartość] %>
Opatrywana tagiem <script> zawiera kod związany z daną stroną.
Zawiera zwykle procedury obsługi zdarzeń i funkcje pomocnicze.
Sekcja układu strony (page layout)

Zawiera reprezentację widoku strony, który jest uszczegóławiany przez kod.
Zawiera kontrolki serwerowe, ciągi tekstu oraz znaczniki języka HTML. Wygląd
strony może być zdefiniowany na stronie poprzez ustawienie właściwości
indywidualnych elementów lub przy pomocy arkuszy styli.
Platformy Technologiczne 2012
Model strony ASP.NET
13
Page Object
<%@Page Language="C#" Debug="True" ...="etc" %>
<p>This is some text</p>
<a href="mypage.aspx">link text</a>
<img src="mypic.gif align="left" />
HTML Block
HTML Block
HTML\Text
Server Control
Other Objects
<input type="text" name="mytext"
size="40" runat="server" />
<input type="submit" name="gobtn"
value="Go" runat="server" />
<%@Import Namespace="System.Data" %>
<%@Import Namespace="System.XML" %>
Platformy Technologiczne 2012
Strony ASP.NET
14

Strona prezentacyjna ASP.NET: widok HTML
<%@ Page Language=„c#" Codebehind="WebForm1.aspx.cs"
SmartNavigation="true"%>
<html>
<body ms_positioning="GridLayout">
<form id="Form1" method="post" runat="server">
…
</form>
</body>
</html>
Platformy Technologiczne 2012
Strony ASP.NET
15

Code behind
using
using
using
using
using
using
using
using
using
using
System;
System.Collections;
System.ComponentModel;
System.Data;
System.Drawing;
System.Web;
System.Web.SessionState;
System.Web.UI;
System.Web.UI.WebControls;
System.Web.UI.HtmlControls;
namespace WebApplication1
{
/// <summary>
/// Summary description for WebForm1.
/// </summary>
partial class WebForm1 : System.Web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
{
// Put user code to initialize the page here
}
#region Web Form Designer generated code
}
Platformy Technologiczne 2012
Cykl życia strony
16



Przeglądarka użytkownika odwołuje się do pliku o
rozszerzeniu .aspx
ASP.NET odczytuje plik z systemu plików serwera
ASP.NET przegląda wszystkie znaczniki w pliku i
ładuje je do pamięci





jeśli znacznik zawiera atrybut runat=„server”,
ASP.NET ładuje odpowiednią kontrolkę serwerową.
Typ kontrolki jest określony przez nazwę znacznika.
znaczniki niezawierające atrybutu runat=„server”
stanowią zwykły kod HTML. ASP.NET w niezmienionej
postaci przekaże je do odbiorcy
Po załadowaniu wszystkich znaczników do pamięci
ASP.NET wykonuje odpowiedni kod programu
każdej z kontrolek serwerowych
Po zakończeniu przetwarzania kodu wszystkich
kontrolek serwerowych, ASP.Net wywołuje metodę
Render każdej kontrolki
Po wygenerowaniu strony ASP.NET uwalnia pamięć
Parse
ASPX
Engine
Request
ASPX
File
Instantiate
CodeGenerate behind
class
Gen’d
Page
Class
Request
Compile
Response
Response
Platformy Technologiczne 2012
Page
DLL
Instantiate,
Process and
Render
Dyrektywy strony
17







Składnia: <%@ dyrektywa atrybut=”wartość” [, atrybut=wartość] %>
@Page - definiuje atrybuty strony wykorzystywane przez kompilator stron.
Umożliwia określenie parametrów protokołu HTTP, określenie przestrzeni
nazw, definicję języka programowania.
@Control – definiuje atrybuty kontrolki użytkownika (user control)
@Register – tworzy powiązanie pomiędzy nazwa pliku kontrolki
użytkownika a nazwą odpowiadającego jej znacznika.
@Import - dołącza jawnie do strony przestrzeń nazw, co umożliwia
elementom strony dostęp do wszystkich klas i interfejsów zdefiniowanych w
tej przestrzeni
@Assembly - deklaruje stworzenie połączenia pomiędzy podzespołem a
bieżącą stroną, co pozwala na wykorzystywanie na stronie klas i
interfejsów zdefiniowanych w podzespole
@OutputCache - deklaruje sposób obsługi buforowania wyjścia dla strony
Platformy Technologiczne 2012
Klasyfikacja kontrolek serwerowych
18


Kontrolki serwerowe HTML (HTML Server Control) - z atrybutem runat=„server”
Kontrolki serwerowe Web (Web Server Control) –
<asp:xx …runat=„server”</asp:xx>






Standardowe – etykiety, pola tekstowe, listy, …
Data – odczyt informacji z pojemników danych
Navigation – kontrolki wyświetlające elementy nawigacyjne, takie jak ścieżki, menu
różnych typów
Login – udostępniające funkcje sterowania dostępem, rejestracji użytkownika
Walidacji danych
WebParts – umożliwiające wydzielanie części strony Web jako obszaru dynamicznego,
który autoryzowani użytkownicy mogą dostosować do swoich preferencji

Kontrolki użytkownika (Web User Controls)

Wbudowane kontrolki Web (WebCustom Controls)
Platformy Technologiczne 2012
Zdarzenia w modelu klient - serwer
19

Klient:


Zazwyczaj używane tylko z
kontrolkami HTML
Serwer:

Używane z każdym typem kontrolki

Kod jest kompilowany i uruchamiany
na serwere

Interpretowane przez przeglądarkę

Brak dostępu do zasobów serwera

Dostęp do zasobów serwera

Używa <SCRIPT
language="language">

Używa<SCRIPT language="vb"
runat="server"> lub <SCRIPT
language=“cs" runat="server">
Internet
.HTM
Pages
Platformy Technologiczne 2012
Internet
.ASPX
Pages
Postback
20


Postback polega na powracaniu do określonej strony WWW w czasie
trwania sesji z serwerem
ASP.NET Postback model – mechanizm przesyłania stanu kontrolekze strony
web do serwera oraz odtwarzaniu tych wartości gdy serwer zwróci
odpowiedź





Pozwala zachować właściwości kontrolkom pomiędzy wieloma odwołaniami do
serwera
Cross-Page Postback – możliwość skonfigurowania kontrolek do przesyłania
żądań na inne strony
IsPostBack – właściwość strony umożliwiająca programowe rozróżnienie
między żądaniami przesyłanymi zwrotnie a pierwszymi wywołaniami strony
AutoPostBack – właściwość kontroluje automatyczne odesłanie stanu
kontrolki do serwera
EnableViewState – umożliwia zachowanie stanu kontrolki po przesłaniu
żądania do serwera
Platformy Technologiczne 2012
Zdarzenia i Postback
21
Round trip event (natychmiastowe odwołanie do serwera)
<asp:Button Text="click me" Runat="server"
OnClick="DoClick" />
Click
Delayed event (zdarzenie obsłużone przy kolejnym odwołaniu do serwera)
TextChanged
<asp:TextBox Runat="server"
OnTextChanged="DoTextChanged" />
SelectedIndexChanged
<asp:ListBox Rows="3" Runat="server"
OnSelectedIndexChanged="DoSIChanged" />
AutoPostBack (wymusza natychmiastowe odwołanie do serwera)
TextChanged
<asp:TextBox Runat="server"
AutoPostBack="true"
OnTextChanged="DoTextChanged" />
Platformy Technologiczne 2012
Cross – Page Postback
22


Strony mogą wykonać post back do innych stron
Wykorzystywane właściwości:



control.PostBackUrl – adres docelowy żądania zwrotnego
Page.PreviousPage – zwraca referencję do strony, która generowała
żądanie zwrotne
PreviousPage.IsCrossPagePostBack – informacja, czy wystąpiło żądanie
zwrotne z innej strony
<html>
<body>
<form runat="server">
<asp:TextBox ID="Input" RunAt="server" />
<asp:Button Text="Test" PostBackUrl="PageTwo.aspx" RunAt="server" />
</form>
</body>
</html>
Platformy Technologiczne 2012
Przetwarzanie kontrolek
23
Init
Load
PreRender
SaveViewState
Inicjalizacja, dodanie do drzewa
Wykonanie kodu użytkownika
CreateChildControls() sprawdza renderowanie dzieci
Zapisanie aktualnego stanu
Render
Renderowanie odpowiedziEach control renders itself to the Response
Dispose
Strony i kontrolki są usuwane
Init
LoadViewState
Ostatni stan pobrany z ViewState
Load
Postback data
Postback events
Przesłane dane są przekazane do powiązanych kontrolek
Zdarzenia uruchamianie zgodnie z kolejnoscią w drzewie; Zdarzenie, które
wywołało postback wykonywane jest jako ostatnie
PreRender
SaveViewState
Render
Dispose
Platformy Technologiczne 2012
Obsługa błędów
24

Przekierowanie użytkownika na stronę błędu

Konfiguracja na poziomie strony



Konfiguracja na poziomie aplikacji


sekcja customErrors w pliku Web.config
Przechwytywanie i obsługa wyjątków




atrybut errorPage w dyrektywie Page
własność Page.ErrorPage
Obsługa wyjątków na poziomie lokalnym
Obsługa wyjątków na poziomie strony
Obsługa wyjątków na poziomie aplikacji
Śledzenie wykonywania aplikacji – tracing


Śledzenie wykonywania na poziomie strony
Śledzenie wykonywania na poziomie aplikacji
Platformy Technologiczne 2012
Kontrola zdarzeń aplikacji
25
Client
Request
Response
ASP.NET Web Server
IIS
ASP.NET HTTP Runtime
Application_BeginRequest
Application_AuthenticateRequest
Application_AuthorizeRequest
Application_EndRequest
Application_ResolveRequestCache
Application_UpdateRequestCache
Application_AquireRequestState
Application_ReleaseRequestState
Application_PreRequestHandlerExecute
Application_PostRequestHandlerExecute
Page execution
Platformy Technologiczne 2012
Zdarzenia aplikacji
26
Zdarzenie
Opis
BeginRequest
Zgłaszane w momencie rozpoczynania obsługi żądania
AuthenticateRequest
Zgłaszane gdy żądanie HTTP gotowe jest do uwierzytelnienia
AuthorizeRequest
Zgłaszane gdy żądanie HTTP gotowe jest do autoryzacji
ResolveRequestCache
Używane przez moduł pamięci podręcznej w celu obsługi danego żądania jeśli jest już przechowywane w
pamięci podręcznej
AcquireRequestState
Zgłaszane gdy aplikacja uzyska informacje o stanie (np. sesji) związanym z danym żądaniem
PreRequestHandlerExecute
Zgłaszane bezpośrednio przed rozpoczęciem realizacji procedury obsługi żądań przez HTTP handler
PostRequestHandlerExecute
Zgłaszane bezpośrednio po zakończeniu realizacji procedury obsługi żądań przez HTTP handler
ReleaseRequestState
Zgłaszane w celu zapamiętania danych o stanie sesji dla danego żądania
UpdateRequestCache
Zgłaszane gdy aplikacja uaktualnia pamięć podręczną dla danego żądania
EndRequest
Zgłaszane w momencie zakończenia obsługi żądania
PreSendRequestContent
Zgłaszane bezpośrednio przed wysłaniem zawartości żądania HTTP
PreSendRequestHeaders
Zgłaszane bezpośrednio przed wysłaniem nagłówków żądania HTTP
Error
Zgłaszane w momencie wystąpienia jakiegokolwiek błędu
Platformy Technologiczne 2012
Global.asax
27
using
using
using
using
using
System;
System.Collections;
System.ComponentModel;
System.Web;
System.Web.SessionState;
protected void Session_Start(Object sender,
EventArgs e)
{
}
protected void Application_BeginRequest(Object
sender, EventArgs e)
namespace BenefitsCS
{
{
}
/// <summary>
protected void Application_EndRequest (Object
/// Summary description for Global.
sender, EventArgs e)
/// </summary>
{
public class Global : System.Web.HttpApplication
}
{
protected void Application_AuthenticateRequest
/// <summary>
(Object sender, EventArgs e)
/// Required designer variable.
{
/// </summary>
}
private System.ComponentModel.IContainer
protected void Application_Error(Object sender,
components = null;
EventArgs e)
public Global()
{
{
}
InitializeComponent();
protected void Session_End(Object sender, EventArgs
}
e)
{
protected void Application_Start(Object sender,
}
EventArgs e)
protected void Application_End(Object sender,
{
EventArgs e)
}
{
…
}
Platformy Technologiczne 2012
Nawigacja i logowanie
28

Kontrolki ułatwiają nawigację pomiędzy stronami WWW

Plik .sitemap – opis struktury logicznej witryny (mapa witryny) to lista stron i adresów URL

Menu - wyświetla rozwijane lub wyskakujące menu w oparciu o dane przekazane przez SiteMapDataSource

TreeView – wyświetla dane jako hierarchiczny układ węzłów, które można rozwijać lub ukrywać;

SiteMapPath - pokazuje ścieżkę dostępu do aktualnej strony poprzez pośredniczące strony

SiteMapDataSource – dostęp do hierarchicznej listy łączy, zapisanej w pliku XML o domyślnej nazwie web.sitemap
<siteMap>
<siteMapNode title="Home" url="default.aspx">
<siteMapNode title="Tab1" url="subdir/default.aspx">
<siteMapNode title="SubPage" url="subdir/foo.aspx" />
</siteMapNode>
<siteMapNode title="Tab2" url="Tab/default.aspx">
<siteMapNode title="SubPage" url="Tab/foo.aspx“/>
</siteMapNode>
</siteMapNode>
</siteMap>

Login controls

Kontrolki dla logowania, tworzenia użytkowników, odzyskiwania haseł, i inne...
Platformy Technologiczne 2012
Przesyłanie informacji między stronami
29


Metoda GET lub POST
Przesyłanie informacji
 Response.Redirect("Info.aspx?imie="

+ "&nazwisko="
+ nazwiskoTextBox);
Pobieranie informacji przesłanych
 Request.Params["imie"]

Mechanizm Cross-Page Postback
Platformy Technologiczne 2012
+ imieTextBox.Text
Odwołanie do kontrolki na poprzedniej stronie
30
<html>
<body>
<form runat="server">
<asp:TextBox ID="Input" RunAt="server" />
<asp:Button Text="Test" PostBackUrl="PageTwo.aspx" RunAt="server" />
</form>
</body>
</html>
<html>
<body>
<asp:Label ID="Output" RunAt="server" />
</body>
</html>
<script language="C#" runat="server">
void Page_Load (Object sender, EventArgs e)
{
if (PreviousPage != null && PreviousPage.IsCrossPagePostBack) {
TextBox input = (TextBox) PreviousPage.FindControl ("Input");
Output.Text = "Hello, " + input.Text;
}
}
</script>
Platformy Technologiczne 2012
Walidacja danych
31


Obiekty sprawdzające poprawność danych wejściowych wprowadzanych
przez użytkownika
RequiredFieldValidator


RangeValidator


porównujący wartości dwóch pól tekstowych
CustomValidator


sprawdzający czy dane znajdują się w określonym przedziale wartości
CompareValidator


sprawdzający czy w danym polu została wprowadzona jakakolwiek wartość
sprawdzanie poprawności określone przez algorytm użytkownika
RegularExpressionValidator

sprawdzanie poprawności „ na dopasowanie wzorca” określonego wyrażeniem
regularnym
Platformy Technologiczne 2012
Dodawanie walidatora
32



Dodanie kontrolki sprawdzającej
Wybór kontrolki wejściowej do sprawdzania
Ustalenie właściwości kontroli
<asp:TextBox id="txtName" runat="server" />
<asp:Type_of_Validator
id="Validator_id"
runat="server"
ControlToValidate="txtName"
ErrorMessage="Message_for_error_summary"
Display="static|dynamic|none"
Text="Text_to_display_by_input_control">
</asp:Type_of_Validator>

Display: sposób wyświetlania kontrolki sprawdzania poprawności:

Static - do strony zostanie dodane miejsce przeznaczone na wyświetlanie informacji

Dynamic - miejsce na wyświetlanie informacji kontrolki zostanie dodane dynamicznie, jeśli dane okażą
się niepoprawne

None – wartość atrybutu ErrorMessage nigdy nie będzie wyświetlana
Platformy Technologiczne 2012
ValidationSummary
33

Wyświetla listę komunikatów o błędach, zgłoszonych przez znajdujące się na stronie kontrolki sprawdzania
poprawności

Może wyświetlać zawartość atrybutów text i error messages

Używa Text="*" do wskazania lokalizacji błędu
<asp:ValidationSummary id="valSummary"
runat="server"
HeaderText="These errors were found:"
ShowSummary="True"
DisplayMode="List"/>



DisplayMode – format wyświetlania podsumowania; List - jako listę w osobnych wierszach, BulletList- jako
listę wypunktowaną, SingleParagraph - w jednym paragrafie
EnableClientScript - włączenie/wyłączenie kodu generowanego po stronie klienta z podsumowania błędów
sprawdzania poprawności
ShowSummary – gdy true, podsumowanie zostanie wyświetlone na Web Form …
Page.IsValid Property
private void cmdSubmit_Click(object s, System.EventArgs e)
{
if (Page.IsValid)
{
Message.Text = "Page is Valid!";
// Perform database updates or other logic here
}
}
Platformy Technologiczne 2012
Strony wzorcowe
34


Strona wzorcowa - umożliwia sterowanie wspólnym wyglądem dla całej witryny
internetowej; zawiera tylko wspólne elementy
Strona zawartości - miejsce w którym ma zostać umieszczona treść strony
zawartości jest określone przez specjalną kontrolkę ContentPlaceHolder
ContentPlaceHolder1
ContentPlaceHolder2
Strona wzorcowa


Content1
+
Content2
ContentPlaceHolder1
=
Strona zawartości
ContentPlaceHolder2
Strona w
przeglądarce
Plik .master zawiera szablon wykorzystywany przez wszystkie strony aplikacji
Inne strony zawierają się jako kontrolki w stronie „Master Page”
Platformy Technologiczne 2012
Tworzenie strony wzorcowej
35

Dodawanie strony wzorcowej do projektu


Dodawanie strony zawartości


za pomocą menu Website\Add New Item, wybierając szablon Master Page
Dodatkowo zaznaczenie opcji Select master page. Strona zawartości korzystająca z tej strony
wzorcowej musi zawierać kontrolkę Content, która atrybut ContentPlaceHolderID jest równy wartości
ContentPlaceHolderID strony wzorcowej.
Modyfikowanie istniejącej strony Web na stronę używającą strony wzorcowej
Site.master
<%@ Master %>
<asp:ContentPlaceHolder
ID="Main"
RunAt="server" />
default.aspx
<%@ Page MasterPageFile="Site.master" %>
<asp:Content
ContentPlaceHolderID=
"Main" RunAt="server" />
</asp:Content>
Platformy Technologiczne 2012
http://.../default.aspx
Definiowanie i korzystanie z szablonu
36
<%@ Master %>
<html>
<body>
<!-- Banner shown on all pages that use this master -->
<table width="100%">
<tr>
<td bgcolor="darkblue" align="center">
<span style="font-size: 36pt; color: white">ACME Inc.</span>
</td>
</tr>
</table>
<!-- Placeholder for content below banner -->
<asp:ContentPlaceHolder ID="Main" RunAt="server" />
</body>
</html>
<%@ Page MasterPageFile="~/Site.master" %>
<asp:Content ContentPlaceHolderID="Main" RunAt="server">
This content fills the place holder "Main" defined in the master page
</asp:Content>
Platformy Technologiczne 2012
Motywy i skórki
37



Mechanizm stosowany dla kontrolek, stron i aplikacji polegający na grupowaniu właściwości
inicjujących kontrolki
Skórki to wizualne atrybuty kontrolek

narzucają wygląd kontrolek, stron i całych aplikacji

dodawane deklaratywnie lub programistycznie

fizycznie przechowywane w plikach .skin

domyślne i nazwane skórki
Motywy to kolekcje skórek

fizycznie przechowywane w podkatalogu motywów

globalne i lokalne motywy
Przypisanie motywu do aplikacji
<configuration>
<system.web>
<pages theme="BasicBlue" />
</system.web>
</configuration>
Przypisanie motywu do strony
<%@ Page Theme="BasicBlue">
Platformy Technologiczne 2012
Lokalizacja
38

ASP.NET wspiera budowę serwisów wielojęzycznych poprzez mechanizm
zasobów (resources)

2 typy zasobów:




Prosta struktura: klucz=wartość
Typy zasobów:




/App_LocalResources – dotyczące pojedynczej strony
/App_GlobalResources – dotyczące całości serwisu
Ciągi tekstowe
Grafika (obrazy i ikony)
Pliki tekstowe
Wykorzystanie zasobów:
<asp:Label runat=„server”
Text=„<%$ Resources: PlikRes, Etykieta1_Klucz %>” />

Mechanizm lokalizacji domyślnie wykorzystuje ustawienia językowe
przeglądarki
Platformy Technologiczne 2012
Wiązanie danych
39




Wiązanie danych – proces uzyskiwania danych ze źródła i dynamicznego
wiązania ich z pewną właściwością elementu wizualnego (kontrolki)
Kontrolki serwera można powiązać logicznie ze źródłem danych, używając
zbioru właściwości takich jak Text, DataSource, DataTextField
Powiązanie kontrolki z danymi uaktywniane jest poprzez wywołanie
metody DataBind.
Źródło danych – obiekt implementujący interfejs ICollection





Dane reprezentowane przez klasy kolekcji .NET (tablice, słowniki, listy, sterty,
kolejki)
Struktury danych definiowane przez użytkowników
Dane reprezentowane przez klasy bazodanowe (DataTable, DataSet,
DataReader)
Kontrolki źródeł danych
Widoki reprezentowane przez klasę DataView
Platformy Technologiczne 2012
Kontrolki prezentacji i źródeł danych
40

Wyświetlanie informacji:





GridView: Wyświetlanie rekordów w formie arkusza, umożliwia modyfikację i
usuwanie danych
DetailsView: wyświetla jeden rekord; wstawianie, modyfikacja, usuwanie
FormView: wyświetla jeden rekord w sformatowanej postaci; wstawianie,
modyfikacja, usuwanie
…
Kontrolki źródeł danych:




SqlDataSource: umożliwia odczytywanie i zmianę informacji w bazie danych
MS SQL
XMLDataSource: umożliwia odczytywanie i zmianę informacji w plikach XML
ObjectDataSource: umożliwia odczytywanie i zmianę danych zawartych w
niestandardowych obiektach
SiteMapDataSource: odczytywanie informacji z pliku mapy witryny
Platformy Technologiczne 2012
Wiązanie danych prostych
41

Łączenie kontrolek jest użyteczne w prostym
przekazywaniu danych między kontrolkami
<asp:DropDownList id="lstOccupation"
autoPostBack="True" runat="server" >
You selected: <asp:Label id="lblSelectedValue"
Text="<%# lstOccupation.SelectedItem.Text %>"
runat="server" />

Drugim sposobem jest DataBind
private void Page_Load(object sender, System.EventArgs e)
{
lblSelectedValue.DataBind();
}
Platformy Technologiczne 2012
Wiązanie przez właściwości
42

Używając kolekcji DataBindings możemy
przypisywać właściwości ze źródła danych do
kontrolki
Właściwość kontolki do której
przyisujemy wartość
txtCustomerAddress.DataBindings.Add("Text",
dsNorthwindData1.Customers, "Address");
txtCustomerCity.DataBindings.Add("Text",
dsNorthwindData1.Customers, "City");
Tabela źródła danych
Kolumna
Platformy Technologiczne 2012
Wiązanie danych złożonych
43

Wiązanie danych złożonych - gdy wiążemy kontrolkę listy
(DropDownList,CheckBoxList, RadioButtonList, ListBox) lub kontrolkę iteracyjną
(Repeater, DataList, DataGrid) z jedną lub kilkoma kolumnami danych
// data loading
DataTable __dataTable;
__dataTable = __dataHandler.Load();
// data binding
DDList.DataSource = __dataTable;
DDList.DataTextField = "Name";
DDList.DataValueField = "empID";
DDList.DataBind();
Właściwość
Opis
DataSource
• DataSet zawierający dane
DataMember
• DataTable w DataSet
DataTextField
• Wyswietlane pole z DataTable
DataValueField
• Pole, które po zaznaczeniu staje się wartością
Platformy Technologiczne 2012
Kontrolki wyświetlające dane
44
Nazwa
Opis
GridView
Wyświetla wiele rekordów w formie arkusza (modyfikacja, usuwanie)
DetailsView
Wyświetla jeden rekord na raz, używając prostych instrukcji HTML
(wstawianie, modyfikacja, usuwanie)
FormView
Wyświetla jeden rekord w sformatowanej postaci
(wstawianie, modyfikacja, usuwanie)
DataList
Powtarza zdefiniowany przez projektanta szablon dla każdego rekordu z
źródła danych
Repeater
Zbliżona do DataList , ale nie zawiera własnych elementów HTML.
Platformy Technologiczne 2012
GridView
45

Zbliżona do kontrolki DataGrid


Generuje zbiór danych w postaci tabel HTML
Wbudowane funkcje: sortowanie, stronicowanie, wybieranie, modyfikowanie
i kasowanie

Bogaty asortyment typów komórek: ImageFields, CheckBoxFields

Wiele możliwości modyfikacji UI
<asp:SqlDataSource ID="Employees" RunAt="server"
ConnectionString="server=localhost;database=northwind;..."
SelectCommand="select lastname, firstname, title from employees" />
<asp:GridView DataSourceID="Employees" Width="100%" RunAt="server" />
Platformy Technologiczne 2012
Typy komórek GridView
46
Nazwa
Opis
BoundField
Generuje kolumny z tekstem
ButtonField
Generuje kolumny z przyciskami (push button, image, or link)
CheckBoxField
Generuje kolumny z polem wyboru dla typu Bool
CommandField
Generuje kontrolki dla wyboru i edycji danych w GridView
HyperLinkField
Generuje kolumny z łączami
ImageField
Generuje kolumny z obrazkami
TemplateField
Generuje kolumny z użyciem szablonów HTML
Platformy Technologiczne 2012
Typy komórek GridView
47
<asp:SqlDataSource ID="Employees" RunAt="server"
ConnectionString="server=localhost;database=northwind;..."
SelectCommand="select photo, lastname, firstname, title from employees" />
<asp:GridView DataSourceID="Employees" Width="100%" RunAt="server"
AutoGenerateColumns="false" >
<Columns>
<asp:ImageField HeaderText="" DataField="photo" />
<asp:TemplateField HeaderText="Name">
<ItemTemplate>
<%# Eval ("firstname") + " " + Eval ("lastname") %>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField HeaderText="Title" DataField="title" />
</Columns>
</asp:GridView>
Platformy Technologiczne 2012
Kontrolki źródła danych
48

Zapełnienie kontrolek danymi poprzez wiązanie nie bezpośrednio z
kolekcją danych, ale z kontrolką do obsługi źródła danych
Nazwa
Przeznaczenie
SqlDataSource
Łączy kontrolki z bazami SQL
AccessDataSource
Łączy kontrolki z bazami Access
XmlDataSource
Łączy kontrolki z danymi XML
ObjectDataSource
Łączy kontrolki z komponentami
SiteMapDataSource
Łączy kontrolki nawigacyjne z danymi nawigacyjnymi
(mapą witryny)
Platformy Technologiczne 2012
SqlDataSource
49

Deklaratywne podpinanie danych do baz SQL

Dwustronne podpinanie danych

SelectCommand

InsertCommand, UpdateCommand i DeleteCommand

Możliwość umieszczania wyników zapytania w pamięci podręcznej Cache

Parametryzowane operacje
<asp:SqlDataSource ID="Titles" RunAt="server"
ConnectionString="server=localhost;database=pubs;integrated security=true"
SelectCommand="select title_id, title, price from titles" />
<asp:DataGrid DataSourceID="Titles" RunAt="server" />
Platformy Technologiczne 2012
SqlDataSource
50

Najważniejsze właściwości:





ConnectionString – ciąg znaków połączenia umożliwiający dostęp do bazy
danych,
SelectCommand, InsertCommand, UpdateCommand, DeleteCommand – ciąg
znaków, które zawierają polecenie SQL lub nazwa składowanej procedury
DataSourceMode – tryb pobierania danych przez polecenie Select (DataSet lub
DataReader)
ProviderName – dostawca danych np. System.Data.SqlClient
SqlDataSource wspiera także deklaratywne umieszczanie elementów w
pamięci podręcznej cache. Właściwości:


EnableCaching – włączenie/wyłączenie mechanizmu pamiętania w pamięci
podręcznej
CacheDuration – czas przechowywania zawartości źródła danych w pamięci
Platformy Technologiczne 2012
XmlDataSource
51

Deklaratywne wiązanie do danych XML

Wspiera umieszczanie danych w pamięci podręcznej cache i transformacje XSL

Jednostronne wiązanie danych
Nazwa
Opis
DataFile
Ścieżka do pliku XML
TransformFile
Ścieżka do pliku XSL
EnableCaching
Włączone/wyłączone korzystanie z pamięci podręcznej Cache
CacheDuration
Czas przetrzymywania danych w pamięci podręcznej (sekundy)
CacheExpirationPolicy
Typ CacheDuration
CacheKeyDependency
Zależność Cache na określonym kluczu
XPath
Wyrażenie XPath służące filtrowaniu danych
Platformy Technologiczne 2012
ObjectDataSource
52


Deklaratywne podpinanie do komponentów

Wiąże z danymi poprzez dedykowane klasy zaimplementowane w warstwie dostępu do danych (lub pobieranie danych z usługi
Web)

Separacja kodu dostępu do danych od warstwy prezentacji
Dwustronne podpinanie danych

SelectMethod, InsertMethod, UpdateMethod i DeleteMethod

Możliwość umieszczania wyników zapytania w pamięci podręcznej Cache

Parametryzowane operacje
Nazwa
Opis
TypeName
Typ komponentu (nazwa klasy)
SelectMethod
Metoda komponentu wykonująca zapytanie typu select
InsertMethod
Metoda komponentu wykonująca zapytanie typu insert
UpdateMethod
Metoda komponentu wykonująca zapytanie typu update
DeleteMethod
Metoda komponentu wykonująca zapytanie typu delete
EnableCaching
Włączenie/wyłączenie pamięci podręcznej Cache
Platformy Technologiczne 2012
ObjectDataSource
53

ObjectDataSource.SelectMethod może wskazywać na metody statyczne i instancyjne

Jeżeli metody instancyjne są używane:


ODS tworzy nową instancję klasy przy każdym wywołaniu

Klasa musi posiadać domyślny publiczny konstruktor
Zdarzenia ObjectCreated and ObjectDisposing mogą zostać użyte do przeprowadzenia
dodatkowej inicjalizacji lub sprzątania po obiekcie
Nazwa
Opis
CacheDuration
Czas przetrzymywania danych w pamięci podręcznej (sekundy)
SqlCacheDependency
Zależność Cache na określonym elemencie bazy danych
SelectParameters
Parametry dla SelectMethod
InsertParameters
Parametry dla InsertMethod
UpdateParameters
Parametry dla UpdateMethod
DeleteParameters
Parametry dla DeleteMethod
Platformy Technologiczne 2012
Zarządzanie stanem
54



Zarządzanie stanem – zdolność do przechowywania i przekazywania
informacji np. pomiędzy żądaniami pojedynczego użytkownika.
Kryteria mechanizmów przechowywania i zarządzania stanem: zasięg,
czas życia, dopuszczalny rozmiar przechowywanych danych oraz po jakiej
stronie są przechowywane.
Zarządzać możemy na poziomie:



Aplikacji (application state) - do przechowywania danych i stosowania w obrębie całej aplikacji
(dla każdego użytkownika tej aplikacji)
 np. dane konfiguracyjne, liczba sesji, ...
Sesji (session state) – do przechowywania danych i dostępu do danych w obrębie sesji (dla
pojedynczego użytkownika)
 np. stan karty zakupów, email klienta, ...
Strony (page state) - do przechowywania informacji strony sieci WWW pomiędzy kolejnymi
przetworzeniami strony
 np. zawartość pól tekstowychTextBoxes, stan CheckBoxes, ...
Platformy Technologiczne 2012
Typy zarządzania stanem
55
Serwer
Klient
Application state
Cookies
• Informacje dostępne dla wszystkich
użytkowników aplikacji
• Pliki tekstowe przechowujące
informacje o stanie
ViewState
Session state
• Informacje dostępne tylko z kontekstu
danej sesji
Baza danych
• Również może wspierać zarządzanie
stanem
• Utrzymuje wartości pomiedzy
wieloma wołaniami do tej samej
strony
Query strings
• Informacje dołączane do URL
Platformy Technologiczne 2012
Obiekty zarządzania stanem
56

Dane o stanie aplikacji są przechowywane w obiekcie klasy HttpApplicationState,
typu słownikowego zawierającego pary typu klucz-wartość.





Zasoby – szybki dostęp (stan aplikacji jest przechowywany w pamięci); jednak
przechowywanie dużych bloków danych w stanie aplikacji może wypełnić pamięć
serwera.
Ulotność – stan aplikacji jest przechowywany w pamięci, jest usuwany z niej w momencie
zatrzymania lub restartu aplikacji lub w momencie awarii serwera.
Skalowalność – stan aplikacji nie jest dzielony na serwery w farmie serwerów.
Współbieżność – do stanu aplikacji może jednocześnie odwoływać się wiele wątków
(zapewnienie mechanizmów bezpiecznej aktualizacji przechowywanych obiektów).
Dane o stanie sesji użytkownika są przechowywane w obiekcie klasy
HttpSessionState, typu słownikowego zawierającego pary typu klucz-wartość.



Zawartość tego obiektu jest dostępna poprzez właściwości Session klasy Page i
HttpContext.
Niepowtarzalny identyfikator sesji, służy do identyfikacji kolejnych żądań pochodzących
od tego samego klienta.
Właściwość Session.Mode wskazuje gdzie przechowywane są dane o sesji: InProc,
StateServer lub SqlServer.
Platformy Technologiczne 2012
Zapamiętywanie stanu kontrolki
57

Wszystkie kontrolki dziedziczą właściwość ViewState po klasie bazowej
Conrol

Dwa najczęściej spotykane problemy:

Wysoki czas ładowania – strona musi serializować i deserializować obiekt

Zwiększony rozmiar strony – dane przechowywane w ukrytym formularzu
_VIEWSTATE
<input type="hidden" name=„_VIEWSTATE"
value="dDwtMTA4MzE0MjEwNTs7Pg==" />
<%@ Page EnableViewState="False" %>
<asp:ListBox id="ListName" EnableViewState="true"
runat="server">
</asp:ListBox>
Platformy Technologiczne 2012
Dostęp do stanu serwera
58

Dostęp do informacji:




PageState
zapis:
ViewState["counter"] = counterVal;
odczyt:
int counterVal = (int) ViewState["counter"];
SessionState
zapis:
Session["cart"] = shoppingCart;
odczyt:
DataTable shoppingCart = (DataTable) Session["cart"];
ApplicationState
zapis:
Application["database"] = databaseName;
odczyt:
string databaseName = (string) Application["databaseName"];
Trwałość zmiennych



Zmienne sesyjne utrzymują wartość przez czas trwania sesji (20 minut)
Czas trwania sesji może być zmieniony w web.config:
Zmienne aplikacyjne są usuwane po wywołaniu Application_End
Platformy Technologiczne 2012
Przechowywanie stanu sesji
59

In - proc




Przechowywane w przestrzeni
adresowej ASP.NET worker
process
Szybkie działanie,
Dane są tracone gdy proces jest
restartowany
Out – of – proc

State Server

Usługa Windows ASP.NET State
Service


Instalowana domyślnie, ale nie
uruchomiona
Niezależne od IIS – proces
aspnet_state.exe

Konfiguracja IP i portu
stateConnectionString=„tcpip=127.0.0.1:42424”

SQL Server


<sessionState mode="SQLServer"
sqlConnectionString="data source=SQLServerName;
Integrated security=true" />

Dane sesyjne przechowywane w
SQL Server
Wymaga stworzenia baz danych
InstallSqlState.sql /
InstallPersistantSqlState.sql
Największa niezawodność –
możliwość klastrowania
Platformy Technologiczne 2012
Cookies
60

Tworzenie cookie:
HttpCookie objCookie = new HttpCookie("myCookie");
DateTime now = DateTime.Now;
objCookie.Values.Add("Time", now.ToString());
objCookie.Values.Add("ForeColor", "White");
objCookie.Values.Add("BackColor", "Blue");
objCookie.Expires = now.AddHours(1);
Response.Cookies.Add(objCookie);

Odczyt cookie:
HttpCookie objCookie = Request.Cookies["myCookie"];

Zapis cookie:
lblTime.Text
= objCookie.Values["Time"];
lblTime.ForeColor = objCookie.Values["ForeColor"];
lblTime.BackColor = objCookie.Values["BackColor"];
Platformy Technologiczne 2012
Sesje cookieless
61

Każda aktywna sesja jest identyfikowana i śledzona poprzez Session ID

Session ID jest przesyłane między klientem a serwerem przez URL

Cookieless sessions

Session ID zakodowane w URL
http://server/(h44a1e55c0breu552yrecobl)/page.aspx


Nie można używać absolutnych URL
Ustawianie sesji Cookieless

Session state jest konfigurowany w sekcji <SessionState> pliku Web.config

cookieless = true
<sessionState cookieless="true" />
Platformy Technologiczne 2012