2009-12-23 98 views
2

假设我有链接http://www.somesite.com/file.aspx?a=1&b=2如何从url中删除查询字符串参数?

现在我想删除所有的参数,所以就变成:

http://www.somesite.com/file.aspx

或者我可能希望只删除参数,如

http://www.somesite.com/file.aspx?b=2

有没有办法在C#中执行上述操作?发生的事情是,我来自另一个页面,它带有一个名为edit的参数,但是当页面进行回发时,edit参数仍然存在,所以它仍然认为它处于编辑模式。例如:

用户A转到one.aspx页面并单击编辑链接。他们被带到two.aspx?edit = true。在页面加载期间,它会看到查询字符串参数edit不为null,并将内容置于编辑模式。一旦用户完成编辑,页面被刷新,但url仍然是two.aspx?edit = true,并保持内容处于编辑模式,实际上它应该是two.aspx

回答

10

Request.Querystring is只读集合 - 您无法修改它。

如果您需要删除或更改查询字符串中的参数,唯一的办法是触发一个新的GET请求与更新的查询字符串 - 这意味着你将不得不做更新的URL的Response.Redirect。这会导致您失去当前页面的视图状态。

+0

这就是我实际上在做的事情,所以我想我被困住了。谢谢。 – Xaisoft 2009-12-23 06:51:32

+0

如果你使用会话,你没有问题 – Pierre 2015-01-29 11:09:46

1

当您完成编辑时,您正在做一个回发,所以只需定义要发布到two.aspx的操作,而不是仅仅发布回自己,这样会退出get参数。

1

如何检查Page.IsPostBack查看当前请求是否是回发?

2

使用PostBackUrl属性,例如:

<asp:Button ID="DoneEditingButton" runat="server" Text="Done editing" PostBackUrl="~/two.aspx" /> 
1

如果你只有字符串,你可以使用:

strinULR.Split('?').First(); 

strinULR.Split('?').FirstOrDefault(); 
0

尝试类似这样的东西。

if (url.Contains("?")) 
      url = url.Substring(0, url.IndexOf("?")); 

在这个例子中,我检查如果URL中甚至包含查询字符串,如果确实如此,减去获取字符串的“左部”之前?

+0

欢迎来到堆栈溢出!感谢您的代码片段,它可能会提供一些有限的即时帮助。通过展示*为什么*这是一个很好的解决方案,并且使它对未来的读者更有用,一个正确的解释[将大大提高](// meta.stackexchange.com/q/114762)其长期价值其他类似的问题。请[编辑]你的答案以添加一些解释,包括你所做的假设。 – 2017-10-12 10:36:22

相关问题