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

window.history.back()的改进方法window.history.go()今天在做项目时,测试人员提出了一条bug,起初没当回事,在修改过程中才意识到其重要性,故记录下来。      按照需求,系统应该实现如下的功能:有三个关联的页面a.aspx(简称a),b.aspx(简称b),,c.aspx(简称c),其中a页面主要是进行因子录入,全部录入后点

      今天在做项目时,测试人员提出了一条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(),都只能适用于父页面与子页面在同一个框架里,即子页面不是单独弹出的。

今天的文章window.history.back()的改进方法window.history.go()分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/12905.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注