C# 有没有办法从asp.net中的查询字符串中删除项?
如果有,我可以在页面加载时循环并删除这些项目吗?查询字符串似乎是一个只读集合。如果页面是回发,则querystring数据已过时。发生这种情况时,我想重新清理URL?有什么办法吗?不幸的是,即使您从服务器端的字符串中删除了项目,当您发送回响应时,浏览器也不会在意——它仍然会显示原始URL 通过发出C# 有没有办法从asp.net中的查询字符串中删除项?,c#,asp.net,query-string,C#,Asp.net,Query String,如果有,我可以在页面加载时循环并删除这些项目吗?查询字符串似乎是一个只读集合。如果页面是回发,则querystring数据已过时。发生这种情况时,我想重新清理URL?有什么办法吗?不幸的是,即使您从服务器端的字符串中删除了项目,当您发送回响应时,浏览器也不会在意——它仍然会显示原始URL 通过发出响应.redirect(),可以将浏览器重定向到一个新的URL,并删除参数 另外,考虑将查询更改为使用POST而不是GET,所以参数不会出现在URL中。 < P>这里的一些解决方案: 您应该能够提取
响应.redirect()
,可以将浏览器重定向到一个新的URL,并删除参数
另外,考虑将查询更改为使用POST而不是GET,所以参数不会出现在URL中。
< P>这里的一些解决方案:您应该能够提取值,删除不需要的值,并重新构建查询字符串。然后,只需重定向到具有新值的页面?如果请求不是回发,则最好将查询字符串的副本分配给页面加载中的页面参数。对副本进行修改,并将其用于任何进一步的操作。如果需要在加载之间保留更改,请将修改后的值指定给隐藏的表单字段
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];
}
这在伪代码端比在可执行代码端更重要,但我希望它足够好,以便于说明。为什么要清理它?为了外表?如果有一个程序性的原因,请考虑在事件处理程序中使用if(.ISPrBACK)来区分原始和后记PGEQUILD()。正如其他受访者正确指出的那样,虽然有一些方法可以做到这一点,但你正在颠覆一种微软有意建立的机制,这种机制是ASP.NET不可或缺的一部分。如果这是一个外观问题,那么按照@womp的建议使用POST vs.GET。