页面反复加载问题:导航栏加载后页面持续刷新的技术咨询
解决页面持续刷新的问题
看起来你的代码陷入了无限重定向循环,原因很直白:每次页面加载时,只要newOption = Option.Opt1的条件成立,你就会强制顶级窗口跳转到userHome.aspx;但跳转到这个页面后,Page_Load事件又会再次触发,重复执行同样的重定向逻辑,最终导致页面不停刷新。
修复方案一:前端判断避免重复重定向
我们可以在前端脚本里添加判断,确认当前顶级窗口的URL已经不是目标页面时,再执行重定向:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim path As String = HttpContext.Current.Request.Url.PathAndQuery Dim newOption = cSession.User.p_Option Dim targetUrl = ResolveUrl("~/userHome/userHome.aspx") If newOption = Option.Opt1 Then Session("lastUrl") = path Me.ClientScript.RegisterClientScriptBlock( Me.GetType, "RedirectScript", String.Format("if(window.top.location.href.indexOf('{0}') === -1) {{ window.top.location = '{0}'; }} ", targetUrl), True ) End If End Sub
修复方案二:后端直接校验当前页面
如果你更信任后端逻辑,也可以直接在后端对比当前请求的页面是否是目标页面,从根源上阻止循环:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim path As String = HttpContext.Current.Request.Url.PathAndQuery Dim newOption = cSession.User.p_Option Dim targetPath = VirtualPathUtility.ToAbsolute("~/userHome/userHome.aspx") ' 只有当条件满足,且当前页面不是目标页面时才执行重定向 If newOption = Option.Opt1 AndAlso Not path.Equals(targetPath, StringComparison.OrdinalIgnoreCase) Then Session("lastUrl") = path Me.ClientScript.RegisterClientScriptBlock( Me.GetType, "RedirectScript", String.Format("window.top.location = '{0}'; ", ResolveUrl("~/userHome/userHome.aspx")), True ) End If End Sub
方案说明
- 前端方案通过JS判断顶级窗口的URL是否包含目标页面路径,只有当不匹配时才触发跳转,避免重复执行重定向。
- 后端方案直接在服务器端校验当前请求的页面路径,从逻辑上跳过已经在目标页面时的重定向操作,更安全可靠。
你可以根据自己的场景选择其中一种方案,两种都能有效解决页面持续刷新的问题。
内容的提问来源于stack exchange,提问作者Person1
相关产品推荐
相关产品推荐

