Avatar billede zapzone Nybegynder
07. oktober 2007 - 01:25 Der 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;

        if (navn.Trim().Length > 2 && navn.Trim().Length <= 20)
        {
            args.IsValid = true;
        }
        else
        {
            args.IsValid = false;
        }

    }
-----------------------------------------------------

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... :/

Nogen idéer ?
Avatar billede softspot Forsker
07. oktober 2007 - 01:31 #1
Hvilken version af ASP.NET?

Hvordan ser din markupkode ud?

Med udgangspunkt i ASP.NET 2.0:
Benytter du en ValidationSummary-kontrol? I så fald skal du benytte ErrorMessage-feltet til din fejltekst i stedet...
Avatar billede zapzone Nybegynder
07. oktober 2007 - 01:40 #2
2.0 ja,
Jeg bruger ingen ValidationSummary.
Sådan som jeg forstår det, så skulle det som står i Text property'en blive vist, når isValid = false

Text property: Text to display for the validator when the validated control is invalid

Synes ikke der er så meget at tage fejl af... ??
Avatar billede softspot Forsker
07. oktober 2007 - 01:51 #3
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.

Eller en helt tredie ting :)
Avatar billede neoman Novice
07. oktober 2007 - 01:56 #4
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.
Avatar billede neoman Novice
07. oktober 2007 - 01:58 #5
oopz - softspots forslag (jeg ser syner vist):)
Avatar billede zapzone Nybegynder
07. oktober 2007 - 02:22 #6
softspot >> Er ikke helt med på hvad de er for noget kode du gerne vil se :)

Har lige prøvet at lave en test website, med en simpel customvalidator, og her virker det som det skal... Mystisk... :/
Avatar billede zapzone Nybegynder
07. oktober 2007 - 02:32 #7
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...
Avatar billede zapzone Nybegynder
07. oktober 2007 - 02:40 #8
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 ?
Avatar billede neoman Novice
07. oktober 2007 - 02:49 #9
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.
Avatar billede zapzone Nybegynder
07. oktober 2007 - 03:02 #10
Yep, det passer meget godt. Testede det også lige i mit simple eksempel, og der skal trykkes på en knap.

Men knappen på mit "rigtige" site har også CausesValidation=true :/

Forstår stadig ikke hvorfor det ikke funker...
Avatar billede zapzone Nybegynder
07. oktober 2007 - 04:27 #11
Fandt da en løsning nu...

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.


    protected void ButtonTilmeld_Click(object sender, EventArgs e)
    {
            TilmeldPerson();
    }


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:


    protected void ButtonTilmeld_Click(object sender, EventArgs e)
    {
        if (ValidNavn())
        {
            TilmeldPerson();
        }
    }

    protected bool ValidNavn()
    {
        if (this.IsValid)
        {
            return true;
        }
        else return false;
    }


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å.

Nu vil jeg i seng, god nat ;)
Avatar billede zapzone Nybegynder
07. oktober 2007 - 04:41 #12
protected void ButtonTilmeld_Click(object sender, EventArgs e)
    {
        if (this.IsValid)
        {
            TilmeldPerson();
        }
    }


Jeg mente selvfølgelig ovenstående. ValidNavn() var en tidligere idé, og er egentlig overflødig som det ser ud nu :)
Avatar billede zapzone Nybegynder
07. oktober 2007 - 12:07 #13
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester