ASP.NET Walidacja danych

 

Dość sporo wprowadzających postów z zakresu ADO.NET może nieco znużyć osoby, które nie lubią zbytnio zagłębiać się w temat. Dla odmiany zatem, w kolejnym odcinku moich zmagań nad projektem, przedstawiam zagadnienie walidacji danych wprowadzanych przez użytkownika w ASP.NET. Wykorzystane przy tym będą wbudowane mechanizmy, które sprawiają, że walidacja może być prosta i przyjemna, a przynajmniej nie tak straszna jak może się wydawać.

Przeprowadzenie walidacji w ASP.NET możliwe jest zarówno za pomocą kontrolek dostępnych w Visual Studio Web Developer bez nakładu pracy w postaci pisania kodu, a także za pomocą standardowo tworzonego kodu przez programistę. Na potrzeby prezentacji zagadnienia załóżmy, że potrzebujemy dokonać walidacji wprowadzanego przez użytkownika adresu e-mail. Po umieszczeniu kontrolki TextBox w szablonie strony i nadaniu jej odpowiedniego dla potrzeb identyfikatora, można przystąpić do rozmieszczania kontrolek z grupy Validation znajdujących się w Toolboxie. Wypełniając w Internecie różne formularze np. rejestracyjne zauważyć można, że po wprowadzeniu błędnych danych obok pola tekstowego pojawia się np. czerwona gwiazdka wskazująca, że w tym miejscu wystąpił błąd. To zadanie w ASP.NET jest realizowane przez kontrolkę RequiredFieldValidator. Najlepszym miejscem na jej umieszczenie jest sąsiedztwo walidowanego pola. W przypadku wspomnianej kontrolki należy zwrócić uwagę na jej właściwości:

  • ControlToValidate – określa kontrolkę, dla której przeprowadzona ma być walidacja; w tym miejscu należy podać jej identyfikator
  • Display – ustawienie w tym polu wartości Dynamic powoduje, że kontrolka RequiredFieldValidator jest renderowana tylko jeśli istnieje potrzeba wyświetlenia informacji o błędzie
  • Text – napis, który pojawi się w momencie wystąpienia błędu, w miejscu w którym umieszczona została kontrolka RequiredFieldValidator
  • ValidationGroup – umożliwia określenie grupy kontrolek na której przeprowadzana będzie jednoczesna walidacja

W celu przeprowadzenia walidacji adresu e-mail należy dodatkowo umieścić kontrolkę RegularExpressionValidator. Posiada ona również podane powyżej właściwości, które należy tak samo wypełnić. Ponadto w tym przypadku należy zwrócić uwagę na właściwość ValidationExpression. Pozwala ona na wybranie jednego spośród standardowo wbudowanych wyrażeń. W przypadku Visual Studio Express są to w zależności od kraju wyrażenia pozwalające na walidację numeru telefonu, kodu pocztowego, adresu e-mail, URL, numer ubezpieczenia. Możliwe jest również oczywiście zdefiniowanie własnego wyrażenia. Dla potrzeb przykładu wybieramy opcję “Internet e-mail address”, która powoduje ustawienie wyrażenia walidacyjnego na:

\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
Jak widać, szczególnie dla osób nie mających na co dzień do czynienia z wyrażeniami regularnymi jest to znaczne uproszczenie 🙂 Efekt takiego wykorzystania wbudowanych kontrolek jest następujący:
  1. Walidacja następuje w momencie utracenia przez pole tekstowe focusa, czyli po przejściu do innej kontrolki. Nie jest przy tym wykonywane przeładowanie strony – od razu dostajemy informację o błędzie w tym miejscu.
  2. Zasada przy tym jest taka, że jeśli w polu tekstowym nie znalazły się żadne dane, to wyświetlana jest wiadomość ustawiona we właściwości Text kontrolki RequiredFieldValidator, typowo znak *.
  3. Jeśli natomiast w polu tekstowym znalazły się już jakieś dane, lecz nie spełniają one postawionych w wyrażeniu regularnym wymagań to pojawia się informacja ustawiona we właściwości Text kontrolki RegularExpressionValidator.

Właściwość ValidationGroup jest wykorzystywana w momencie, gdy chcemy po wykonaniu walidacji dokonać dalszych operacji, np. po naciśnięciu przycisku. W tym celu kontrolka Button również udostępnia właściwość ValidationGroup. Jak nietrudno się domyślić ustawienie dla niej wartości takiej jak dla opisywanych kontrolek zapewnia dopilnowanie tego, aby wszystkie pola w ramach danej grupy przeszły pozytywnie walidację. Umieszczenie w zdarzeniu Click dla kontrolki Button kodu:

if (Page.IsValid)
{
    //Further operations
    ...
}

sprawia, że kontynuacja nie jest możliwa dopóki wszystkie walidowane pola w ramach grupy nie zostaną wypełnione poprawnie.

 

W różnego rodzaju formularzach można również spotkać prośbę o powtórzenie np. adresu e-mail. Do tego celu, po zaimplementowaniu opisanej funkcjonalności, dodajmy drugie pole tekstowe oraz kontrolkę CustomValidator, która umożliwia stworzenie własnego kodu walidacyjnego. W tym celu wykorzystywane jest zdarzenie ServerValidate. Przykładowy kod realizujący to zadanie może wyglądać następująco:

protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
{
    try
    {
        if (TextEmailTextBox.Text == TextEmailTextBox2.Text)
        {
            args.IsValid = true;
        }
        else
        {
            args.IsValid = false;
        }
        
    }
    catch (Exception ex)
    {
        args.IsValid = false;
    }
}

Walidacja taka następuje po naciśnięciu przycisku, z tego powodu należy przypisać właściwości ValidationGroup kontrolki CustomValidator taką samą wartość jaką posiada dany Button.

Dodaj komentarz