11. Sprawdzanie poprawności danych wejściowych

11. Sprawdzanie poprawności danych wejściowych

Autor: Piotr Gaszewski

Opublikowano: 3/10/2006, 12:00 AM

Liczba odsłon: 54240

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.

@STRONA@

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.

Jak wykorzystać Copilot w codziennej pracy? Kurs w przedsprzedaży
Jak wykorzystać Copilot w codziennej pracy? Kurs w przedsprzedaży

Wydarzenia