我正在使用ASP.NET Web Forms
应用。在某个时刻,我必须使用
window.location = '/Clients/Edit.aspx?ClientId=' + id;
会导致这样的网址 - http://localhost:5870/Clients/Edit.aspx?ClientId=1
。然而,这有点误导,因为一旦我在编辑页面上,我可能会选择编辑另一个客户端,下次我使用Ajax
请求执行此操作,因此URL
始终保留为第一个用户。而不是寻找一种方法来显示始终正确的ID(用户不需要此信息),我宁愿删除它,所以它至少不会产生误导。所以在我的编辑页面中我有这段代码:
protected void Page_Init(object sender, EventArgs e)
{
if(!IsPostBack)
{
System.Reflection.PropertyInfo isreadonly =
typeof(System.Collections.Specialized.NameValueCollection).GetProperty(
"IsReadOnly", System.Reflection.BindingFlags.Instance |
System.Reflection.BindingFlags.NonPublic);
// make collection editable
isreadonly.SetValue(this.Request.QueryString, false, null);
// remove
this.Request.QueryString.Remove("ClientId");
}
}
}
这几乎正常。当我第一次加载页面时,我仍然在我的URL中获得ClientId=..
但是它已被清除。但是我根本不想展示它。
答案 0 :(得分:1)
假设您有以下网址:
http://localhost:5870/Clients/Edit.aspx?ClientId=1
您可以将其用作JS代码:
<script>
window.history.pushState('obj', '', '.');
</script>
输出: http://localhost:5870/Clients/
或者使用这个:
<script>
window.history.pushState('obj', '', 'edit.aspx');
</script>
输出: http://localhost:5870/Clients/edit.aspx
注意:请注意,此更改对于进程无效且仅用于show,因此您不能将它们用作新的QuesryString,如果您尝试获取QueryString的值,则从原始URL获取原始QueryString