BETA
Aby się zalogować, najpiew wybierz portal.
Aby się zarejestrować, najpiew wybierz portal.
Podaj słowa kluczowe
Słowa kluczowe muszą mieć co najmniej 3 sąsiadujące znaki alfanumeryczne
Pole zawiera niedozwolone znaki

Baza wiedzy











Walidacja danych w ASP.NET

28-08-2006 23:35 | janoszzz
Atrykuł ten przedstawia zagadnienia związane z kontrolą wprowadzanych danych w formularzach. Pozwala on poszerzyć wiedzę o kontrolkach walidacyjnych, które można użyć w celu sprawdzenia poprawności wpisywanych danych. Znajdziemy w nim również podstawowe informacje o wyrażeniach regularnych.

1. Wstęp

2. Podstawowe własności kontrolek

3. Kontrolka RequiredFieldValidation

4. Kontrolka CompareValidator

5. Kontrolka RangeValidator

6. Kontrolka RegularExpressionValidator

7. Kontrolka CustomValidator

8. Kontrolka ValidationSummary

 

1. Wstęp

 

            Jednym z podstawowych problemów osób, które tworzą strony WWW jest sprawdzanie poprawności danych wpisywanych we wszelakiego rodzaju formularze. Proces ten nazywany jest walidacją. W przypadku stron tworzonych w HTML problem ten rozwiązywano stosując skrypty napisane w JavaScript lub VBScript. Rozwiązanie to było skuteczne, jednakże aby móc je zastosować należało oprogramować metody pozwalające na walidację.

O wiele lepiej wygląda sytuacja w przypadku ASP.NET. Twórcy postanowili ułatwić nam zadanie. Do dyspozycji mamy sześć kontrolek, które ułatwiają ten proces. Pozwala nam to na sprawdzenie czy pole zostało uzupełnione, czy wartości mieszczą się w odpowiednim zakresie, czy wpisany tekst spełnia wyrażenie regularne oraz wiele innych (mamy możliwość sami oprogramować walidację).

Walidacja w ASP.NET jest przeprowadzana na dwa różne sposoby: po stronie klienta lub po stronie serwera. Wybór ten nie zależy od użytkownika. Kontrolka sama sprawdza, czy przeglądarka obsługuje walidacje i jeżeli tak to jest ona przeprowadzana po stronie klienta. Redukuje to ilość „przeładowań” strony. W przypadku gdy walidacja po stronie klienta jest nie możliwa, rolę tą przejmuje serwer. Należy zaznaczyć, że detekcja po której stronie ma odbyć się walidacja, jak również sam proces walidacji odbywa się bez żadnej dodatkowej pracy programisty.

W ASP.NET mamy do dyspozycji 6 kontrolek walidacyjnych:

  • RequiredFieldValidation
  • CompareValidator
  • RangeValidator
  • RegularExpressionValidator
  • CustomValidator
  • ValidationSummary

 

2. Podstawowe własności kontrolek

 

Kontrolki te posiadają niektóre metody i własności wspólne. Spowodowane jest to faktem, iż dziedziczą z klasy BaseValidator. Należą do nich:

  • ControlToValidate – Wartość ta wskazuje z która kontrolką jest powiązana kontrolka walidacji.
  • ErrorMessage – Zawiera treść komunikatu, jaki ma być wyświetlony, jeżeli wartość wpisana w polu sprawdzanym nie przejdzie walidacji.
  • IsValid – Zawiera boolowską wartość, określa czy wartość wpisana w kontrolce powiązanej jest poprawna
  • Validate – Metoda sprawdza poprawność danych w kontrolce powiązanej i aktualizuje własność IsValid.
  • Display – Służy do ustawienia sposobu wyświetlenia komunikatu o błędzie. Do dyspozycji mamy następujące możliwości:
    • None – Komunikat nie jest w ogóle wyświetlany
    • Static – Miejsce na komunikat jest od razu rezerwowane na stronie, nawet jeżeli ten komunikat nie jest wyświetlany.
    • Dynamic – Miejsce na komunikat jest tworzone dynamicznie i dodawane tylko wtedy, gdy dane pole nie przechodzi walidacji i trzeba wyświetlić komunikat o błędzie.

 

3. Kontrolka RequiredFieldValidation

 

Pierwszą kontrolką jaką omówię jest kontrolka RequiredFieldValidation. Jest to bardzo prosta kontrolka, która umożliwia sprawdzanie czy użytkownik wpisał coś do danego pola. Używamy ją w następujący sposób:

 

[Kod C#]

Pole tekstowe: <asp:TextBoxid="poletxt1"runat="server"/>

< asp : RequiredFieldValidator ID ="valid1" runat ="server" ControlToValidate ="poletxt1"

ErrorMessage ="Musisz wpisac jakas wartosc do pola" Display ="dynamic"/>

 

Powyższy kod tworzy pole testowe, które jest sprawdzane przez kontrolkę walidacyjną. Należy pamiętać, aby wskazać z jakim polem ma być powiązana kontrola walidacyjna. Nie wypełnienie tego pola będzie powodowało wystąpienie błędu i wyświetlenie komunikatu, który jest wpisany w ErrorMessage:

 

 walidacja001

 

 

4. Kontrolka CompareValidator

 

Kontrola ta pozwala porównywać dwie wartości między sobą. Do podstawowych zastosowań można zaliczyć porównywanie haseł w trakcie wprowadzania nowego hasła lub sprawdzanie kolejności dat. Zacznijmy od prostego przykładu:

 

[Kod C#]

    Pole 1: <asp:textboxid="poletxt2"runat="server"/><br/>

    Pole 2: <asp:textboxid="poletxt3"runat="server"/><br/>

    < asp : CompareValidator id ="valid2" runat ="server"

    ControlToValidate ="poletxt2" ControlToCompare ="poletxt3" Operator ="Equal"

    ErrorMessage ="Pole 1 i Pole 2 muszą mieć takie same wartości" Display ="dynamic"/>

 

Zadaniem tej kontrolki jest sprawdzenie, czy pola tekstowe mają takie same wartości. W atrybucie ControlToCompare wskazujemy kontrolkę, z którą będzie porównywana kontrolka poddana walidacji. Dodatkowo pojawia się atrybut Operator. Odpowiada on za sposób porównywania. Może on przyjąć następujące wartości:

  • DataTypeCheck – sprawdza czy typy danych w kontrolkach są poprawne
  • Equal -  sprawdza czy kontrolki mają jednakowe wartości (ustawione domyślnie)
  • GreaterThan sprawdza czy jedna kontrolka jest większa od drugiej
  • GreaterThanEqual sprawdza czy jedna kontrolka nie jest mniejsza od drugiej
  • LessThan sprawdza czy jedna kontrolka jest mniejsza od drugiej
  • LessThanEqual sprawdza czy jedna kontrolka nie jest większa od drugiej
  • NotEqual sprawdza czy kontrolki nie są sobie równe

 

W przypadku tej kontrolki można również dokonać porównania w stosunku do ustalonej stałej. Otrzymuje się to wpisując stała w polu ValueToCompare:

 

[Kod C#]

    Pole 1 (wieksze niz 10): <asp:textboxid="poletxt4"runat="server"/><br/>

    < asp : CompareValidator id ="valid3" runat ="server"

    ControlToValidate ="poletxt4" ValueToCompare ="10" Operator ="GreaterThan" Type ="Integer"

    ErrorMessage ="Pole 1 musi być większe od 10" Display ="dynamic"/>

 

Jak widzimy w przypadku porównywania pola do wartości należy podać typ danych jakie będą porównywalne. Do wyboru mamy:

  • Currency
  • Double
  • Date
  • Integer
  • String (ustawiony domyślnie)

 

5. Kontrolka RangeValidator

 

Kontrolka RangeValidator pozwala na sprawdzenie czy wpisana wartość mieści się w przedziale. Aby użyć tej kontrolki należy zdefiniować następujące atrybuty:

  • MaximumValue – wartość maksymalna jaka może być wpisana
  • MinimumValue - wartość minimalna jaka może być wpisana
  • Type – typ danych wpisywanych

 

Jako przykładu użyję kontrolki, która pozwala na wpisanie liczb całkowitych z przedziału <0; 10>

 

[Kod C#]

    Pole 1: (Wartości od 0 do 10)<asp:textboxid="poletxt5"runat="server"/>

    < asp : RangeValidator id ="valid4" runat ="server"

    ControlToValidate ="poletxt5" MaximumValue ="10" MinimumValue ="0"

    Type ="Integer" ErrorMessage ="Pole musi przyjąć wartości z przedziału 0 - 10" Display ="dynamic"/>

 

   

6. Kontrolka RegularExpressionValidator

 

Kontrolka ta jest chyba najbardziej użyteczną kontrolką walidującą. Pozwala ona na sprawdzenie czy wpisane wyrażenie odpowiada wyrażeniu regularnemu. Same użycie kontrolki jest bardzo proste. Przedstawiony poniżej przykład sprawdza poprawność wpisanego maila:

 

[Kod C#]

    E-mail: <asp:textboxid="poletxt6"runat="server"/>

    < asp : RegularExpressionValidator id ="valid5" runat ="server" ControlToValidate ="poletxt6"

       ValidationExpression ="^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$"

       ErrorMessage ="Nie wpisałes poprawnego adresu e-mail."

       display ="dynamic" />

 

Wystarczy w atrybucie ValidationExpression podać wyrażenie regularne. Zgodnie z Wikipedią: Wyrażenia regularne (ang. regular expressions, w skrócie regex) to wzorce, które opisują łańcuchy symboli. Teoria wyrażeń regularnych jest związana z teorią tworzenia tzw. języków naturalnych. Wyrażenia regularne mogą określać zbiór pasujących łańcuchów, mogą również wyszczególniać istotne części łańcucha.

 

Najpopularniejsze symbole używane w wyrażeniach regularnych to:

Symbol

Opis działania

.

Dowolny znak, oprócz ‘\n’

[]

Dowolny znak ze zbioru znajdującego się wewnątrz nawiasów. Przedziały znaków oznacza się ze znakiem ‘–‘ np. [a-zA-Z]. Wewnątrz nawiasów ‘\b’ wyjątkowo oznacza backspace

[^ ]

Dowolny znak nie należący do podanego zbioru np. [^0-9] – nie cyfra

^

Dopasowanie musi zaczynać się na początku wiersza

$

Dopasowanie musi kończyć się z końcem wiersza

()

Grupowanie wyrażeń. Ciąg dopasowany do wyrażenia wewnątrz nawiasów zostanie zapamiętany i będzie potem dostępny.

(?<nazwa>)

Grupa nazwana. Umożliwia dostęp do grupy bez podawania jej numeru.

|

Lub – alternatywa znaków, lub zbiorów.

*

Zero lub więcej razy

+

Jeden lub więcej razy

?

Zero lub jeden raz

{n}

Dokładnie n razy

{n,m}

Od n do m razy

{n,}

n lub więcej

*?

Leniwy kwalifikator * - próbuje dopasować jak najmniej elementów, analogicznie +?, ??, ...

\t, \r, \n, \v

Jak zawsze: tab, powrót karetki, nowa linia, pionowy tab

\znak_specjalny

Po prostu ten znak np. \$ - oznacza $; \^ - oznacza ^ itd.

\b

Teoretyczna granica pomiędzy ciągiem alfanumerycznym, a białym znakiem

\w

Skrót dla znaku ze zbioru znaków alfanumerycznych

\W

Zaprzeczenie \w

\s

Dowolny biały znak

\S

Zaprzeczenie \s

\d

Cyfra

\D

Zaprzeczenie \d

\liczba np \1

Odwołanie wsteczne. Oznacza dokładnie ten sam ciąg, jaki został dopasowany do grupy o numerze ‘liczba’.

\k<nazwa>

Odwołanie wsteczne do grupy nazwanej

 

Przykładowe wyrażenia regularne

Wzór

Opis

^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$

Sprawdza poprawność wpisanego maila.

^([0-1][0-9]|[2][0-3]):([0-5][0-9])$

Sprawdza poprawność podanej godziny.

\b(([01]?\d?\d|2[0-4]\d|25[0-5])\.){3}([01]?\d?\d|2[0-4]\d|25[0-5])\b

Sprawdza poprawność podanego adresu IP.

^((4\d{3})|(5[1-5]\d{2})|(6011))-?\d{4}-?\d{4}-?\d{4}|3[4,7]\d{13}$

Sprawdza poprawność podanego numeru karty kredytowej.

(http|https|ftp)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z
0-9\-\._\?\,\'/\\\+&%\$#\=~])*

Sprawdza poprawność wpisanego adresu internetowego

   

7. Kontrolka CustomValidator

 

Dzięki tej kontrolce możemy sprawdzać walidowane pola w sposób dowolny. Umożliwia ona stworzenie własnej funkcji, która będzie sprawdzać poprawność walidowanego pola. Aby można było użyć własnej funkcji, kontrolka ta musi znać nazwę tej funkcji.

 

[Kod C#]

< asp : CustomValidator id ="vali6" runat ="server"

    ControlToValidate ="ID pola do sprawdzania"

    ClientValidationFunction ="Nazwa funkcji sprawdzającej po stronie klienta"

    OnServerValidate ="Nazwa funkcji sprawdzającej po stronie serwera"

    ErrorMessage ="Komunikat o błędzie" Display ="Dynamic"/>

 

Dochodzą do zadeklarowania dwa nowe atrybuty kontrolki:

  • ClientValidationFunction – Zawiera nazwę funkcji, która jest odpowiedzialna za walidację po stronie klienta. Najczęściej używa się w tym celu funkcji napisanych w JavaScript.
  • OnServerValidate – Służy do walidacji po stronie serwera. Używana jest gdy nie ma możliwości sprawdzenia po stronie klienta (chyba, że programista wykluczył możliwość sprawdzania po stronie klienta).

 8. Kontrolka ValidationSummary

 

Kontrolka ta służy do zebrania wszystkich komunikatów wyświetlanych przez powyższe kontrolki walidacyjne w jednym miejscu. Używa jej się w następujący sposób:

 

   

[Kod C#]

<asp:ValidationSummaryid="valSummary"runat="server"HeaderText="Wykryte błędy:"ShowSummary="true"DisplayMode="BulletList"/>

 

Oraz formularz do walidacji:

 

[Kod C#]

    Podaj imie: <asp:TextBoxid="imie"runat="server"/>

    < asp : RequiredFieldValidator ID ="valid1" runat ="server" ControlToValidate ="imie"

         ErrorMessage ="Wpisz imie">*</asp:RequiredFieldValidator><br/>

    Podaj nazwisko: <asp:TextBoxid="nazwisko"runat="server"/>

    < asp : RequiredFieldValidator ID ="valid2" runat ="server" ControlToValidate ="nazwisko"

          ErrorMessage="Wpisz nazwisko">*</asp:RequiredFieldValidator><br/>

    < asp : Button ID ="Button1" runat ="server" Text ="Button" />

 

Po naciśnięciu przycisku OK formularz zostanie sprawdzony, a wynik sprawdzenia pojawi się w miejscu gdzie umieściliśmy kontrolkę ValidationSummary.

 

 walidacja002

 

Koło pól, które zawierają błąd pojawi się dodatkowo symbol „*”. Efekt taki osiągamy umieszczając ten symbol w znacznikach kontrolek odpowiedzialnych za walidację.

            W przypadku tej kontrolki możemy wybrać jeden z trzech sposobów wyświetlania komunikatów o błędzie – DisplayMode:

  • w formie wypunktowanej – BulletList
  • w formie komunikatów, które są jeden pod drugim - List
  • w formie komunikatów, które są jeden za drugim – SingleParagraph

 

Kontrolka ta umożliwia również wyświetlenie listy błędów w postaci okienka pop-up. W tym celu należy ustawić następujący atrybut ShowMessageBox="true"

 

Mam nadzieje, że mój artykuł pozwolił na poznanie szczegółów wykorzystania kontrolek walidacyjnych w środowisku ASP.NET. Życzę udanej zabawy w ich wykorzystywaniu.

Załączniki:

Podobne artykuły

Komentarze 4

mnova
mnova
0 pkt.
Nowicjusz
21-01-2010
oceń pozytywnie 0
Hmm...to bardzo ciekawe, ze komentarze artykulu magicznie znikaja, co jakis czas. Dziwne jest rowniez to, ze ta anomalia dotyczy tylko i wylacznie tego artykulu. Czyzby ktos manipulowal tymi danymi?
User 111549
User 111549
15 pkt.
Nowicjusz
21-01-2010
oceń pozytywnie 0
Cześć, możesz powiedzieć coś więcej? Po wrzuceniu wczoraj tego tekstu nie było komentarzy. Dziś twierdzisz że coś znika? A może chodzi Ci o część 2 tego tekstu - tam było i jest ich sporo??
User 79106
User 79106
290 pkt.
Junior
21-01-2010
oceń pozytywnie 0
Bardzo dziwne.
Piszesz, że komentarze do tego artykułu znikają co jakisz czas. Ten artykuł został opublikowany dopiero wczoraj :/
Czy to był pierwszy Twój komentarz do tego artykułu, czy jakiś komentarz już zniknął? Jeżeli tak to proszę podaj przybliżoną datę i treść tego komentarza.

Z danych którymi dysponujemy że od 1. grudnia napisałeś 2 komentarze do artykułu - pierwszy to ten na którego odpowiadam, drugi w odpowiedzi na komentarz Artura.

Zapewniam, że nikt nie ma możliwości maniupulowania danymi.
mnova
mnova
0 pkt.
Nowicjusz
21-01-2010
oceń pozytywnie 0

witam,
wczoraj wystawilem swoj komentarz do tego artykulu. Wieczorem natomiast komentarz zniknal. Za bardzo nie wiem dlaczego, bo po dodaniu komentarza pojawil sie on na portalu. Nie mam do nikogo pretensji, moze to tylko jakis "bug".

pozdrawiam

pkt.

Zaloguj się lub Zarejestruj się aby wykonać tę czynność.