46 votes

Comment mettre à jour la chaîne de requête en C# ?

Quelque part dans l'url, il y a un &sortBy=6 . Comment mettre à jour ceci vers &sortBy=4 ou &sortBy=2 en cliquant sur un bouton ? Dois-je écrire des fonctions de chaîne personnalisées pour créer l'URL de redirection correcte ?

Si j'ai juste besoin d'ajouter une variable de chaîne de requête, je le ferais

 string completeUrl = HttpContext.Current.Request.Url.AbsoluteUri + "&" + ...
Response.Redirect(completeUrl);

Mais ce que je veux faire, c'est modifier une variable de chaîne de requête existante.

120voto

Ahmad Mageed Points 44495

Pour modifier une valeur QueryString existante, utilisez cette approche :

 var nameValues = HttpUtility.ParseQueryString(Request.QueryString.ToString());
nameValues.Set("sortBy", "4");
string url = Request.Url.AbsolutePath;
Response.Redirect(url + "?" + nameValues); // ToString() is called implicitly

J'entre plus en détail dans une autre réponse .

8voto

m.othman Points 310

Récupérez la chaîne de requête de sortby , puis effectuez un remplacement de chaîne sur l'URL complète comme suit :

 string sUrl = *retrieve the required complete url*
string sCurrentValue = Request.QueryString["sortby"];
sUrl = sUrl.Replace("&sortby=" + sCurrentValue, "&sortby=" + newvalue);

Dis moi comment ça se passe :)

Bonne chance

7voto

Mathias Nohall Points 1
    private void UpdateQueryString(string queryString, string value)
    {
        PropertyInfo isreadonly = typeof(System.Collections.Specialized.NameValueCollection).GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);
        isreadonly.SetValue(this.Request.QueryString, false, null);
        this.Request.QueryString.Set(queryString, value);
        isreadonly.SetValue(this.Request.QueryString, true, null);
    }

1voto

user2832159 Points 31

Sur la base de la solution Ahmad, j'ai créé la méthode suivante qui peut être utilisée généralement

 private string ModifyQueryStringValue(string p_Name, string p_NewValue)
{

    var nameValues = HttpUtility.ParseQueryString(Request.QueryString.ToString());
    nameValues.Set(p_Name, p_NewValue);
    string url = Request.Url.AbsolutePath;
    string updatedQueryString = "?" + nameValues.ToString();
    return url + updatedQueryString;
}

et puis nous comme suit

 Response.Redirect(ModifyQueryStringValue("SortBy","4"));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X