如何在aspx页面中清除/更改查询字符串?

时间:2014-05-02 10:37:37

标签: c# asp.net .net query-string

我有两页 1. a.aspx和 2. b.aspx 我从" b.aspx传递查询字符串?save = success"到a.aspx。  在a.aspx的Page Load中,我有以下代码:

Page_Load()
{ 
    if(!Postback)
    {
        if (Request.QueryString["save"] != null) 
        {
            noDataFound.InnerHtml = "operation success";
        }
    }
}

问题:在加载a.aspx页面时,我收到消息"操作成功"。这是好的。但是当我再次刷新页面时,我得到的信息与#34;操作成功"相同。如何在页面刷新时不再显示相同的消息(按F5或重新加载)。

3 个答案:

答案 0 :(得分:3)

function invokeMeMaster() {

    var isPostBack = <%= Page.IsPostBack ? "true" : "false" %> ;

    if (!isPostBack) {

        /* START */
        var query = getQueryParams(document.location.search);

        var p = query.save;
        if (sessionStorage.hits) {
            sessionStorage.hits = Number(sessionStorage.hits) + 1;
        } else {
            sessionStorage.hits = 1;
        }

        if (p == "success" && (sessionStorage.hits) % 2 == 0) {

            document.getElementById("<%=noDataFound.ClientID %>").innerText = "Testing...........";
        }

        function getQueryParams(qs) {
            qs = qs.split("+").join(" ");

            var params = {}, tokens,
            re = /[?&]?([^=]+)=([^&]*)/g;

            while (tokens = re.exec(qs)) {
                params[decodeURIComponent(tokens[1])] = decodeURIComponent(tokens[2]);
            }

            return params;
        }

        /* END */

    } else {
        document.getElementById("<%=noDataFound.ClientID %>").innerText = "";

    }
}
window.onload = function () {
    invokeMeMaster();
};

答案 1 :(得分:2)

未经测试的解决方案(Keeping F5 or Reload of Page in mind),您可能会执行以下操作:

if(!IsPostBack)
{ 

  if (Request.QueryString["save"] != null && Session["CheckSuccess"] == null)
  { 
    noDataFound.InnerHtml = "operation success";
    Session["CheckSuccess"] = "true";
  } 
  else
    noDataFound.InnerHtml = string.Empty;
}

答案 2 :(得分:1)

我能想到的最好的就是使用IsPostback属性来检查它。

if (!this.IsPostback)
{
    // first try
   if (Request.QueryString["save"] != null)
   {noDataFound.InnerHtml = "operation success";}
}

注意:只有在单击某个按钮或其他类似内容时才会在刷新时设置IsPostback

你可以做的另一件事是设置一个Session变量,然后&#39;操作成功&#39;必须显示(可能您在另一个Page中确定了这一点。

// other page
Session["showSaveMessage"] = true;

// this page
if (Session["showSaveMessage"] == true)
{
    // show message
    Session["showSaveMessage"] = false;
}

第三种选择是移动此客户端。在加载页面时创建一个javascript操作。将特定部分添加到查询字符串(#showmessage)后,您可以捕获该部分并显示消息(How to get the value from the GET parameters?)。

然后通过将url设置为剥离版本来重定向到无参数版本(#)。为此设置window.location.hrefwindow.location.search(这不会导致对网络服务器的调用,因为它是所有客户端)。

这避免了第一个解决方案的缺点,但引入了更多的代码客户端。幸运的是,ASP.NET MVC有一些机制。不幸的是,ASP.NET Web Forms并没有那些。