C# - Felhasználói adatbevitel ellenőrzése webes alkalmazásban

forráskód letöltése
Amikor a felhasználótól tetszőleges adatokat kérünk be egy-egy weboldalon, akkor elengedhetetlen, hogy ezek helyességét ellenőrizzük. Erre egy könnyen kezelhető lehetőséget biztosít az ASP.NET.
A megoldást a BaseValidator osztály, illetve az ebből származó osztályok biztosítják. Ezek az objektumok úgy működnek, hogy megadunk számukra egy figyelendő kontrolt, melynek értékét ellenőriztetni akarjuk. Lehetőségünk van a következő kontrolok alább megjelölt property-jeinek a figyelésére:
  • HtmlInputText.Value
  • HtmlTextArea.Value
  • HtmlSelect.Value
  • HtmlInputFile.Value
  • TextBox.Text
  • ListBox.SelectedItem.Value
  • DropDownList.SelectedItem.Value
  • RadioButtonList.SelectedItem.Value
Nézzük most sorra, melyek ezek az osztályok.
A RequiredFieldValidator az első a sorban. Ezt akkor célszerű használnunk, ha egy beviteli mezőt mindenképpen ki kell töltenie a felhasználónak, vagyis az nem maradhat üres. Miután a ToolBox-ról feltettünk egy ilyen kontrolt a web lapra, annak ControlToValidate property-jében adhatjuk meg, hogy melyik az a kontrol, melynek az adatbevitelét szeretnénk ellenőrizni. Következő lépés, hogy megadjuk az ErrorMessage property-ben azt az üzenetet, melyet hiba esetén szeretnénk megjeleníteni. A RequiredFieldValidator üzenete alapértelmezés szerint nem lesz látható a web oldalon. Ennek megjelenésére csak akkor kerül sor, ha a hozzárendelt beviteli mezőbe a felhasználó nem ír semmit.
Másféle ellenőrzési lehetőség a CompareValidator segítségével oldható meg. Itt megtehetjük, hogy elvégezzünk egy összehasonlító műveletet egy felhasználó által beírt és egy általunk megadott érték között, vagy egy másik kontrol értéke között. Az elvégzendő művelet az Operator property-nél választható ki. Értéke az alábbiak egyike lehet:
  • Equal: egyenlő
  • NotEqual : nem egyenlő
  • GreaterThan: nagyobb
  • GreaterThanEqual: nagyobb vagy egyenlő
  • LessThan: kisebb
  • LessThanEqual: kisebb vagy egyenlő
  • DataTypeCheck: a két érték típus egyezőségének ellenőrzése
A CompareValidator által figyelni kívánt beviteli mezőt a ControlToValidate property-ben választhatjuk ki. Ezek után két lehetőségünk van: vagy megadunk egy értéket a ValueToCompare property-ben, vagy kiválasztunk egy másik kontrolt a ControlToCompare property-ben.
A Type property-ben megadhatjuk, hogy a bevitt adatokat milyen típusként kell értelmeznie a kontrolnak és ennek megfelelően az összehasonlítást elvégeznie.
Az ErrorMessage property-ben adható meg a szükség esetén megjelenő hibaüzenet.
Gyakori eset adatbevitelnél az is, hogy nem egy értékkel kell elvégezni az összehasonlítást, hanem azt kell vizsgálni, hogy egy tartományon belül található-e a megadott érték. Ilyen esetben a RangeValidator kontrolt célszerű használnunk. Ennél megadhatunk egy minimum és maximum értéket, a MinimumValue és MaximumValue property-ben. Ha a felhasználó e két érték közötti adatot ad meg, akkor nem jelenik meg a hibaüzenet, különben igen.
A hibaüzenet szövegét itt is az ErrorMessage property-ben adhatjuk meg, míg az adataink típusát a Type property-ben.
A RegularExpressionValidator kontrol segítségével egy igen összetett ellenőrzési rendszert valósíthatunk meg az adatbevitel során. Itt egy tetszőleges ún. vezérlő sztringet adhatunk meg, mellyel előírhatjuk, hogy a felhasználó milyen adatokat adhat meg a beviteli mezőben, melyeket helyesnek tekintünk. Ha például e-mail címet kell megadnia a felhasználónak, akkor ennek formai helyességét az alábbi sztring megadásával ellenőrizhetjük:
\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
Ezt az értéket a ValidationExpression property-be kell megadnunk. Szerencsére a VisualStudio.NET biztosít számunkra némi segítséget, így fenti sztringet nem kell magunktól kitalálni. Ha a ValidationExpression property-re kattintunk, ott megjelenik egy kis nyomógomb, melynek lenyomásával elővarázsolhatjuk a Regular Expression Editor ablakot. Itt már számos előre megadott feltétel közül választhatunk, mint például az Internet E-mail Address is.
Adott még egy jól használható lehetőség, mégpedig a CustomValidator kontrolt felhasználva. Itt egy tetszőleges ellenőrzési algoritmust megvalósíthatunk, mivel az ellenőrzés elvégzéséhez saját programunk kódja fog közreműködni. A CustomValidator esetében szintén a ControlToValidate property-nél választhatjuk ki azt a kontrolt, melynek tartalmát ellenőriznünk kell. Amikor erre sort kellene keríteni, akkor jön létre a ServerValidate esemény. Itt kapunk egy args nevű paramétert. Ennek Value property-jében megkapjuk az ellenőrizendő értéket. Ha ezt megfelelőnek találjuk, akkor szintén az args paraméter IsValid nevű logikai típusú property-jének kell igaz értéket adnunk. Amennyiben az ellenőrzésünk hibás adatbevitelre utalna, akkor természetesen itt hamis értéket kell megadnunk. Ennek függvényében jelenik meg a web oldalon az ErrorMessages property-be írt üzenetünk.
    private void CustomValidator1_ServerValidate(object source, System.Web.UI.WebControls.ServerValidateEventArgs args)
    {
      args.IsValid = args.Value == "abc";
    } 
Fontos tudnunk, hogy ha a CompareValidator, RangeValidator, RegularExpressionValidator, CustomValidator kontrolok által ellenőrzött adatbeviteli mezőkbe a felhasználó nem ír adatot, akkor nem keletkezik hibaüzenet. Ezek a kontrolok tehát csak akkor jeleznek hibát, ha a felhasználó írt valamit az adatbeviteli mezőbe és az nem felel meg a megadott feltételeinknek. Üres adatbeviteli mező esetén nincs ellenőrzés. Ha alkalmazásunk szempontjából ez hiba, akkor használjuk a RequiredFieldValidator kontrol ellenőrzését is.
Végezetül van még egy kontrol, mellyel megjeleníthetjük a hibát a felhasználó felé. Ez a ValidationSummary. Ennek legfőbb különbsége az eddigiekhez képes, hogy nem egy kontrolhoz kötődik, hanem az összes keletkezett hibát egy helyen összegyűjtve jeleníti meg. Így más teendőnk nincs is vele, mint hogy elhelyezzük a web oldalon, oda ahol a hibákat szeretnénk tudatni a felhasználóval. A ValidationSummary automatikusan összegyűjti az oldalon lévő Validator kontrolok hibaüzeneteit és megjeleníti azokat. Ennek módját szabályozhatjuk egyedül a DisplayMode property-n keresztül. Mely értéke az alábbiak egyike lehet:
  • BulletList: felsorolás egymás alá, HTML kódot tekintve az <ul></ul> páros kerül felhasználásra
  • List: egyszerű felsorolás egymás alatt
  • SingleParagraph: egy sorba kerül az összes hibaüzenet
A HeaderText property-ben megadhatunk egy címet, mely a hibalista tetején jelenik meg.
Ha a ShowMessageBox property-t igazra állítjuk, akkor a hibalista egy dialóg ablakban jelenik meg. Ilyenkor célszerű a ShowSummary property-t hamisra állítani és ezzel letiltani azt, hogy a web oldalon is megjelenjen a hibalista.