Yep, something like this will do the job for you, in your page load event for example:
// Check to see if the user submitted the form:
if (Page.IsPostBack){
// Get the Params collection - query and forms
NameValueCollection params = Request.Params;
StringBuilder query = new StringBuilder();
// Iterate over the params collection to build a complete
// query string - you can skip this and just build it
// manually if you don't have many elements to worry about
for(int i = 0; i <= params.Count - 1; i++)
{
// If we're not on the first parameter, add an & seperator
if (i > 0){
query.Append("&");
}
// Start the query string
query.AppendFormat("{0}=", params.GetKey(i));
// Create a string array that contains
// the values associated with each key,
// join them together with commas.
query.Append(String.Join(",", pColl.GetValues(i));
}
Response.Redirect(String.Format("{0}?{1}",
Request.Url.AbsolutePath, query.ToString()))
}
The other problem with this pattern is that you'll end up with this additional redirect in the history which might cause the users to have to click back twice to get back to your search form.
On the plus side, they can now bookmark the results page quite happily and return to their results without having to re-submit the form.