window.history.back()的改進方法window.history.go()


      今天在做項目時,測試人員提出了一條bug,起初沒當回事,在改動過程中才意識到其重要性,故記錄下來。

      依照需求,系統應該實現例如以下的功能:有三個關聯的頁面a.aspx(簡稱a),b.aspx(簡稱b),,c.aspx(簡稱c),當中a頁面主要是進行因子錄入,所有錄入后點擊“模型檢驗”,進入b頁面,b頁面中存在兩個button,各自是“模型調整”和“取消”,點擊“模型調整”進入c頁面,點擊“取消”返回錄有數據的a頁面。c頁面存在兩個button,各自是“模型確認”和“取消”。點擊“取消”,返回到b頁面。

      而bug的大概意思就是:先在b頁面點擊“模型調整”進入c頁面,再在c頁面點擊“取消”,返回到b頁面。最后,在b頁面點擊“取消”,理論上應該直接返回到錄有數據的a頁面,但此時卻須要點擊兩次“取消”才干夠實現。

      細致看頁面,前台寫的方法是window.history.back(),若要這樣的方法實現理論上的效果,僅僅能是在b頁面存在一個“取消”button,或者僅僅點擊“取消”button。否則就會出現bug中的問題。

      我在網上找答案,可是其給出的答案不可以直接應用,我做了一些改動,終於可以實現預期效果,代碼例如以下:

 

      前台,<a href="#" id="alink" runat="server"><img src="qx.jpg" border="0"></a>

 

      后台,在page_load()中寫入例如以下代碼:

 

            string sKey = Request.Url.LocalPath;

            HttpCookie cookfrom = Request.Cookies[sKey];

 

            if (cookfrom == null)
            {
                cookfrom = new HttpCookie(sKey);
            }

 

            string sTimes = "0 ";

            if (IsPostBack)
            {
                sTimes = cookfrom["count "];
                sTimes = (Convert.ToInt32(sTimes) + 1).ToString();
            }
            cookfrom["count "] = sTimes;
            Response.Cookies.Add(cookfrom);

            int iTimes = (GetPageRequestTimes()) * -1;
            this.alink.Attributes.Add("onclick ", "javascript:window.history.go( " + iTimes.ToString() + "); ");

 

       當中,GetPageRequestTimes()方法例如以下:

 

        public static int GetPageRequestTimes()
        {
            string sKey = System.Web.HttpContext.Current.Request.Url.LocalPath;
            HttpCookie cookfrom = System.Web.HttpContext.Current.Response.Cookies[sKey];

           

            string sTimes = cookfrom["count "];

            if (sTimes.Length > 0)

            {
                    return Convert.ToInt32(sTimes) + 1;

            }
            else

            {
                    return 0;

             }
        }

 

      在網上,另一種方法例如以下,只是看跟帖的人說“假設直接右鍵刷新就不起作用了”,我個人在改動時並沒有採用這樣的方法,所以並不太了解,僅僅是作為一種參考放在這里,以免丟失。代碼例如以下:

 

      假設button的ID是LinkButton1
      protected   void   Page_Load(object   sender,   EventArgs   e)
      {
             int   x=0;
             if   (ViewState[ "x "]!=null)
             {
                   x=(int)ViewState[ "x "];
             }
             x++;
             ViewState[ "x "]=x;
 
             this.LinkButton1.Attributes.Add( "onclick ",    "window.history.go(- "+x+ ");   return   false ");

      } 

 

      注意:無論是window.go()還是window.back(),都僅僅能適用於父頁面與子頁面在同一個框架里,即子頁面不是單獨彈出的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM