Tisková verze článku  Poslat článek e-mailem  5. března 2007 | Radek Kropík | Komentáře (0)  

CustomValidator - kontrola v naší režii

V minulém článku jsme si představili ovládací prvky na kontrolu formulářů – Validátory. Jeden validátor nám ale ve výčtu validátorů chyběl – CustomValidator. Jeho možnosti jsou tak široké, že jsem se rozhodl o něm napsat samostatný článek.

V drtivé většině případů si při kontrole formulářů vystačíme se základní čtveřicí validátorů – RequiredFieldValidator, CompareValidator, RangeValidator a RegularExpressionValidator, které jsme si představili v článku o validátorech. Jsou ale případy, kdy nám tyto validátory nebudou nic platné a hodil by se nám více validátor, který by fungoval přesně podle našich představ. A tady nám právě podává pomocnou ruku CustomValidator. Ten nám totiž umožňuje vytvořit si vlastní ověřovací pravidlo. Tento validátor umožňuje kontrolu formulářů jak u klienta – tj. klientským skriptem, tak samozřejmě i na serveru.

Ověřování na straně serveru

Nejprve si ukážeme, jak probíhá ověřování dat na serveru. Je to celkem snadné, stačí nám k tomu jen vytvoření procedury a to následovně (C#):

void vlastni_Overeni(object source, ServerValidateEventArgs
                     args)
{
 //kód ověřovacího pravidla
 args.IsValid = true/false;
}

Nyní jen zbývá naprogramovat příslušné ověřovací pravidlo přesně podle našich představ. Ještě zbývá dodat, co znamenají jednotlivé parametry, které jsme si v základu procedury nadefinovali. Takže source je typu object a má stejný význam jako parametr sender, který definujeme u správce událostí. Druhým parametrem je args a jde o objekt třídy ServerValidateEventArgs. Jeho vlastnost Value obsahuje hodnotu, kterou se pokoušíme ověřit, a také vlastnost IsValid, která nabývá hodnoty false nebo true a to podle toho, zda naše ověření proběhlo úspěšně či nikoliv. Na jednoduchém příkladu, který bude ověřovat délku hesla si ukážeme, jak takový vlastní validátor vlastně vypadá.

Nejprve si vytvoříme webový formulář, který bude obsahovat jeden TextBox, do kterého budeme heslo zapisovat, jedno tlačítko - Button a také Label, kterým dáme uživateli vědět, zda kontrola proběhla úspěšně nebo nikoliv. Všimněte si, že v uživatelském ovládacím prvku je použita vlastnost OnServerValidate, které je přiřazena příslušná procedura.

<!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>Custom Validator - Na serveru</title>
</head>
<body>
 <form id="form1" runat="server">
  <div>
   <asp:Label ID="lblZprava" runat="server"
      Text="Zadejte heslo (min. 8 znaků!)"></asp:Label>
   <br />
   <br />
   <asp:TextBox ID="tbHeslo" runat="server" />
   <asp:Button ID="btnOver" runat="server"
    Text="Ověř heslo" OnClick="kontrola" />
   <br />
   <br />
   <asp:CustomValidator ID="CustomValidator1"
     runat="server"
     ControlToValidate="tbHeslo"
     OnServerValidate="overHeslo" />
   </div>
 </form>
</body>
</html>

Zbývá vytvořit odpovídající procedury (C#).

void overHeslo(object source, ServerValidateEventArgs args)
{
  //Vytvoříme pravidlo
  args.IsValid = args.Value.Length >= 8;
}

void kontrola(object sender, EventArgs e)
{
  if (Page.IsValid)
    {
      lblZprava.Text = "Heslo je správné";
    }
    else
    {
      lblZprava.Text = "Heslo je chybné";
    }
}

Pokud si tento příklad vyzkoušíte, zjistíte, že heslo je skutečně ověřováno podle námi definovaného pravidla – jestliže má heslo více než 8 znaků, vypíše se hláška „Heslo je správné“ jinak nás čeká hláška „Heslo je chybné“.

Ověřování na straně klienta

Jak již víme, při použití standardních validátorů vloží .NET Framework do stránky automaticky klientský skript, který ověřuje údaje již na klientovi a odešle je na server až v případě, že kontrola proběhne úspěšně, tudíž vše probíhá u klienta a to znamená i rychleji. Odpadá zde totiž odesílání dat na server ke kontrole a zpět klientovi v případě chyby. Stejně jako si můžeme vytvořit vlastní ověřovací prvek, který kontroluje data na straně serveru, můžeme si samozřejmě vytvořit i vlastní kontrolní klientský skript v některém ze skriptovacích jazyků, například populárním JavaScriptu. Vše si ukážeme na následujícím příkladu, týkající se opět délky hesla. Pokud zadáte heslo kratší než 8 znaků, vypíše se hláška „Heslo je chybné“. V tomto případě je klientská funkce svázána s uživatelským ovládacím prvkem pomocí vlastnosti ClientValidationFunction.

<!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>Custom Validator - U klienta</title>
  <script language="javascript">
   <!--
     function overHeslo(source, args)
     {
       var vysledek = true;
       if (args.Value.length<8)
         {
           vysledek = false;
         }
           args.IsValid = vysledek;
     }
  //-->
  </script>
</head>
<body>
 <form id="form1" runat="server">
  <div>
    Zadejte heslo (min. 8 znaků)<br />
    <asp:TextBox ID="tbHeslo" runat="server" />
    <asp:Button ID="btnOver" runat="server"
    Text="Ověř heslo" />
    <br />
    <br />
    <asp:CustomValidator ID="CustomValidator2"
      runat="server"
      ClientValidationFunction="overHeslo"
      ControlToValidate="tbHeslo"
      Text="Heslo je chybné" />
  </div>
 </form>
</body>
</html>

Samozřejmě vám nic nebrání použít u uživatelského ovládacího prvku jak vlastnost OnServerValidate tak ClientValidationFunction. V tom případě proběhne kontrola jak u klienta tak i na serveru.


Radek Kropík




Komentáře k článku


Příspěvky vyjadřují stanovisko čtenářů, nikoliv provozovatelů serveru a redakce nenese odpovědnost za jejich obsah.




     Komentáře k tomuto článku byly již uzavřeny.


Novinky a oznámení

19.10.11 - Nyní najdete nově u každého článku ikonu obálky. Pokud na ní kliknete, budete moci odeslat odkaz na vybraný článek na e-malovou adresu, kterou zadáte v zobrazivším se formuláři. Odpadá vám tak nutnost pro odeslání odkazu na zajímavý článek spouštět e-mailového klienta a zakládání nového e-mailu.

11.10.11 - Nově v magazínu naleznete tzv. QR kód, který obsahuje vždy adresu právě zobrazené stránky. Pokud máte zobrazenou některou z kategorií článků, obsahuje QR kód adresu této kategorie, pokud máte zobrazený článek, QR kód obsahuje adresu zobrazeného článku, v ostatních případech obsahuje QR kód hlavní adresu magazínu.

23.09.11 - V neděli 25.9.2011 v době mezi 1:00 a 5:00 hod. proběhl přesun služeb serveru na nový hardware. Za nedostupnost magazínu v době přesunu se vám omlouváme.


QR kód článku

QR kód článku

Aktualizace e-mailem

Nechcete, aby vám unikl nový článek? Není nic jednoduššího, než se zaregistrovat a kdykoliv vyjde v magazínu nový článek, dáme vám vědět 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. Stačí přidat na váš web HTML kód, kderý najdete zde.


Partnerské weby


Naši fanoušci na Facebooku


Statistika


Reklama