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

window.history.back()的改进方法window.history.go()的更多相关文章

  1. window.opener调用父窗体方法的用法

    应用实例:        function BindWindowCloss() {            $(window).bind('beforeunload', function () {    ...

  2. html5新特性:利用history的pushState等方法来解决使用ajax导致页面后退和前进的问题

    一.背景 使用ajax,可以实现不需要刷新整个页面就可以进行局部页面的更新.这样可以开发交互性很强的富客户端程序,减少网络传输的内容.但长期以来存在一个问题,就是无法利用浏览器本身提供的前进和后退按钮 ...

  3. JavaScript中的window对象的属性和方法;JavaScript中如何选取文档元素

    一.window对象的属性和方法 ①setTimeout()方法用来实现一个函数在指定毫秒之后运行,该方法返回一个值,这个值可以传递给clearTimeout()用于取消这个函数的执行. ②setIn ...

  4. 1.4(JavaScript学习笔记) window对象的属性及方法

    一.window对象 window对象代表当前窗口,所有全局对象都是windows的属性, 例如document是window的属性,window.document.writer("&quo ...

  5. (转)移动端自定义返回上一页的方法:history

    在实际的应用中,我们常常需要实现在移动app和浏览器中点击返回.后退.上一页等按钮实现自己的关闭页面.调整到指定页面或执行一些其它操作的需求. 那在代码中怎样监听当点击微信.支付宝.百度糯米.百度钱包 ...

  6. javascript js全部的 全局属性 和 方法-window

    window method: open(URL,窗口名称,窗口风格)//打开一个新的窗口,并在窗口中装载指定URL地址的网页 close()//close方法用于自动关闭浏览器窗口 alert(提示字 ...

  7. history对象属性和方法

    history对象保存着用户上网的历史记录,从窗口被打开的那一刻算起,history是window对象的属性,因此每个浏览器窗口.每个标签页乃至每个框架,都有自 己的history对象和特定的wind ...

  8. window对象中的常见方法

    <body><!-- window对象中的常见方法--><script type="text/javascript"> var timeid; ...

  9. 在ROS(indigo)中读取手机GPS用于机器人定位~GPS2BT在ubuntu和window系统下的使用方法~

    在ROS(indigo)中读取手机GPS用于机器人定位~GPS2BT在ubuntu和window系统下的使用方法~ 不需要额外购买GPS设备. 将手机GPS数据通过蓝牙传输给计算机使用,当然通过类似方 ...

随机推荐

  1. OCA读书笔记(16) - 执行数据库恢复

    16. Performing Database Recovery 确定执行恢复的必要性访问不同接口(EM以及命令行)描述和使用可用选项,如RMAN和Data Recovery Advisor执行恢复- ...

  2. Python处理海量手机号码

    Python处理海量手机号码 一.任务描述 上周,老板给我一个小任务:批量生成手机号码并去重.给了我一个Excel表,里面是中国移动各个地区的可用手机号码前7位(如下图),里面有十三张表,每个表里的电 ...

  3. loj1370(欧拉函数+线段树)

    传送门:Bi-shoe and Phi-shoe 题意:给出多个n(1<=n<=1e6),求满足phi(x)>=n的最小的x之和. 分析:先预处理出1~1e6的欧拉函数,然后建立一颗 ...

  4. 【Nginx】启动过程

    从应用程序的启动过程中main功能开始跟踪. 解析命令行參数并保存到ngx_cycle_t结构体中,在ngx_process_options函数中将保存配置文件路径. 调用ngx_add_inheri ...

  5. Domain Model(领域模型)

    Domain Model(领域模型) 上一篇:<DDD 领域驱动设计-如何 DDD?> 开源地址:https://github.com/yuezhongxin/CNBlogs.Apply. ...

  6. 《深入理解OSGi:Equinox原理、应用与最佳实践》笔记_1_运行最简单的bundlehelloworld

    <深入理解OSGi:Equinox原理.应用与最佳实践>笔记_1_运行最简单的bundlehelloworld 买了周大大的OSGI的书看 先前完全没有基础 就靠这本书看看学学 顺便记一些 ...

  7. Volley该框架使用了大量的请求图片

    尊重原创 http://write.blog.csdn.net/postedit/26142025 代码下载:http://download.csdn.net/detail/yuanzeyao2008 ...

  8. cocostudio内存释放

    在使用cocostudio时,在释放内存时能够这样做: 在onExit()方法里加入例如以下: void LoadLayer::onExit() { // 释放本对象自己 removeFromPare ...

  9. POJ 1422 Air Raid(二分图匹配最小路径覆盖)

    POJ 1422 Air Raid 题目链接 题意:给定一个有向图,在这个图上的某些点上放伞兵,能够使伞兵能够走到图上全部的点.且每一个点仅仅被一个伞兵走一次.问至少放多少伞兵 思路:二分图的最小路径 ...

  10. There is no Action mapped for namespace / and action name UserAction

    果断收藏了,说的非常具体.刚開始学习的人常常遇到的问题. There is no Action mapped for namespace / and action name UserAction 在网 ...