webForumDet fria alternativet

Ta bort värde från en QueryString?

ASP

6 svar · 233 visningar · startad av toha

Medlem sedan dec. 1999707 inlägg
Frågan#1

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

Medlem sedan dec. 19998 577 inlägg
#2

Varför skickar du med den överhuvudtaget om du inte skall använda den?

------------------
Kom hem till mig...

Medlem sedan dec. 1999707 inlägg
#3

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

Medlem sedan dec. 19996 721 inlägg
#4
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

Medlem sedan dec. 1999707 inlägg
#5

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

Medlem sedan aug. 2000106 inlägg
#6

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.

Medlem sedan dec. 1999707 inlägg
#7

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, "&#0124;", "\&#0124;")

	Set oRegExp = New RegExp
		oRegExp.IgnoreCase = True
		oRegExp.Global = True
		oRegExp.Pattern = "(&&#0124;^)" & 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

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