Kontrola formulářů v ASP.NET

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

Tisk

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.


Radek Kropík
 


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.

Gravatar
maro1

No nevím. ale je to od MicroSoftu. nebude to blbnout v jiných browserech než IE?! Já používám Operu. IE nee.

Gravatar
Ice

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.

Gravatar
Fantomasmag

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.

Gravatar
Ice

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?

Gravatar
Fantomasmag

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 ;-)

Gravatar
Vasek P

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?

Gravatar
Ice

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.

Gravatar
Vasek P

Diky Ice. A ten custom validator se pouziva stejne jako ty ostatni? Sorry za blby otazky. ale fakt teprv zacinam

Gravatar
Ice

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.

Gravatar
Vanda

Ty validatory nejak nechtej pracovat v IE7. Mate s tim nekdo zkusenosti?

Gravatar
Ice

To Vanda: Mam s tim zkusenosti. Pracujou. presne tak. jak maji. Nemas zakazane Javascripty?

Gravatar
Vanda

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.

Gravatar
Fantomasmag

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, slouží k načtení Gravataru)






Kontrolní kód



 

Novinky v magazínu

9.02.10 - Vaše články
Nenašli jste v magazínu článek o něčem, co vás skutečně zajímá? Není nic jednoduššího, než nám napsat váš návrh. Pokud nás váš návrh o čem napsat opravdu zaujme, může se brzy v magazínu objevit článek právě na vámi navrhnuté téma.

Vyhledávání




Info e-mailem




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