|
Oprettelse af klasser on-the-flyDenne artikel tager udgangspunkt i funktionen ExecuteGlobal og udnytter at man med den kan køre VBScript-kode fra en streng. Idéen er helt konkret, at man opbygger en class som gør adgangen til et given sæt oplysninger mere strømlinet, således grænsefladen til det man arbejder med bliver simplere. Dette kunne f.eks. benyttes i forbindelse med post af en formular, hvor værdierne i formularen kunne omsættes til direkte egenskaber på et objekt i stedet for at man skal igennem request.form. Ydermere kunne der lægges standardvalidering ind, således man slap for at tage stilling til om det grundlæggende format var korrekt. Et eksempel på en måde at aflæse formularfelter via sådan en klasse:
if Form.IsValid then I stedet for denne traditionelle måde: if len(Request.Form("Navn") & "") > 0 and len(Request.Form("Adresse") & "") > 0 thenResponse.Write Request.Form("Navn") & "<br>" Response.Write Request.Form("Adresse") & "<br>" Response.Write Request.Form("Postnr") & " " Response.Write Request.Form("Bynavn") & "<br>" else Response.Write "Der er opstået følgende fejl:<br>" Response.Write "<ul>" if len(Request.Form("Navn") & "") = 0 then Response.Write "<li>Navn skal være udfyldt.</li>" end if if len(Request.Form("Adresse") & "") = 0 then Response.Write "<li>Adresse skal være udfyldt.</li>" end if Response.Write "</ul>" Response.End end if Ovenstående eksempel tager stilling til en ultrasimpel validering af felterne på formularen, hvilket objektet Form kan bygges til at varetage. På den måde skal man bare huske at tjekke IsValid på Form-objektet inden man arbejder videre med formulardata. Hvis der opstår fejl kan man aflæse disse fra ValideringsfejlSomListe (der udskriver en uordnet liste med alle fejlbeskeder). Nu har jeg skitseret hvordan jeg kunne tænke mig objektet skal benyttes. Nu vil resten af artiklen forsøge at skitsere en måde til at definere hvordan klassen skal genereres, samt et konkret forslag til selve genereringen af klassen. Hvis jeg lige skal give et bud på generering af en klasse på grundlag af en given formular (altså en generisk metode til at skabe en klasse til alle formularer, undtagen dem hvor der sendes filer med), så kunne det være noget i stil med denne:
function getFormClass() Form-objektet kan nu hentes ved at kalde funktionen således: set Form = getFormClass() Egenskaberne på Form er nu afhængige af hvilke felter din formular indeholder! Bemærk at alle felter betragtes som strenge. Ulemperne ved denne version er
Ad 1: Dette gælder f.eks. checkbokse og radiobuttons. Det betyder at vi ikke bare kan bruge navnet på disse kontroltyper uden at tjekke om de findes først. I den nuværende udgave har Form-objektet ikke nogen måde (ud over exception-handling), hvorpå den kan signalere om et felt findes eller ej. Der er flere muligheder for at komme omkring denne udfordring. En måde er at indføre en funktion der kan oplyse om et felt findes eller ej. Det kunne f.eks. gøres således:
if Form.Exists("checkbox1") then Denne metode skulle kun benyttes for de felter, hvor der er risiko for at de ikke eksisterer i Form-objektet. Ad 2: dette er et stort problem ifht. den almindelige anvendelighed. Derfor bør der findes en løsning på dette. En måde kunne være at definere en struktur med oplysninger om de felter man altid ønskede at have adgang til i Form-objektet og så generere Form-objektet på grundlag af denne struktur. Strukturen kunne i samme ombæring have oplysninger om valideringer for de enkelte felter. Denne løsning er mere vedligeholdelseskrævende, da man skal tage stilling til hver enkelt formulars indhold og sætte sig ned for at definere en masse omkring formularen. Spørgsmålet er, om man i virkeligheden ikke skal det alligevel og så er det måske ikke så ringe at få lidt struktur på det med sådan en definition... Jeg har strikket et koncept sammen til validering af formularer i javascript og tænker at noget af det samme kan anvendes på serveren (hvis man ligefrem kunne anvende den samme struktur til at generere klientvalideringen, var det jo optimalt!). En mulig sæt af strukturer kunne derfor være:
class CFormValidering Nu kan man så oprette en valideringsstruktur ved at gøre følgende:
dim r, fv: set fv = new CFormValidering Med denne struktur kan der nu genereres et Form-objekt, der indeholder de felter som forventes (uanset om de så findes i Request.Form eller ej!). Vi kan få dette til at køre ved at tilføje følgende funktion (en tilrettede version af funktionen getFormClass) til objektet CFormValidering:
function getServerForm() Så skulle det være muligt at kalde getServerForm og få en klasse genereret som tillader at man aflæser alle de felter man har defineret og som muliggør validering og aflæsning af evt. fejl. De fornødne valideringsfunktioner skal naturligvis også laves, således de tager to parametre, nemlig array'et med parametre og selve værdien der skal valideres.
set Form = getServerForm() Et eksempel på en valideringsform er requiredFieldValidator (der kontrollerer om feltet har noget indhold eller om det er tomt).
function requiredFieldValidator(params, val) |
| Sidst opdateret: 04-09-2010 23:40:33 |
|
Tilmeld link |
Tilføj Link |
Tilføj Link |
@-begynder Erklæring om beskyttelse af personlige oplysninger |