Ta bort värde från en QueryString?

ASP

6 svar · 252 visningar · startad av toha

Medlem sedan dec. 1999707 inlägg
Trådstart#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?

Medlem sedan dec. 19998 577 inlägg
#2

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

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.

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
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?

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
252 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)