簡體   English   中英

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

[英]How to clear/change the query string in aspx page?

我有兩個頁面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頁面時,我收到消息“操作成功”。 這是Ok.But當我再次刷新頁面時,我收到與“操作成功”相同的消息。 如何在頁面刷新時不再顯示相同的消息(按F5或重新加載)。

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

注意: IsPostback未在刷新時設置,僅當單擊按鈕或類似的東西時才會觸發ASP.NET回發操作。

您可以做的另一件事是設置一個Session變量,然后必須顯示'operation successcesful'(可能你在另一個Page確定了這個)。

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

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

第三種選擇是移動此客戶端。 在加載頁面時創建一個javascript操作。 當特定部分添加到查詢字符串( #showmessage )時,您可以捕獲它並顯示消息( 如何從GET參數中獲取值? )。

然后通過將URL設置為剝離版本重定向到無參數版本( # )。 設置window.location.hrefwindow.location.search (這不會導致對Web服務器的調用,因為它是所有客戶端)。

這避免了第一種解決方案的缺點,但引入了更多的代碼客戶端。 幸運的是,ASP.NET MVC有一些機制。 不幸的是,ASP.NET Web Forms沒有這些。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM