Aplikacje
uruchamiane w oknie przeglądarki internetowej najczęściej komunikują się z
użytkownikami za pośrednictwem formularzy. Użytkownicy zmuszani są do podawania
swoich danych wejściowych, numerów kart kredytowych lub innych osobistych
informacji. Na stronach internetowych funkcjonują również fora dyskusyjne,
księgi gości i rozmaite systemy komentarzy. W większości przypadków dane,
wprowadzane przez użytkowników, muszą być sprawdzane. Brak tego procesu,
określanego jako walidacja danych wejściowych, może powodować występowanie
błędu w działaniu tworzonych przez nas aplikacji. Sprawdzanie danych
wejściowych może odbywać się w kodzie zarządzanym. Nie jest to jednak polecana
praktyka (choć w pewnych okolicznościach, jest niezastąpiona), wymaga bowiem
często wysyłania wielokrotnych zapytań do serwera, co wydłuża czas działania
aplikacji i zwiększa obciążenie sieciowe centralnego komputera. Znacznie
lepszym rozwiązaniem jest sprawdzanie poprawności danych wejściowych po stronie
klienta. Platforma .NET udostępnia nam kilka kontrolek, które możemy
wykorzystać do tego celu. Poniżej, na podstawie prostych przykładów, postaram
się omówić najważniejsze z nich.
Wyobraźmy
sobie stronę internetową, zawierającą pole tekstowe (w naszym przypadku, o
nazwie: „TextBox1”) oraz przycisk („Button1”). Po naciśnięciu przycisku, dane z
pola tekstowego są pobierane, następnie wykonywana jest na nich pewna operacja.
Użytkownik ma jednak możliwość naciśnięcia przycisku, nie wpisując uprzednio
żadnego tekstu w wymagane pole. Może to powodować pojawianie się błędów w wielu
sytuacjach. Aby temu zapobiec, możemy wykorzystać kontrolkę typu:
„RequiredFieldValidator”. Odnajdziemy ją (podobnie jak kilka innych,
przeznaczonych do walidacji danych wejściowych) w pasku narzędzi, w grupie o
nazwie: „Validation”.

Żeby
użyć kontrolki musimy przeciągnąć ją na ekran, zawierający określoną formatkę w
trybie Design. Wyobraźmy sobie, że użytkownik będzie wpisywał z polu tekstowym
swoje imię, następnie po naciśnięciu przycisku wyświetlana będzie informacja,
zawierająca podany tekst. Jeżeli natomiast użytkownik naciśnie przycisk,
pozostawiając pole tekstowe pustym, operacja, która powinna wykonać się po
naciśnięciu przycisku nie nastąpi, a zamiast niej, na tej samej stronie pojawi
się prośba o podanie swojego imienia. Operacja ta, wykonywana będzie po stronie
klienta, bez komunikacji z serwerem, nie nastąpi więc przeładowanie
wyświetlanej w przeglądarce strony. Aby uzyskać opisywany efekt naciskamy lewym
przyciskiem myszy, na znajdujący przeciągnięty na formatkę walidator i
modyfikujemy jego właściwości w następujący sposób.
|
Pole
|
Zawartość
|
|
ErrorMessage
|
Musisz
podać swoje imię
|
|
ControlToValidate
|
TextBox1
( o ile nasze pole tekstowe umieszczone na formatce, nosi właśnie taką nazwę)
|
Klikamy
również dwukrotnie na przycisk, znajdujący się na formatce i uzupełniamy
operację, która wykona się po jego naciśnięciu.
protected void
Button1_Clicked(object sender, EventArgs e)
{
this.Response.Write(“Podałeś
następujące imię: “ + this.TextBox1.Text);
}
Jeżeli
pozostawimy pole tekstowe pustym i naciśniemy przycisk znajdujący się na
ekranie, w oknie przeglądarki pojawi się stosowna informacja.

Jeżeli
uzupełnimy pole tekstowe i ponownie naciśniemy przycisk, wykonana zostanie
operacja przypisana do tego przycisku.

Innym
przypadkiem, kiedy musimy zastosować proces walidacji danych wejściowych jest
sytuacja, w której użytkownik musi podać w oknie przeglądarki cyfry, należące
do określonego zakresu. Przykładowo, możemy poprosić użytkownika o podanie dnia
miesiąca. Wiemy jednak, że mogą być to jedynie liczby z zakresu 1-31.
Tymczasem, kierując się różnymi pobudkami, osoba wpisująca dane może podać
dowolną liczbę, mieszczącą się w polu tekstowym. Aby zapobiec takiej sytuacji
możemy zastosować specjalną kontrolkę o nazwie RangeValidator. Wykorzystując
Visual Studio 2005 stwórzmy nową formatkę, a następnie, przeciągając obiekty z
paska narzędzi, umieśćmy na niej pole tekstowe, przycisk oraz oraz kontrolkę
walidującą RangeValidator. Następnie skonfigurujmy formatkę w następujący
sposób:
|
Pole
|
Zawartość
|
|
ErrorMessage
|
Podałeś
liczby z wykraczające poza określony zakres
|
|
ControlToValidate
|
TextBox1
( o ile nasze pole tekstowe umieszczone na formatce, nosi właśnie taką nazwę)
|
|
MaximumValue
|
31
|
|
MinimumValue
|
1
|
Teraz,
podając wartość wykraczającą poza zdefiniowany zakres i naciskając przycisk w
oknie przeglądarki zobaczymy komunikat zdefiniowany we właściwości kontrolki o
nazwie ErrorMessage.
Kolejną
kontrolką, którą możemy wykorzystywać do walidacji danych wejściowych naszej
aplikacji ASP.NET jest CompareValidator. Możemy ją wykorzystać na przykład do
porównania zawartości dwóch pól tekstowych, znajdujących się na formatce.
Tworzymy nową stronę zawierającą dwa pola tekstowe, przycisk oraz kontrolkę
CompareValidator. Skonfigurujmy kontrolkę tak, jak podano w poniższej tabeli a
następnie otwórzmy formatkę w oknie przeglądarki internetowej.
|
Pole
|
Zawartość
|
|
ErrorMessage
|
Podane
napisy różnią się od siebie
|
|
ControlToValidate
|
TextBox2
|
|
ControlToCompare
|
TextBox1
|
Po
naciśnięciu przycisku pobrana zostanie informacja zostanie informacja z pola o
nazwie TextBox2. Następnie zostanie ona porównana z zawartością kontrolki zdefiniowanej
jako ControlToCompare. Jeżeli zawartość pól tekstowych będzie się różnić od
siebie, na ekranie zostanie wyświetlona stosowna informacja.

Twórcy
aplikacji internetowych często spotykają się z sytuacją, w której wprowadzane
przez użytkownika dane wejściowe muszą być zgodne z określonym wzorcem.
Przykładowo, nie chcemy, żeby w polu przeznaczonym na podanie adresu e-mail
użytkownik podawał jakieś inne dane. Zdajemy sobie sprawę, że adresy poczty
internetowej w Internecie, występują zazwyczaj w postaci:
[nazwa_konta]@[domena_internetowa], przy czym domena składa się z przynajmniej
dwóch ciągów znakowych, przedzielonych znakiem „kropki” (na przykład
„poczta.pl”). Chcemy, by użytkownik podawał w danym polu tekstowym właśnie tego
typu ciąg. W przeciwnym wypadku przetwarzanie danych powinno zostać przerwane,
o czym użytkownik powinien być powiadomiony stosownym komunikatem (najczęściej
zawierającym prośbę o podanie prawidłowego adresu poczty). Opisaną powyżej
funkcjonalność możemy w prosty sposób osiągnąć wykorzystując kontrolkę
RegularExpressionValidator.
Podobnie
jak w poprzednich przypadkach umieśćmy na formatce pole tekstowe, przycisk oraz
kontrolkę służącą do walidacji – w tym przypadku będzie to właśnie
RegularExpressionValidator. Następnie skonfigurujmy ten ostatni obiekt w
następujący sposób.
|
Pole
|
Zawartość
|
|
ErrorMessage
|
Podany
adres
|
|
ControlToValidate
|
TextBox1
|
|
ValidationExpression
|
\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
|
Po
uruchomieniu formatki w oknie przeglądarki internetowej, w polu tekstowym
podajmy ciąg znaków nie będących prawidłowym adresem pocztowym, na przykład:
„piotrek#poczta.pl”. Po naciśnięciu przycisku na stronie zostanie wyświetlona
stosowna informacja.

Zastanawiacie
się pewnie, czym jest tajemniczy ciąg znakowy podany w polu właściwości
ValidationExpression. Jest to wyrażenie regularne reprezentujące opisany
powyżej format adresu poczty. Tworzenie wyrażeń regularnych wykracza
zdecydowanie poza zakres tego kursu. W tym momencie wystarczą nam informacje o
tym, że pierwsza część wyrażenia - \w+([-+.']\w+)* - reprezentuje ciąg
znakowy, składający się z przynajmniej jednego znaku. Następnym znakiem, który
powinien pojawić się w naszym ciągu to „@”, w końcu ostatnia część ciągu
reprezentuje dwa lub więcej ciągi znakowe przedzielone znakiem „kropki”.
Zainteresowanych zasadami tworzenia własnych wyrażeń regularnych odsyłam do
dokumentacji MSDN, gdzie zostało to opisane w bardzo przejrzysty sposób.
Pozostali zadowolą się na początku kilkunastoma zdefiniowanymi schematami
dostarczanymi wraz z Visual Studio i dostępnymi po naciśnięciu przycisku „...”,
przy właściwości: ValidationExpression” w oknie „Properties” (zazwyczaj prawa,
dolna część ekranu). Zachęcam jednak wszystkich do zapoznania się z tworzeniem
własnych wyrażeń regularnych, ponieważ wcześniej czy później, w pracy każdego
programisty ASP.NET, schematy dostarczane wraz z Visual Studio przestają być
wystarczające.