在ASP.Net中清除或删除查询字符串

Piy*_*ush 25 c# asp.net

我有一个QueryString名为'flagEdit',我想在获取它的值后将其删除.但是,当我尝试使用它删除它

Request.QueryString.Clear();
Run Code Online (Sandbox Code Playgroud)

要么

Request.QueryString.Remove("editFlag");
Run Code Online (Sandbox Code Playgroud)

发生此错误 -

System.NotSupportedException:Collection是只读的.

所以,我想知道如何在获取它的值后删除查询字符串

Ama*_*ian 42

在ASP.NET中删除(删除)Querystring

Request.QueryString.Remove("editFlag")
Run Code Online (Sandbox Code Playgroud)

如果您执行上述操作,则会出现错误

集合是只读的.

因此,我们需要在删除查询字符串之前编写以下代码.

试试这种方式

PropertyInfo isreadonly = 
  typeof(System.Collections.Specialized.NameValueCollection).GetProperty(
  "IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);
// make collection editable
isreadonly.SetValue(this.Request.QueryString, false, null);
// remove
this.Request.QueryString.Remove("editFlag");
Run Code Online (Sandbox Code Playgroud)

你也可以这样试试

    var nvc = HttpUtility.ParseQueryString(Request.Url.Query);
    nvc.Remove("editFlag");
    string url = Request.Url.AbsolutePath + "?" + nvc.ToString();
     Response.Redirect(url);
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助

  • 这是他的问题的一个很好的答案,但我认为这个问题值得关注.首先,你想要做什么?实际情况是,在查询字符串完整的情况下调用页面; 无论你是否喜欢这些参数,都无法改变这一事实.欺骗不需要的参数也不会改变这个事实.因此,ReadOnlyCollection完全有意义恕我直言.拥有仅忽略参数的更智能的代码会不会更好? (3认同)
  • 因为您可能只需要更新查询字符串中的值。有时,尤其是在继承代码的情况下,您需要做一些非常规的事情以免破坏现有代码。 (2认同)

San*_*shM 11

如果您担心将来的页面回发运行与querystring具有值时要运行的相同代码,只需添加if(!Page.IsPostBack)条件.


gre*_*oss 5

如果您想清除全部QueryString,这对我有用:

Response.Redirect(Request.RawUrl.Replace(Request.Url.Query, ""));
Run Code Online (Sandbox Code Playgroud)

我正在清除一个表单,该表单的某些字段由填充QueryString,因此想对整个内容进行修改。

但是,如果您针对特定的参数并希望保留其余参数,那么其他人的答案可能会更好。