第一次在浏览器中显示从查询字符串中删除的参数

时间:2014-08-18 08:30:39

标签: asp.net url

我正在使用ASP.NET Web Forms应用。在某个时刻,我必须使用

从javascript导航到另一个页面
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=..但是它已被清除。但是我根本不想展示它。

1 个答案:

答案 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