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

本文关键字:字符串 查询 aspx 更改 何清除 清除 | 更新日期: 2023-09-27 18:01:12

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

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

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

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

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();
};

未经测试的解决方案(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;
}

我能想到的最好的方法是使用IsPostback属性来检查这一点。

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

注意:只有在单击按钮或类似按钮触发ASP.NET回发操作时,才会在刷新时设置IsPostback

您可以做的另一件事是设置会话变量,然后必须显示"操作成功"(可能是您在另一个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(这不会导致对Web服务器的调用,因为它都是客户端(。

这避开了第一个解决方案的缺点,但引入了更多的代码客户端。幸运的是,ASP.NET MVC对此有一些机制。不幸的是,ASP.NET Web窗体没有这些功能。