【问题标题】:Is there any way to remove items from the Querystring in asp.net?有没有办法从 asp.net 中的 Querystring 中删除项目?
【发布时间】:2009-09-30 17:42:06
【问题描述】:

如果我有http://mysite.com?abc=123&def=345,我可以在页面加载时循环并删除这些项目吗?看起来 Querystring 是一个只读集合。如果页面是回发,则查询字符串数据已过时。我想在发生这种情况时清理 URL?关于如何做到这一点的任何想法?

【问题讨论】:

  • 为什么要清理它?为了面子?如果有程序原因,请考虑在事件处理程序中使用 if (! IsPostback) 来区分原始和回发 Page_Load()。
  • 说真的,在完成之前先考虑一下。虽然,正如其他受访者正确指出的那样,有一些方法可以实现这一点,但您正在颠覆 Microsoft 有意实施的机制,该机制是 ASP.NET 的一个组成部分。如果是外观问题,请遵循@womp 的建议,即使用 POST 与 GET。

标签: c# asp.net query-string


【解决方案1】:

不幸的是,即使您从服务器端的字符串中删除了项目,当您发回响应时,浏览器也不会在意 - 它仍然会显示原始 URL。

您可以做的最好的事情是通过发出Response.Redirect() 将浏览器重定向到删除了参数的新 URL。

否则,请考虑将查询更改为使用 POST 而不是 GET,这样参数就不会显示在 URL 中。

【讨论】:

    【解决方案2】:

    这里有一些解决方案:

    How can i remove item from querystring in asp.net using c#?

    Outputing a manipulated QueryString in c#

    您应该能够提取值、删除不需要的值并重新构建查询字符串。然后,只需重定向到具有新值的页面?

    【讨论】:

      【解决方案3】:

      如果请求不是回发,则将 queryString 的副本分配给 page_load 中的页面参数可能更明智。对副本进行修改,并将其用于任何进一步的操作。如果您需要在加载之间保留更改,请将修改后的值分配给隐藏的表单字段。

      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];
      
      }
      

      这更多的是伪代码而不是可执行文件,但我希望它足以用于说明目的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-12
        • 1970-01-01
        • 2017-02-01
        • 2018-09-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多