zoukankan      html  css  js  c++  java
  • JavaScript:history.go() 的妙用

     
     在Web开发中,会遇到从一页(父页)导向另一页(子页),并且要求“返回”父页的情况,在这里如果用ASP.NET提供的Response.Redirect()方法,往往不会达到理想的效果,例如:返回后,重新加载了页面,无法保存导向子页前的状态,等等,在这里我就介绍一下如何使用JavaScript中history.go()函数来实现返回功能并且保存住状态的方法。
         这个函数用起来很简单,只要在页面上加一个html的input元素,例如:
         <input type="button" value="返回">
         然后再为这个元素添加onclick属性,如:
         <input type="button" value="返回" onclick="history.go(-1);">
         这样就能达到返回上一页的效果。但是,往往在实践中,并没有这么简单,当你在向服务器提交请求的时候,引起页面回发,你再用history.go(-1)这招就不灵啦,它在这里是返回你回发前的状态,go后面的参数,实际上就是标识你要返回你回发第前n次的状态,所以只要能记住回发了几次,就能用history.go(-n)准确地返回到父页了。
         在Web开发中,全局变量也是存不住的,当页面回发后,全局变量的值就会丢失,取而代之的是视图状态,所以我们就只能用视图状态来记录回发的次数了。那么就封装一个视图状态属性把。
         public int returnCount
         {
             get{
                   if(ViewState["returnCount"] == null)
                       ViewState["returnCount"] = 0;
                   return   (int)ViewState["returnCount"];
             }
             set { ViewState["returnCount"] = value ;}
         }
         定义好这个后,把他放到Page_Load里面,让他每次在页面回发时减1,这样就能准确的记住回发了几次。
         protected void Page_Load(object sender, EventArgs e)
         {
             returnCount--; //要放在!iIsPostBack之外,要不然就仅仅在页面第一次加载时执行一次,回发时就不执行了。
             if(!IsPostBack)
             {

             }
         }
         吼吼,到这一步还没完呢,要把我们封装的属性加到Js里面。如下:
         <input type="button" value="返回" onclick="history.go('<% =returnCount %>');">
         这下就完美了,管你在页面上怎么回发,只要一点这个按钮,肯定会返回到父业的。
         注意:
         1、如果在本页面上有Response.Redirect()到本页或者类似的情况,那么就要将returnCount作为查询字符串传递一下了,因为这东西在页面失效时就over了。
         2、本文仅对非Ajax的Web系统有作用,Ajax的还没仔细研究过
     
  • 相关阅读:
    SQL注入
    mysq笔记
    白话内存管理(一):从开国大典说起
    【转载】光纤协议中 WWPN 编码规则及实例解析
    利用django打造自己的工作流平台(三):任务的批量分派和跟踪
    利用django打造自己的工作流平台(二):疫情统计系统
    利用django打造自己的工作流平台(一):从EXCEL到流程化运作
    驾驭git merge——git merge的规范化操作
    一款用于绘制状态机转换图和流程图的web在线绘图工具
    利用python+graphviz绘制数据结构关系图和指定目录下头文件包含关系图
  • 原文地址:https://www.cnblogs.com/barney/p/1298092.html
Copyright © 2011-2022 走看看