Varför skickar du med den överhuvudtaget om du inte skall använda den?
------------------
Kom hem till mig...
6 svar · 233 visningar · startad av toha
Jag har en sträng som ser ut som en querystring. Ex:
pagesize=20&orderby=s_enamn_1+desc&page=19
Hur gör jag enklast för att plocka bort ett "objekt" i strängen? Om jag vill plocka bort "orderby" så skall jag få ut strängen:
pagesize=20&page=19
Nån som har en smart lösning?
------------------
/ Torbjörn Hansson, webbutvecklare
Endero Sverige
Varför skickar du med den överhuvudtaget om du inte skall använda den?
------------------
Kom hem till mig...
QS är till för att visa resultat i en resultattabell där kolumnhuvudena skall fungera som sorteringslänkar till samma sida. Så första gången har jag strängen:
pagesize=20&page=19
Och vid varje kolumnhuvud så lägger jag till en variabel så att asp-koden blir:
<a href="s1b.asp?<%= Request.QueryString & "&orderby=s_enamn_1" %>">Efternamn</a>
Så efter man man har klickar på länken två gånger så blir querystringen:
pagesize=20&page=19&orderby=s_enamn_1&orderby=s_enamn_1
Dessutom är det flera QS-variabler som det kan bli så på. Men jag antar att jag får köra en InStr() på de och ta bort allt till slutet på strängen för varje variabel.
------------------
/ Torbjörn Hansson, webbutvecklare
Endero Sverige
pos=instr(strängen,"orderby=")
pos2=instr(strängen,"&",pos)
if pos2=0 then
strängen=left(strängen,pos-1)
else
strängen=left(strängen,pos-1) & mid(strängen,pos2)
end if
Typ...kan ha blivit lite snett
Tack för svaret Emission, men jag gjorde en förbättrad version som använder sig av RegExp-objektet.
Function DeleteQSVariable(ByVal sQueryString, ByVal sVarName)
Dim oRegExp
Dim nLength
Dim i
Set oRegExp = New RegExp
oRegExp.IgnoreCase = True
oRegExp.Global = True
oRegExp.Pattern = "&" & sVarName & "=.*&"
sQueryString = oRegExp.Replace(sQueryString, "&")
oRegExp.Pattern = "&" & sVarName & "=.*$"
sQueryString = oRegExp.Replace(sQueryString, "")
oRegExp.Pattern = "\?" & sVarName & "=.*&"
sQueryString = oRegExp.Replace(sQueryString, "?")
oRegExp.Pattern = "\?" & sVarName & "=.*$"
sQueryString = oRegExp.Replace(sQueryString, "")
Set oRegExp = Nothing
DeleteQSVariable = sQueryString
End Function
------------------
/ Torbjörn Hansson, webbutvecklare
Endero Sverige
Varför kollar du inte bara om din ordersvariabel är satt, och om den är det behöver du inte lägga till en ny?
------------------
---
/M.
Kan inte. Det skall vara olika orderby för olika länkar.
Har förbättrat funktionen:
Function DeleteQueryVariable(ByVal sQuery, ByVal sVarName)
Dim oRegExp
sQuery = htmlDecodeJS(sQuery)
sVarName = Replace(sVarName, "|", "\|")
Set oRegExp = New RegExp
oRegExp.IgnoreCase = True
oRegExp.Global = True
oRegExp.Pattern = "(&|^)" & sVarName & "=[^$&]*"
sQuery = oRegExp.Replace(sQuery, "")
If Mid(sQuery, Len(sQuery)) = "&" then
sQuery = Left(sQuery, Len(sQuery)-1)
End if
If Left(sQuery, 1) = "&" then
sQuery = Right(sQuery, Len(sQuery)-1)
End if
Set oRegExp = Nothing
DeleteQueryVariable = sQuery
End Function
------------------
/ Torbjörn Hansson, webbutvecklare
Endero Sverige