Avevo fatto una funzioncina apposta in C# tempo fa. In pratica dovrebbe prendere tutte le vecchie qs, ed aggiungere le nuove passate tramite i due array (uno per i nomi, l'altro per i valori) controllando che non siano già presenti. Prendila con le molle visto che è un po' che l'ho fatta e che non so se è l'ultima versione (che ho di sicuro in ufficio), ma ti può cmq essere di ispirazione.
Sndk
codice:
string[] arrQSP = new string[1] {"qsSndkPage"};
string[] arrQSPValue = new string[1] {i.ToString()};
string paginaPassaggio = Request.ServerVariables["URL"] + getQS(arrQSP, arrQSPValue);
/// <summary>
/// Prende le vecchie QueryString e le passa.
/// </summary>
private string getQS(string[] qsToSet, string[] qsToSetValue)
{
int lunSet = qsToSet.Length;
int lunSetVallue = qsToSetValue.Length;
string vecchieQs = Request.ServerVariables["QUERY_STRING"].Trim();
int posizione;
if( vecchieQs.Length == 0 )
{
for(int i=0; i<lunSet; i++)
{
if(i==0) {vecchieQs = "?" + qsToSet[i] + "=" + qsToSetValue[i];}
else {vecchieQs += "&" + qsToSet[i] + "=" + qsToSetValue[i];}
}
}
else
{
//Ci sono già delle qs
posizione = vecchieQs.IndexOf(qsToSet[0] + "=");
if( posizione == -1)
{
//Prima volta
for(int i=0; i<lunSet; i++)
{
if(i==0) {vecchieQs = "?" + vecchieQs + "&" + qsToSet[i] + "=" + qsToSetValue[i];}
else {vecchieQs += "&" + qsToSet[i] + "=" + qsToSetValue[i];}
}
}
else
{
//ennesima volta. Deve sostituire il n. di pagina.
if( posizione <= 1 )
{
for(int i=0; i<lunSet; i++)
{
if(i==0) {vecchieQs = "?" + qsToSet[i] + "=" + qsToSetValue[i];}
else {vecchieQs += "&" + qsToSet[i] + "=" + qsToSetValue[i];}
}
}
else
{
for(int i=0; i<lunSet; i++)
{
if(i==0) {vecchieQs = "?" + vecchieQs.Substring(0,posizione) + qsToSet[i] + "=" + qsToSetValue[i];}
else {vecchieQs += "&" + qsToSet[i] + "=" + qsToSetValue[i];}
}
}
}
}
return vecchieQs;
}