webForumDet fria alternativet

customvalidator

.NET

8 svar · 228 visningar · startad av DavidB

Medlem sedan jan. 20001 372 inlägg
Frågan#1

har gjort en custom validator som jag inte får att funka, den är till för att kolla om ett användarnamn redan finns i databasen.

	void UsernameExists(object source, ServerValidateEventArgs value){
            string connectionString = "Driver={MySQL};Database=blabla";
            string SQL = "select username from users where username = 'bla'";

            OdbcConnection conn = new OdbcConnection(connectionString);        

            OdbcCommand cmd = new OdbcCommand(SQL);
            cmd.Connection = conn;    

            conn.Open();

            OdbcDataReader reader = cmd.ExecuteReader();
            
            if(reader.Read()){
		value.IsValid = false;
            }
            else{
            	value.IsValid = true;
            }

            reader.Close();
            conn.Close();
          
            return;
	}

nån som kan se nåt fel i koden?

Medlem sedan okt. 20005 273 inlägg
#2

Jag är ju ingen .NET guru men kan du ha void när du ska returnera ett värde ?

sen vet jag inte men kanske detta hjälper

[red]
if(reader.Read()){
		return false;
            }
            else{
            	                return true;
            }[/red]

men det sista är ju bara en chansning ;)

Medlem sedan maj 2001329 inlägg
#3

har du inte bara vänt på if saten?

bör den inte vara??

if(reader.Read()){
  value.IsValid = true;
}
else{
  value.IsValid = false;
}

Sen för att göra det lite snyggare :)

value.IsValid = reader.Read();

Och du behöver inte ha return i slutet av funktionen

Medlem sedan jan. 20001 372 inlägg
#4

kolla här använder de void
http://samples.gotdotnet.com/quickstart/util/srcview.aspx?path=/quickstart/aspplus/samples/webforms/ctrlref/webctrl/CustomValidator/CustomValidator1.src

jag tror inte att jag har vänt på if satsen för om den hittar ett värde så ska den ju skriva ut ett meddelande att det redan finns en användare registrerad med det användarnamnet.

Medlem sedan jan. 20001 372 inlägg
#5

testade lite mer och kom då fram till att det inte är något fel på koden.

jag kopierade den in på en annan sida utan någon annat kod och testade att validera en textbox.

jag testade att lägga in:

if(reader.Read()){
value.IsValid = false;
[b]Response.Write("false");[/b]
}
else{
value.IsValid = true;
[b]Response.Write("true");[/b]
}

och när jag kör sidan så skriver den ut false men den godkänner det ändå och jag kommer in på nästa sida.

nån som har nån idé?

Medlem sedan mars 20023 561 inlägg
#6

Posta hela sidan...

Medlem sedan mars 200262 inlägg
#7

Det räcker nog inte med Response.Write inne i funktionen. Testa istället att skriva ut värdet utanför funktionen.

Vad jag förstår skickar du bara value in i blocket och value är sedan glömt, eller?

Skall du få ut värdet måste du garantera att value skickas som referens (pass-by-reference)

Medlem sedan maj 2001329 inlägg
#8

Det är nog inget fel på den koden du postat här utan på din sida så posta hela den.

Medlem sedan jan. 20001 372 inlägg
#9

jag löste det.

alltihop låg i en asp:Panel och när man tryckte på submit så skulle nästa panel visas, och eftersom min customvalidator validerades på servern så visades den inte för att panelen den låg i inte visades.

löste det genom att lägga in:

if(Page.IsValid){
     koden
}

i funktionen som bytte panel

256 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)