Avatar billede x-pander Nybegynder
13. februar 2008 - 11:31 Der er 23 kommentarer og
1 løsning

Custom Validator

God formiddag.

Godt, så blev jeg mør. Jeg aner simpelthen ikke hvad jeg skal gøre for at få min custom validator til at virke og reagere på ClientValidationFunction, istedet for OnServerValidate.

Mit problem er at jeg vile lave en validator der helt simpelt checker om email'en indtastet i feltet er ægte, ved at checke efter et "@" og et "." eksisterer. Udover det, skal den checke efter om feltet er tomt fuldstændig ligesom en RequiredFieldValidator.

Men generelt synes jeg den er meget svær at bruge. Jeg er kommet frem til at man får kontakt med værdien fra feltet gennem sin sub/void med variablen der f.eks. hedder args As ServerValidateEventArgs

Så indtil videre ser den sådan ud:

    Sub cva(ByVal source As Object, ByVal args As ServerValidateEventArgs)

        args.IsValid = False

        If args.Value.Contains("@") And args.Value.Contains(".") Then

            cvaEmail.Text = "Mangler!"
            cvaEmail.Visible = False
            args.IsValid = True
        ElseIf args.Value = "" Then

            cvaEmail.Text = "Mangler!"
            cvaEmail.Visible = True
            args.IsValid = False
        Else

            cvaEmail.Text = "Ugyldig e-mail!"
            cvaEmail.Visible = True
            args.IsValid = False
        End If
    End Sub

(Istedet for args.Value.Contains("@"), kan jeg så skrive txtEmail.Text.Contains("@")?)

Men det kører jo kun når server valideringen foregår. Og hvis jeg prøver at knytte noget som helst til ClientValidationFunction, så får jeg bare denne fejl:
Microsoft JScript runtime error: Object expected. - og hvis der er noget jeg bare ikke aner det fjerneste om så er det javascript, så hvad er det for et objekt den forventer?

Servervalideringen virker somend fint nok, men det er bare lidt for sent at validere når informationerne er indtastede. Så er det muligt med clientscript eller skal jeg stoppe siden inden den får sendt et respons til serveren?

Ud over alt dette så, bliver feltet ikke tjekket når det er blank hvilket det jo netop skal.

Puuhhaa, håber der er nogle der ved noget om det her. Har i evt. en tutorial på en HELT simpel ClientValidationFunction? For jeg har mange ting der hænger i det fri som ikke bliver besvaret, uden en grundlæggende viden om customvalidators.
Avatar billede karsten_larsen Praktikant
13. februar 2008 - 12:13 #1
Du kan gøre begge dele - lade Net lave client validering og server validering.

eksempel:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:TextBox ID="TextBox1" runat="server" ValidationGroup="EmailTjek"></asp:TextBox>
        <asp:Button ID="Button1" runat="server" Text="Button" ValidationGroup="EmailTjek" />
        <asp:RegularExpressionValidator
            ID="RegularExpressionValidator1"
            runat="server"
            ControlToValidate="TextBox1"
            Display="Dynamic"
            ErrorMessage="Ikke en rigtigt email adresse"
            ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"
            ValidationGroup="EmailTjek">
        </asp:RegularExpressionValidator>
    </div>
    </form>
</body>
</html>

og fra codebehind

Partial Class Default
    Inherits System.Web.UI.Page

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        If Page.IsPostBack = True And Page.IsValid = True Then
            Response.Write("I orden")
        End If
    End Sub
End Class


Husk at knytte RegularExpressionValidator, Button og TextBox til den samme ValidationGroup. Selve kontrol overlader du til RegularExpressionValidator under properties ValiditionsExpression.

:-) karsten_larsen
Avatar billede x-pander Nybegynder
13. februar 2008 - 12:14 #2
Hvis jeg bruger server-validering, så virker det som sagt fint nok, bortset fra at nu har jeg fundet ud af at er der først blevet sagt args.IsValid = True, så bliver hele subrutinen slet ikke kørt igen. Når jeg kører med breakpoints, så stopper den ikke på noget tidspunkt der.
Jeg kan godt se at når informationen er valideret, så er der ikke grund til at validere igen, men hvorfor dette?
Avatar billede x-pander Nybegynder
13. februar 2008 - 12:27 #3
Tak for svaret Karsten, men hvordan kan jeg selv komme til at bestemme om den er valideret på den måde du foreslog og hvad gør det her? :O ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"
Avatar billede karsten_larsen Praktikant
13. februar 2008 - 12:28 #4
Du kan jo have flere validitorer på siden og det mest sikre er altid server kontrol, Client validering er mere en bruger service.

Du kan læse her til en start http://www.html.dk/tutorials/aspnet/

:-) karsten_larsen
Avatar billede karsten_larsen Praktikant
13. februar 2008 - 12:30 #5
Tjekker at din email ar korrekt opbygget. Du kan også lave din egen expression som du kan sætte ind. Den viste er indbygget i Visual Studio
Avatar billede karsten_larsen Praktikant
13. februar 2008 - 12:31 #6
Eller kan du gå ind på http://regexlib.com/ og lede efter andre expression og teste dine egne
Avatar billede x-pander Nybegynder
13. februar 2008 - 14:44 #7
Så altså du foreslår at jeg laver det som server validering stadigvæk og så f.eks. opretter en variabel der holder øje med om valideringen er True og først derefter udfører en "send funktion"?

Og det med validering på klienten, det foreslår Michell heller ikke man udfører medmindre man er god til javascript.

Og altså, jeg har jo fået den til at virke på serveren, så nu prøver jeg at bygge det hele ind så.
Avatar billede x-pander Nybegynder
13. februar 2008 - 14:51 #8
Det går egentlig godt nok indtil videre, men hvor kan jeg komme i kontakt med args As ServerValidateEventArgs som sub-rutine paramter, når jeg ikke må oprette en sub inde i en sub?
Avatar billede karsten_larsen Praktikant
13. februar 2008 - 15:30 #9
Avatar billede x-pander Nybegynder
14. februar 2008 - 10:40 #10
Hej igen.

Jeg synes altså stadig ikke jeg får noget ud af det. Den viser ikke direkte hvordan jeg kan få ServerValidateEventArgs med ind i en Sub til f.eks. btn1_click.
Avatar billede x-pander Nybegynder
14. februar 2008 - 10:41 #11
Og hvordan hænger args.IsValid og Page.IsValid sammen?
Avatar billede x-pander Nybegynder
14. februar 2008 - 10:46 #12
Arrh, altså args som svarer til ServerValidateEventArgs opdaterer Page med nu information om hvorledes IsValid er true eller false?
Avatar billede x-pander Nybegynder
14. februar 2008 - 13:32 #13
Yep. Det gør den. Men nu mangler jeg stadig at få den til at køre et validate når txtEmail er tom, for der springer den simpelthen over og udfører ikke tjekket.

Nogen idé om hvordan man får den til det? Eller er det nødvendigt med en ekstra RequiredFieldValidator?
Avatar billede karsten_larsen Praktikant
14. februar 2008 - 13:53 #14
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" Display="Dynamic"
            ErrorMessage="Skal udfyldes!" ValidationGroup="EmailTjek" ControlToValidate="TextBox1"></asp:RequiredFieldValidator>
Avatar billede x-pander Nybegynder
14. februar 2008 - 14:03 #15
Yes, men så er det jo ikke samme field validator? Er det ikke muligt at inkludere det hele i een?
Avatar billede x-pander Nybegynder
14. februar 2008 - 14:07 #16
Jeg sidder lige nu og prøver noget af med send-knappen der er nedtonet indtil der er indtastet noget i feltet, men det kræver endnu engang et svar fra serveren, kan man ikke få den til at tjekke det client-side?
Avatar billede x-pander Nybegynder
14. februar 2008 - 14:20 #17
Hmm nå, det blev til en custom validator nede ved siden af knappen :/
Og så ellers required på resten af felterne.

Du skal have tak for dine mange links igennem hjælpen. Nu har jeg da fundet ud af at client-side ting ikke er noget der sådan bare sker.

Nu kører den engang omkring serveren og sender ikke mail før at der bliver meldt Page.IsValid = true

Så du ligger endelig et svar. :)
Avatar billede karsten_larsen Praktikant
14. februar 2008 - 14:21 #18
Den første er en RegularExpressionValidator og den anden en RequiredFieldValidator. De er forskellige. Hvis du bruger disse to i dit eksempel så klare Net det hele for dig. Den ene tjekker at email er korrekt opbygget og den anden at feltet først sendes til serveren når der er noget i feltet. Og på serveren laver du så et tjek til via page.isvalid
Avatar billede x-pander Nybegynder
14. februar 2008 - 14:24 #19
Yep, men altså det er jo meget nemt at få ens custom til at tjekke om feltet er tomt, men problemet er bare at den ikke bliver kørt før der er noget i feltet.

Er det evt. muligt at bruge en summary til at samle det samme sted?
Avatar billede karsten_larsen Praktikant
14. februar 2008 - 14:30 #20
Såfremt du har 1 textbox og 1 button, som behøver du kun en RequiredFieldValidator og en RegularExpressionValidator.
Det vil tjekke på clientside dynamisk om der tastet noget ind og såfremt der tastet noget ind vil det tjekke om det har for af en email struktur - FØRST derefter sendes der et kald til serveren.
:-) karsten_larsen
Avatar billede x-pander Nybegynder
14. februar 2008 - 14:42 #21
Okay, jamen så har vi snakket forbi hinanden, for jeg bruger jo en CustomValidator og ikke en RegularExpressionValidator.
Avatar billede x-pander Nybegynder
14. februar 2008 - 15:39 #22
Anywhoooo...

Svar og points? :)
Avatar billede karsten_larsen Praktikant
14. februar 2008 - 17:13 #23
jeg vil mene det er overkill at lave en customvalidator, når man nu kan få det hele foræret via de indbyggede validatorer, når det gælder f.eks. email.

:-) karsten_larsen
Avatar billede x-pander Nybegynder
16. februar 2008 - 18:00 #24
Ja det er eventuelt overkill, men jeg var ikke oplyst om at der fandtes en der også validerede efter korrekt email.

Men uanset hvad, så ville jeg gerne lære at bruge den, for det kommer jo før eller siden og så er det godt at have noget reference.
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