ASP.NET Walidacja danych
15 września, 2010 Dodaj komentarz
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+)*
-
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.
-
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 *.
-
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 ... }
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; } }