今天在做项目时,测试人员提出了一条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