Kontrola formulářů v ASP.NET

28. února 2007 | Radek Kropík | Komentáře (13)


Na mnoha webových stránkách se nacházejí různé formuláře. Ať už jsou to formuláře na odesílání e-mailů, příspěvků do návštěvní knihy nebo dokonce o objednávku určitého zboží, jedno mají společné. Vždy po odeslání formuláře je třeba zkontrolovat, zda zadané údaje odpovídají požadavkům. Existují totiž uživatelé, kteří jen tak pro legraci například zadají do pole určeného pro telefonní číslo nějakou nesmyslnou změť čísel nebo znaků a pokud by takovýto vstup prošel až do naší databáze, způsobil by nám určitě nemalé problémy. A právě takovýmto snahám uživatelů záškodníků se snaží zabránit právě ovládací prvky na kontrolu formulářů - validátory. Validátorů samozřejmě existuje několik druhů a nic vám nebrání na jedno formulářové pole použít těchto validátorů více než jeden. Můžete například zkontrolovat, zda bylo do pole vůbec něco zadáno a pokud ano, zda zadaná data odpovídají očekávanému vstupu. Pokud očekáváme například jako vstup telefonní číslo, můžeme zkontrolovat, bylo-li zadáno skutečně číslo a pokud číslo zadáno bylo, můžeme navíc ověřit, zda se jedná o platný formát telefonního čísla – tj. 9 číslic. A jaké vlastně můžeme použít validátory?

Required Field Validator

Tento validátor se používá všude tam, kde je od uživatele požadován nějaký vstup. Pokud do formulářového pole není nic zadáno a uživatel se pokusí formulář odeslat, validátor vypíše chybovou hlášku a bude požadovat zadání dat.

Compare Validator

Tento validátor kontroluje, zda je do pole zadána hodnota shodná s referenční hodnotou nebo s hodnotou jiného pole. Toho se využívá například při zadávání hesla při registraci, kdy dochází ke kontrole, zda je heslo ve dvou polích shodné a nedošlo k překlepu.

Range Validator

Pomocí tohoto validátoru můžete zkontrolovat, zda je vstupní údaj v určeném rozsahu. Pokud například požadujete po uživateli, aby zadal číslo mezi 0 a 20 a uživatel zadá 25, dojde k chybě a validátor uživatele upozorní, že zadané číslo není v povoleném rozsahu.

Regulal Expression Validator

Tento validátor je nejzajímavější ze všech validátorů. Pomocí regulárních výrazů můžete určit přesně v jakém formátu vstupní údaje požadujete. Používá se ho zejména při kontrole telefonních čísel, e-mailových adres, poštovních směrovacích čísel, URL adres apod. A jak může takový regulární výraz vypadat?

E-mailová adresa: \w+([-+.‘]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
URL adresa: http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?

Validation Summary

Tento prvek vlastně nic nekontroluje, ale slouží k souhrnnému výpisu chybových hlášení ze všech použitých validátorů. Pokud nechcete chybová hlášení validátorů vypisovat přímo u vstupních polí formulářů ale třeba na začátku stránky, bude se vám hodit právě tento ovládací prvek.

Na následujícím jednoduchém příkladu si ukážeme použití všech validátorů. Každé formulářové pole bude kontrolováno jedním z výše představených validátorů. Pro jednoduchost nebudeme validátory kombinovat, to už si jistě vyzkoušíte sami.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 
  Transitional//EN" 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Validátory</title>
</head>
<body>
 <form id="form1" runat="server">
   Zadejte jméno, e-mail, heslo a věk mezi 0 - 70 lety
   <asp:ValidationSummary ID="ValidationSummary1"
   runat="server" />
 <table border="0" cellpadding="2" cellspacing="1">
  <tr>
   <td>Jméno:</td>
   <td>
    <asp:TextBox ID="Jmeno" runat="server"
       Width="150px" />
    </td>
    <td>
     <asp:RequiredFieldValidator ID="RequiredFieldValidator1"
     Display="Dynamic"  runat="server"
     ErrorMessage="Nezadali jste jmeno"
ControlToValidate="Jmeno">*</asp:RequiredFieldValidator>
   </td>
  </tr>
  <tr>
   <td>E-mail:</td>
   <td>
     <asp:TextBox ID="Email" runat="server" Width="150px" />
   </td>
   <td>
     <asp:RegularExpressionValidator
   ID="RegularExpressionValidator1" runat="server"
   ControlToValidate="Email" Display="Dynamic"
   ErrorMessage="Zadaná e-mailová adresa je chybná"
   ValidationExpression=
   "\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*">*
   </asp:RegularExpressionValidator>
    </td>
   </tr>
   <tr>
     <td>Heslo:</td>
     <td>
       <asp:TextBox ID="Heslo1" TextMode="Password"
     runat="server" Width="150px" />
    </td>
    <td>
      <asp:CompareValidator ID="CompareValidator1"
   runat="server" ErrorMessage="Hesla se neshodují"
   Display="Dynamic" ControlToCompare="Heslo2"
ControlToValidate="Heslo1">*</asp:CompareValidator>
   </td>
   </tr>
   <tr>
    <td>Heslo2:</td>
    <td>
        <asp:TextBox TextMode="Password" ID="Heslo2"
   runat="server" Width="150px" />
      </td>
      <td> </td>
     </tr>
     <tr>
       <td>Věk:</td>
       <td>
       <asp:TextBox ID="Vek" runat="server"
   Width="150px" />
    </td>
    <td>
      <asp:RangeValidator ID="RangeValidator1"
   runat="server" ErrorMessage="Věk není v rozsahu 0 - 70"
   MaximumValue="70" MinimumValue="0"
   ControlToValidate="Vek"
   Display="Dynamic">*</asp:RangeValidator>
    </td>
  </tr>
 </table>
<asp:Button ID="Odeslat" runat="server" Text="Odeslat" />
 </form>
</body>
</html>

A to je prozatím o validátorech vše. V příštím článku si představíme poslední z řady validátorů a to Custom Validator.

Tisk
 

Komentáře k článku

Počet komentářů: 13

Vložené příspěvky vyjadřují názory svých autorů a redakce neodpovídá za jejich obsah.

Odesílatel Komentář
maro
1. března 2007
No nevím. ale je to od MicroSoftu. nebude to blbnout v jiných browserech než IE?! Já používám Operu. IE nee.
Ice
2. března 2007
V jinych prohlizecich to neblbe. Pokud se nepletu. tak validace probiha na klientovi. takze by to melo o Javascriptu a ten pobezi. Jediny jiny je CustomValidator. ktery muze bezet i na serveru. ale obecne asp.net nema s prohlizecema problemy.
Fantomasmag
2. března 2007
Přesně tak. jak píše Ice - .NET Framework vytvoří ke kontrole formuláře JavaScript podle prohlížeče klienta a ten vloží do stránky s formulářem. kontrola tudíž probíhá klientským scriptem. Mám vyzkoušeno jak v IE. tak i v FF a Opeře. Jediný problém nastává. pokud má klient vypnutý JavaScript. to pak kontrola na klientovi nefunguje.
Ice
6. března 2007
Mel bych takovou otazecku. Jak je to vlastne s tema validatorama a javascriptem? Mimo IE mam doma i Firefox. V tom firefoxu mi nejedou moje javascripty. ktere v IE jedou. Ovsem validatory jedou v obojem. Jak to?
Fantomasmag
6. března 2007
No. možná je to tím. jak se chovají různé prohlížeče k JavaScriptu. Skripty pro validátory (mimo Custom Validatoru) jsou vytvářeny přesně podle prohlížeče klienta a proto fungují všude. Jestli ti to nejede jen v FF a v IE nebo Opeře jo. asi budeš muset ten skript trochu poupravit. aby to FF přelouskal ;-)
Vasek P
7. března 2007
S asp.net zacinam a narazil jsem na tenhle clanek. Chci se zeptat na asi blbou otazku. ale jdou ty skripty co to vytvori nejak upravovat?
Ice
7. března 2007
To asi ne. Osobne bych to videl tak. ze ti to ty skripty nageneruje samo a pokud se ti to nelibi. tak muzes pouzit custom validator a nastavis mu svuj script pro testovani na klientovi.
Vasek P
7. března 2007
Diky Ice. A ten custom validator se pouziva stejne jako ty ostatni? Sorry za blby otazky. ale fakt teprv zacinam
Ice
8. března 2007
Vasek P: No v podstate ano. Nastavis mu. ktery control se ma validovat. a kdy (validationgroup). Akorat mu musis napsat. co ma delat. Ale pokud mu pro validaci na klientovi napises javascript. ktery bude pouze hlidat. aby tam neco bylo. tak budes mit svuj CustomValidator. ktery se bude chovat stejne jako RequiredValidator.
Vanda
23. března 2007
Ty validatory nejak nechtej pracovat v IE7. Mate s tim nekdo zkusenosti?
Ice
23. března 2007
To Vanda: Mam s tim zkusenosti. Pracujou. presne tak. jak maji. Nemas zakazane Javascripty?
Vanda
23. března 2007
Ice: No ony ty validatory fungujou. ale nejak divne. Formular zkontrolujou a kdyz je tam chyba tak se neodesle. ale problem je v tom. ze v IE7 se mi nevypisujou zadne hlasky co mam v ErrorMessage u validatoru. Javascripty mam povoleny. Pritom v IE6 to funguje.
Fantomasmag
28. března 2007
Vando. zkus ještě jednou projít všechna nastavení zabezpečení v IE7. popřípadě ho zkus přeinstalovat nejnovější verzí. Pokud si správně vzpomínám. v nějaké beta verzi IE7 to takhle zlobilo.




V komentářích není povoleno HTML a bude před odesláním formuláře odstraněno. Všechny URL začínající na 'http://' a e-mailové adresy budou převedeny na odkazy. Nový odstavec můžete vytvořit stejně jako v textovém editoru pomocí klávesy Enter.
Redakce si vyhrazuje právo smazat příspěvky, které jsou vulgární nebo by mohly jakkoliv poškodit tento magazín! Nezapoměňte správně opsat kontrolní kód!




(nebude zveřejněn)




Kontrolní kód



 

Novinky v magazínu

26.11.08 - Komentáře
Jak jste si jistě všimli, vytvořili jsme pro vás inovované komentáře k článkům. Doufáme, že se vám nyní budou články snadněji a pohodlněji komentovat.

Ikonka pro Vás

Líbí se vám tento magazín a rádi byste ho nějak podpořili? Pokud máte své webové stránky, budeme vám vděčni, pokud si na ně přidáte naší ikonku.


Statistika



Partnerské weby


Reklama