2009-09-30 59 views
0

如果我有http://mysite.com?abc=123&def=345,我可以在页面加载时循环并删除这些项目吗?它看起来像Querystring是只读集合。如果该页面是回发,查询字符串数据是陈旧的。我想在这种情况发生时清理URL?任何想法如何做到这一点?有什么办法从asp.net中的Querystring中删除项目?

+1

你为什么要清理它?为了外观的缘故?如果存在编程原因,请考虑在事件处理程序中使用if(!IsPostback)来区分原始和回发Page_Load()的。 – 2009-09-30 17:46:38

+0

严肃地说,在对它进行处理之前,先对此进行一些思考。尽管正如其他受访者已经正确指出的那样,有很多方法可以实现这一目标,但是您正在颠覆微软故意实施的机制,这是ASP.NET的一个组成部分。如果是外观问题,请使用@ womp的使用POST和GET的建议。 – 2009-09-30 19:21:14

回答

2

不幸的是,即使您从服务器端的字符串中删除了项目,但当您将响应发送回来时,浏览器并不在乎 - 它仍然会使原始URL缩回。

您可以做的最好的做法是将浏览器重定向到一个新的URL,并通过发出Response.Redirect()来删除参数。

否则,请考虑将查询更改为使用POST而不是GET,因此参数不会显示在URL中。

0

如果请求不是回发,那么将queryString的副本分配给page_load中的页面参数可能更明智一些。对副本进行修改,并将其用于任何进一步的操作。如果您需要在加载之间持续更改,请将修改的值分配给隐藏的表单字段。

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]; 

} 

这对伪代码结束比可执行文件更多,但我希望它足够好用于说明目的。