Prieš kurį laiką jau esu rašęs apie Microsoft Enterprise Library validavimo bloką (I dalis, II dalis). Šiandien norėčiau parodyti validavimo bloko integravimo galimybes su ASP.NET.

Priminsiu kaip atrodė klasė Knyga:

Apibrėškime ASPX puslapį, sudarytą iš dviejų tekstinių laukų, skirtų knygos pavadinimui bei ISBN numeriui įvesti:

Tarkime, mes norime patikrinti įvestų duomenų korektiškumą, t.y. ar įvestas knygos pavadimas ir ISBN numeris atitinka anksčiau apibrėžtus reikalavimus. Pirma kas šauna į galvą - ASP.NET validatorių panaudojimas. Bet šiuo atveju reikėtų dubliuoti klasėje Knyga apibrėžtus validatorius, kas nėra labai gerai. Tokiu atveju verta pasinaudoti į Enterprise Library įeinančiu PropertyProxyValidator validatoriumi.

PropertyProxyValidator validatorius nėra pasiekiamas iš įrankių juostos, todėl norint jį pridėti reikia paspausti dešiniu pelės klavišu ant įrankių juostos, pasirinkti meniu punktą Choose Items…

… ir pažymėti PropertyProxyValidator

ASPX puslapyje reikia užregistruoti komponentą:

Dabar galima pridėti validatorių, skirtą įvesto knygos pavadinimo korektiškumui patikrinti

Pateiktame pavyzdyje ControlToValidate atributas nurodo tikrinamą komponentą; SourceTypeName - tikrinamą klasę su vardų sritimi (namespace); PropertyName - tikrinamos klasės savybės pavadinimą. Panašiai apibrėžiamas validatorius ir ISBN savybei.

Rezultate mes gauname pilnai veikiantį validavimą:

Apibendrinant, toks validavimo būdas turi savų privalumų bei trūkumų. Labai patogu, kad nereikia pakartotinai apibrėžinėti klasės apribojimų ASPX puslapyje. Tai tampa ypač svarbu turint omeny, kad panašus proxy validatorius egzistuoja ne tik ASP puslapiams, bet ir Windows formoms bei Windows Communication Foundation kontraktams. Iš kitos pusės, dėl akivaizdžių priežasčių minėtas validavimas ASP puslapiuose vyksta sukeliant PostBack įvykį, kas tikrai yra nemaža problėma šiuolaikiniame AJAX grįstame pasaulyje. Neseniai išleistas Validation Guidance Bundle bando spręsti šią problemą pakeičiant sinchroninius validatorių kreipinius į asinchroninius. Validavimo bloko integracija su ASP.NET puslapiais yra šiuo metu aktyviai plėtojama sritis, bet dar liko nemažai atvirų klausimų…

Rodyk draugams