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