niedziela, 15 maja 2011

ASP.NET WebForms - Podstawy informacje

W tym poście podstawy ASP.NET WebForms. Architektura WebForms umożliwia najszybsze tworzenie stron WWW w technologi .NET (o ile nie najszybsze ze wszystkich mi znanych technologii). Z pewnością jest ona świetna do stron typu wizytówki, proste portale.
Znajduje także zastosowanie w bardziej skomplikowanych projektach, jednak - przynajmniej mi - brakuje w niej oddzielenia kodu od warstwy prezentacji. Jest to właściwie niemożliwe do osiągnięcia. Co za tym idzie trudniej tworzyć automatyczne testy dla naszego produktu.
Dodatkowym obciążeniem jest system zapamiętywania stanu kontrolek - ViewState. Powoduje on zwiększenie ruchu pomiędzy przeglądarką użytkownika i serwerem. Tak czy inaczej Microsoft rozwija tę technologię. WebFormsy posiadają bardzo dużą ilość gotowych kontrolek - które po podpięciu źródła danych oferują bogate możliwości prezentacji danych użytkownikowi.

1. Podstawowe pocjęcia
Na początek trochę podstawowych informacji, związanych głównie z samym protokołem HTTP:
Request - żądanie przez przeglądarkę danych z serwera WWW - za pomocą obiektu tej klasy w ASP można wysłać informacje z ciasteczek, query string itp.
Response - odpowiedź serwera na zapytanie przeglądarki -  pozwala np. na zapis ciasteczek na komputerze użytkownika
GET - metoda w protokole HTTP stosowana przede wszystkim do pobierania danych, tam gdzie użytkownik ma możliwość powrotu do stanu wcześniejszego po pewnym czasie poprzez zdefiniowany adres
POST - metoda w HTTP pozwalająca na przesyłanie danych (najczęściej z formularza)
IsPostBack - metoda w ASP.NET pozwalająca na sprawdzenie czy jest to pierwsze wywołanie strony, czy też PostBack - czyli wysłanie strony do serwera (np odświeżenie przez użytkownika za pomocą klawisza F5):


Code:
protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                //Do something
            }
        }

Właściwość tę najczęściej wykorzystujemy w przypadku kiedy w metodzie Load strony podpinamy jakieś źródło danych czy też wypełniamy kontrolki danymi. Dzięki temu unikamy zdublowaniu danych w kontrolkach.

Zapamiętywanie informacji
W ASP.NET WebForms mamy podobnie jak w MVC i innych technologiach internetowych możliwość zapamiętywania danych pomiędzy kolejnymi przejściami między stronami. Mechanizmów jest kilka, a dzielą się one na dwie grupy:
działające po stronie serwera:
+ bezpieczeństwo
+ nie zwiększa ilości przesyłanych danych
- zużycie zasobów serwera (pamięć, procesor)
działające po stronie klienta:
+ brak obciążenia serwera
- zwiększenie zużycia pasma
- mniejsze bezpieczeństwo przesyłanych danych 

Pliki Cookie:
  

Code:
//1. Sprawdzamy czy na komputerze użytkownika jest już plik cookie
            if (Request.Cookies["name"] != null)
            {
                //2. Przypsianie zmiennej zawartości pliku cookie
                string valueFromCookie = Request.Cookies["name"].Value;
            }
            else
            {
                //3. Zapisujemy nowy plik cookie na komputerze użytkownika jeżeli
                //go tam jeszcze nie ma
                Response.Cookies["name"].Value = "Value of Cookie";
                //Jeżeli nie ustawimy właściwości Expires plik cookie zostanie usunięty
                //po wyłączeniu przeglądarki użytkwonika
                //Uwaga - aby usunać plik cookie należy mu przypisać datę wcześniejszą od aktualnej
                //nie mamy fizycznego dostępu do dysku użytkownika!
                Response.Cookies["name"].Expires = DateTime.Now.AddDays(20);
            }

QueryString:
Query string możemy zdefiniować w następujący sposób:
adres strony/ + querystring
Tak więc QueryString to nic innego jak parametry które są przesyłane pomiędzy wywołaniami za pomocą adresu www. Jeżeli chodzi o sam adres www musimy sami go stworzyć. Czytaniem wartości QueryString zajmuje się odpowiednia klasa, która przyporządkowuje wartości do słownika:
Dla adresu http://localhost:56505/Default.aspx?FirstName=Jacek&LastName=Kowalski użyjemy:


Code:
string firstName = Request.QueryString["FirstName"];
                string lastName = Request.QueryString["LastName"];

Jak więc widać QueryString tworzymy w następujący sposób:
po adresie strony stawiamy pytajnik - ?
klucze oddzielamy od siebie za pomocą znaku ampresanda &
klucze zapisujemy w postaci klucz=wartosc

W każdym przypadku powinniśmy parsować to co otrzymamy od użytkownika. Zabezpieczamy się tym samym przed uruchomieniem złośliwego oprogramowania. Aby przeparsować dane od użytkownika możemy użyć metody HtmlEncode:


Code:
Server.HtmlEncode(firstName);

ViewState:
Wartości kontrolek na formie, aby zostały odtworzone po np. przeładowaniu formatki, są zapisywane do ukrytego pola - ViewState. Domyślnie wartość każdej kontrolki jest zapamiętywana w ViewState. Można jednak wyłączyć zapamiętywanie dla tych kontrolek dla których wiemy że nie jest to potrzebne.

Session:
Jest to sposób na przechowywanie danych po stronie serwera. Dla każdego użytkownika tworzony jest nowy taki obiekt i w zależności od ustawień aplikacji trzymany przez pewien określony czas:


Code:
if (Session["Login"] != null)
                {
                    //Do something
                }
                else
                {
                    Session["Login"] = "Guest";
                }

Należy pamiętać, że każda zmienna sesji obciąża serwer i powoduje rezerwację pamięci dla każdego użytkownika, który w danym czasie wszedł na naszą witrynę.

Application
Podobnie jak w przypadku sesji jest to mechanizm działający po stronie serwera. Różnica między zmienną sesyjną a aplikacji jest taka, iż zmienna aplikacji jest tylko jedna tzn. tworzy się w momencie pierwszego wejścia na stronę, a kończy swój okres życia w momencie wyłączenie całkowicie aplikacji.


Code:
if (Application["VisitorCount"] != null)
                {
                    //Do something
                }
                else
                {
                    Application["VisitorCount"] = ((int)Application["VisitorCount"]) + 1;
                }

Brak komentarzy:

Prześlij komentarz