Avatar billede larsbachmanndk Nybegynder
15. juni 2007 - 08:19 Der er 10 kommentarer og
1 løsning

If Else sætning driller

Jeg har et simpelt problem tror jeg, jeg kan bare ikke få det til at virke.

Jeg har et site der kører i en database.
På sitet kører jeg et loop der laver menuen

I dette loop har jeg en if Else sætning som ser således ud:

If rsmenu("id") = Request.QueryString("id") Then
    strClass = "mainmenu-active"
        Else
    strClass = "mainmenu"
End IF

Planen er at den side man er på skal have en anden class, så den er "aktiv" i menuen.

Håber spørgsmålet er til at forstå?
Avatar billede goose Nybegynder
15. juni 2007 - 08:24 #1
Hvorfor er det at det ikke virker, får du en fejl eller hvad sker der?

Umiddelbart burde det da virke.

/Goose
Avatar billede hehlers Nybegynder
15. juni 2007 - 08:27 #2
Ja, det burde virke.
Prøv evt. at udskrive:

response.write(request.querystring("id"))
response.write(rsmenu("id"))
response.write(strClass)
Avatar billede softspot Forsker
15. juni 2007 - 08:31 #3
Det er typisk typeforskelle som er årsag til disse problemer, så prøv at typecaste begge værdier til en string inden du sammenligner:

If cstr(rsmenu("id")) = cstr(Request.QueryString("id")) Then
    strClass = "mainmenu-active"
Else
    strClass = "mainmenu"
End IF
Avatar billede larsbachmanndk Nybegynder
15. juni 2007 - 08:31 #4
Ja, det burde nemlig virke??
Når jeg udskriver de 3 du nævner hehlers så er de rigtige nok.
Jeg får ingen fejlmeddelelser, den sætter bare class="mainmenu" på allesammen.

I får lige hele koden her:

<%
Dim rsmenu

Set rsmenu = ObjConn.Execute("SELECT * FROM pages WHERE mainmenu = true AND active = true ORDER BY page")

%>
<table border="0" cellspacing="0" cellpadding="0">
<tr>

<%

Do until rsmenu.EOF

If rsmenu("id") = Request.QueryString("id") Then
    strClass = "submenu"
        Else
    strClass = "mainmenu"
End IF


%>

    <td><a href="default.asp?id=<%=rsmenu("id")%>&menu=<%=rsmenu("menu")%>" class="<%=strClass%>" title="<%=rsmenu("title")%>"><%=rsmenu("name")%></a></td>

<%
rsmenu.Movenext
Loop

Set rsmenu = Nothing
%>
Avatar billede goose Nybegynder
15. juni 2007 - 08:34 #5
Tror softspot har ret, tror den ene variabel bliver læst som tal og den anden text, og så passer sammenligningen jo ikke. Prøv som softspot foreslår.

/Goose
Avatar billede larsbachmanndk Nybegynder
15. juni 2007 - 08:37 #6
Hey softspot... nu virker det.
Kan du kort forklarer hvordan typeforskelle kan give den slags problemer?
Avatar billede larsbachmanndk Nybegynder
15. juni 2007 - 08:37 #7
nu er jeg for langsom igen.. Goose har jo lige forklaret det.

Tak skal i have
Avatar billede softspot Forsker
15. juni 2007 - 08:46 #8
Normalt vil VBScript forsøge at konvertere typerne af dine variable så de passer sammen og til den kontekst du bruger dem i. F.eks. burde den se på "129" og 21 som to tal og hvis du f.eks. skriver

a = "129"
b = 21
c = a + b

så burde det resultere i at c bliver lig med værdien 140 (da a og b konverteres til tal pga +-operatoren og fordi de begge kan konverteres til tal).

Hvis du derimod skriver

a = "129"
b = 21
c = a & b

så burde de resultere at c bliver "12921" (da a og b så konverteres til strenge pga &-operatoren). For en god ordens skyld så vil "abc" + 1 altså resultere i en streng som ser således ud "abc1", idet "abc" ikke kan konverteres til et tal :)

I begge tilfælde havde variablerne en foruddefineret type af hhv. string og integer og VBScript kunnne derfor bestemme en passende konvertering.

i dit tilfælde opererers der med varianter, hvilket åbenbart gør det tingene lidt mere kompliceret for VBScript og den undlader derfor at konvertere værdiernes type så de passer sammen og derfor skal du selv sørge for at de passer sammen.

Hvis ellers ovenstående teori er korrekt, så må man altså konkludere at det er bedst selv at sørge for typecasting af sine værdier, så man er sikker på at de har samme type - med mindre man er helt sikker på hvordan tingene fungerer under motorhjelmen af VBScript...
Avatar billede softspot Forsker
15. juni 2007 - 08:47 #9
Øøøh... 129 + 21 giver vist endda 150 :D
Avatar billede larsbachmanndk Nybegynder
15. juni 2007 - 09:18 #10
Tak for den gode forklaring.
Det forklarer jo en hel del, og vil sikkert rede mig fra mange grå hår fremover.
Avatar billede softspot Forsker
15. juni 2007 - 09:24 #11
Velbekomme og tak for point :)
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
Kurser inden for grundlæggende programmering

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

IT-JOB

Netcompany A/S

Test Consultant

TD SYNNEX Denmark ApS

BDM Cisco Security

Forsvarsministeriets Materiel- og Indkøbsstyrelse

IT Cyber- og Sikkerhedmedarbejder for Kommando og Kontrol Systemer

Timengo DPG

Teknisk Support Lead