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

      今天在做项目时,测试人员提出了一条bug,起初没当回事,在修改过程中才意识到其重要性,故记录下来。

      按照需求,系统应该实现如下的功能:有三个关联的页面a.aspx(简称a),b.aspx(简称b),,c.aspx(简称c),其中a页面主要是进行因子录入,全部录入后点击“模型检验”,进入b页面,b页面中存在两个按钮,分别是“模型调整”和“取消”,点击“模型调整”进入c页面,点击“取消”返回录有数据的a页面。c页面存在两个按钮,分别是“模型确认”和“取消”。点击“取消”,返回到b页面。

      而bug的大概意思就是:先在b页面点击“模型调整”进入c页面,再在c页面点击“取消”,返回到b页面。最后,在b页面点击“取消”,理论上应该直接返回到录有数据的a页面,但此时却需要点击两次“取消”才可以实现。

      仔细看页面,前台写的方法是window.history.back(),若要这种方法实现理论上的效果,只能是在b页面存在一个“取消”按钮,或者只点击“取消”按钮。否则就会出现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;

             }
        }

 

      在网上,还有一种方法如下,不过看跟帖的人说“如果直接右键刷新就不起作用了”,我个人在修改时并没有采用这种方法,所以并不太了解,只是作为一种参考放在这里,以免丢失。代码如下:

 

      如果按钮的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(),都只能适用于父页面与子页面在同一个框架里,即子页面不是单独弹出的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值