07. oktober 2007 - 01:25Der er
12 kommentarer og 1 løsning
CustomValidator, ingen fejlmeddelelse
Jeg har en CustomValidator, som skal tjekke at en TextBox indeholder mellem 2 og 20 tegn, hvis den gør skal isValid = true, er den ikke skal isValid = false.
Metoden ser således ud: -------------------------------------------------------- protected void ValidatorNavn_ServerValidate(object source, ServerValidateEventArgs args) { string navn = TextBoxNavn.Text;
Når jeg kører debug kan jeg se at isValid bliver sat til false, hvis jeg indtaster en streng der er længere end 20, problemet er bare at der ikke bliver vist nogen fejl. Jeg har i Text property'en på min CustomValidator skrevet en fejlmeddelelse, men den bliver aldrig vist, på trods af at isValid bliver sat til false...
Har set at der er flere her på eksperten som har haft problemet, men har ikke kunne finde en løsning derudfra... :/
Ok, men da du ikke vil vise den kode hvor fejlen givetvis ligger, så er det svært at gøre andet end at gætte på hvad der kan være galt... ;-)
Here goes: Det kunne f.eks. være at du har sat en style på det element (eller en forælder til elementet) hvor fejlteksten bliver vist. De span-elementer som bliver genereret til at indeholde fejltekster til en valideringskontrol har visibility-stylen sat til hidden, så hvis du f.eks. har sat et eller andet element omkring fejlbeskeden til display:none, så bliver den ikke vist selvom der er valideringsfejl...
Alternativt er det noget som er relateret til ViewState, altså hvis viewstate er slået fra, så valideringen ikke kommer får effekt eller sådan noget.
Kan man forestille sig at teksten bliver vist, men ikek synligt af en elelr anden årsag ? Den funker fint hos mig (på nær når længeden er 0, hvor den slet ikke kører). Du kunne prøve snepnets forslag og lige midlertidigt ha en validationsummary, for a se om den kører eller ej.
Har lige fundet ud af, at hvis jeg indsætter en ny knap, som ingen funktion har, så virker min customvalidator når jeg klikker på den knap. Det vil altså sige at den "Tilmeld" knap som jeg har nu, får på en eller anden måde gjort sådan at fejl meddelelsen ikke vises... Tilmeld knappen kalder en enkelt metode, hvorefter nogle flere metoder kaldes, og en person bliver oprettet i databasen...
Men hey... Det skulle vel egentlig ikke være nødvendigt at klikke på nogen knap for at validere siden... Dette skulle vel ske automatisk med min ServerValidate Event når tekstfeltet forlades... Right ?
Jeg har mine tvivl - har lige læst et sted at server validation foregår automatisk når man klikker på en knap som har CausesValidation=Tru. Dette antyder, at servervalidate eventet ikke trigger postback, men udføres først når en postback gennemføres i anden sammenhæng - og det har jo i og for sig mening.
Det lader til at mit system, som det ser ud nu ikke får udført valideringen når der klikkes på min "Tilmeld" knap - Tilmeld knappen har en tilhørende Click Event som blot kalder metoden TilmeldPerson() - Denne metode henter så brugerens input fra textbox'ene og konverterer osv, kalder en metode i min Service klasse som så skaber forbindelse til databasen og opretter en ny person, et sted undervejs bliver der kaldt en Server.Transfer("Default.aspx") inden ButtonTilmeld_Click metoden når at blive færdig, og jeg tror at dette er grunden til at der ikke sker en validering.
Jeg løste problemet ved at lave en ny metode ValidNavn() som returnerer true eller false, alt afhængig om this.IsValid er true eller false. IsValid er jo netop blevet sat af CustomValidator metoden. Min ButtonTilmeld_Click metode ser nu således ud:
Hvis ValidNavn() returnerer false, tvinges der en validering igennem, og min CustomValidator's Text property bliver vist som den skal... :)
Håber dette kan hjælpe andre som måtte komme i denne situation... Kan ikke lige gennemskue om denne løsning er den mest optimale, men kunne ikke finde på andre, med den måde mit system er bygget op på.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.