05.03.2007 | Radek | | Programujeme | Žádné komentáře | 

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.





Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *


Novinky a oznámení

15.10.2016 - Do menu byla přidána nová sekce Stream, kde naleznete jak veškěré informace ohledně Fantomasmag TV, což jsou online streamy na Twitch.tv, tak i přímo online stream a chat.

Partnerské weby

Statistika

Naši fanoušci na Facebooku

Další...