Change Single URL query string value

前端 未结 5 474
说谎
说谎 2020-12-01 02:08

I have an ASP.NET page which takes a number of parameters in the query string:

search.aspx?q=123&source=WebSearch

This would display th

5条回答
  •  温柔的废话
    2020-12-01 02:50

    You can't modify the QueryString directly as it is readonly. You will need to get the values, modify them, then put them back together. Try this:

    var nameValues = HttpUtility.ParseQueryString(Request.QueryString.ToString());
    nameValues.Set("page", "2");
    string url = Request.Url.AbsolutePath;
    string updatedQueryString = "?" + nameValues.ToString();
    Response.Redirect(url + updatedQueryString);
    

    The ParseQueryString method returns a NameValueCollection (actually it really returns a HttpValueCollection which encodes the results, as I mention in an answer to another question). You can then use the Set method to update a value. You can also use the Add method to add a new one, or Remove to remove a value. Finally, calling ToString() on the name NameValueCollection returns the name value pairs in a name1=value1&name2=value2 querystring ready format. Once you have that append it to the URL and redirect.

    Alternately, you can add a new key, or modify an existing one, using the indexer:

    nameValues["temp"] = "hello!"; // add "temp" if it didn't exist
    nameValues["temp"] = "hello, world!"; // overwrite "temp"
    nameValues.Remove("temp"); // can't remove via indexer
    

    You may need to add a using System.Collections.Specialized; to make use of the NameValueCollection class.

提交回复
热议问题