views:

151

answers:

3

if I have http://mysite.com?abc=123&def=345, can I loop through on page load and remove those items? It looks like the Querystring is a readonly collection. If the page is a postback, the querystring data is stale. I would like to clean up the URL back when that happens? Any ideas on how to do this?

+2  A: 

Unfortunately, even if you removed items from the string on the server side, when you sent the response back, the browser wouldn't care - it would still be diplaying the original URL.

The best you can do is to redirect the browser to a new URL with the parameters removed by issuing a Response.Redirect().

Otherwise, consider changing the query to use POST instead of GET, so the parameters don't show up in the URL.

womp
A: 

Some solutions here:

http://stackoverflow.com/questions/529551/how-can-i-remove-item-from-querystring-in-asp-net-using-c

http://stackoverflow.com/questions/229925/outputing-a-manipulated-querystring-in-c/

You should be able to extract the values, remove the ones you don't want and re-build the query string. Then, just redirect to the page with the new values?

IrishChieftain
A: 

It might be wiser to assign a copy of the queryString to a page parameter in page_load if the request is not a postback. Make your modifications to the copy, and use that for any further operations. If you need to persist the changes between loads, assign the modified value to a hidden form field.

protected void Page_Load(object sender, EventArgs e)
{
    sring saveQueryString;

    if (!IsPostBack)
    {
        saveQueryString = Request.QueryString.ToString(); // join here - I doubt .ToString() will return the expected a=1?b=2?c=3 string

        // modify to your hearts content here...

        hiddenFormField.Text = saveQueryString;
    }
    else
        saveQueryString = Request.Form[hiddenFormField.Id];

}

That's more on the pseudocode end than executable, but I hope it's good enough for illustration purposes.

David Lively