17. juli 2004 - 01:14Der er
37 kommentarer og 1 løsning
Spørgsmål til validator function?
hejsa,
Jeg har lavet web user control der indeholder en login formular denne side bliver så includeret på en .aspx side.
Jeg laver så en validering på formularen og det virker også fint, men hvis siden bare reloades uden at der er trykket på login knap ja så viser den fejl beskrivelse fra validator og det var jo lige som ikke meningen.
Hvad gør jeg forkert og hvad skal der til for at validatoren den kun aktiveres ved tryk på login knap ?
I lang tid har samarbejdsbranchen fokuseret på at forbedre enhedsfunktioner – bedre kameraer, klarere lyd og smartere software. Men den virkelige forvandling handler ikke om funktioner.
Hvis det reload du snakker om sker ved at der trykkes på en anden knap (el.l.) på formen (er det tilfældet ?), så kan du fikse det ved at sætte den property der hedder CausesValidation til false (altså på de kontroller du ikke ønsker skal eksekvere en validering).
Hvis du er noget du har "tegnet" i designeren, kan du bare markere den knap du ikke ønsker skal eksekvere validering. Højreklikke på den og vælge properties. Det skulle gerne vise dig et propertyvindue, hvor du kan sætte CausesValidation til false;
Eller kan du gøre det programmatisk, f.eks. i Page_Load. Hvis den knap du vil pille ved har id btnButton kan du bare skrive : btnButton.CausesValidation = false;
Ok så fandt jeg den :o) Men hvad sker der så når min login form er at finde på alle sider og jeg har en anden form på siden som også har validering så kan jeg jo ikke sætte den til false ?
Altså min .ascx fil indholder en form til login denne includeres på alle sider på hele projektet. På mine .aspx sider kan der jo forekomme andre formulare så som medlems registrering og dener der jo oxo validering på.
Vil det så sige at jeg ikke kan have min login formular på de sider hvor der er andre formulare ? For det lyder da som en tåbelig ting hvis ikke det skulle kunne lade sig gøre !?!
Ah... kunne heller ikke helt forstå den med at du havde flere forms :o) Nej det vil det ikke sige, men det vil nok sige, at det nok vil være det mest hensigtmæssige for dig ikke at bruge de medfølgende validator-kontroller til din "login-gruppe".
Nej du kan godt trixe det, men det kræver at du slår begge typer validering (altså sætter både Enabled til false, og EnableClientScript til false).
Din clientside validering må du så undvære, men du kan slå serverside-validering til, hvis du i handleren til den knap du logger ind med skriver følgende :
(Altså... slår begge typer validering fra i designeren - eller programmatisk som skrevet højere oppe).
Den kode jeg så lige skrev til sørger for at proppe din validator ind i sidens validators, og så eksekvere en validering... Hov - den sidste linie var forkert.. Det er selvfølgelig : DinValidatorKontrol.Validate(); Hvis du bare skriver Validate() køres valideringen på samtlige valideringskontroller.
I button_click... Altså den metode der eksekveres når en bruger prøver at logge ind - f.eks. sådan her :
Me.RequiredFieldValidator1.Enabled = False Me.Validators.Add(Me.RequiredFieldValidator1) Me.RequiredFieldValidator1.Validate() If (Me.IsValid) Then Response.Write("VALID") Else Response.Write("INVALID") End If
(Jeg går ud fra at du gør noget lidt andet med resultatet af IsValid end bare at skrive en tekst ud som jeg gør i ovenstående.... Men er du med på den ?)
Object reference not set to an instance of an object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
Source Error:
Line 29: Line 30: Private Sub btnLogin_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLogin.Click Line 31: Me.fldPasswordValidator.Enabled = True Line 32: Me.Page.Validators.Add(Me.fldPasswordValidator) Line 33: Me.fldPasswordValidator.Validate()
Det giver ikke ret meget mening. Kan du debugge dig frem til hvilken linie den fejler på. Altså... Er det pageobjektet der er null, eller fldPasswordValidator ?
Private Sub btnLogin_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLogin.Click Me.fldPasswordValidator.Enabled = True Me.Page.Validators.Add(Me.fldPasswordValidator) Me.fldPasswordValidator.Validate() If Page.IsValid Then Dim mba As New BizCom() Dim Output As String = mba.CheckLogin(fldUsername.Text, fldPassword.Text) End If End Sub
Jeg kan ikke rigtig se hvordan det skal lykkedes dig at kompilere, og så få den fejl med mindre du har slettet din fldPasswordValidator fra ascx-filen (eller givet den et andet id).
Nej det kan jeg heller ikke jeg har lige prøvet at skifte det ud med mit username fetl og der virker det fint så jeg skal lige have set hvad jeg har lavet i min fil :o)
Men ellers tak for hjælpen for denne gang, point er på vej :o)
Har du for øvrigt også problemer med at acceptere svar ? (Det er ikke for at hundse med dig... Der er bare et par stykker der har klaget over det, og du skrev at du ville sende point, så jeg tænkte at du måske havde samme problem)
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.