【发布时间】:2020-07-05 19:28:35
【问题描述】:
第1页有按下按钮时的流动代码逻辑
If MyDataIsValid() Then
ScriptManager.RegisterStartupScript(me, me.GetType(), "PopUp", "", False)
Response.Redirect("~/Page2", false)
Else
ScriptManager.RegisterStartupScript(me, me.GetType(), "PopUp", <some js for a popup>, False)
End If
如果我第一次按下按钮并且数据无效,那么将显示弹出窗口。 第二次使用有效数据,页面重定向到 Page2。 如果我通过按浏览器上的后退按钮向后导航,将显示弹出窗口。这就是问题所在,弹出窗口会错误地告诉我我的数据不正确。
我知道我可以在 Page2 上创建一个按钮来将我重定向到 Page1,但我也希望浏览器的后退按钮能够正常工作。
当使用浏览器后退按钮向后导航时,Page1 中的 Load 事件不会运行。页面加载我第一次按下按钮时的缓存页面。
我试过了
Response.Cache.SetCacheability(HttpCacheability.NoCache)
或
Response.Buffer = true
Response.CacheControl = "no-cache"
Response.AddHeader("Pragma", "no-cache")
Response.Expires = -1441
所以页面不会缓存但它不起作用。页面不会在浏览器的后退按钮处重新加载。
【问题讨论】:
-
它与缓存没有任何关系,通过注册启动脚本并执行回发,您将内联(注入)脚本呈现到页面中。编辑:后退按钮确实拉出一个缓存页面,但它不是客户端请求和服务器响应场景。
-
您可能应该在这个弹出脚本中引入条件检查,在这个后退按钮场景中抑制它。类似于检查以确保控件视图状态相同。您能提供
<some js for a popup>的样本和表格吗?另外,请添加适当的应用程序标签。我觉得这是一个网络表单,对吗? -
@Brett Caswell:“后退按钮确实拉出一个缓存页面”,是的,但这是我第一次按下按钮时的页面,而不是第二次,当数据有效时。跨度>
-
这里的区别是您没有获得与请求相关的缓存。后退按钮本质上是从上一个\最后一个响应加载下载的页面。具有无条件执行的内联脚本的响应。
-
@BrettCaswell,正确。问题是如何删除内联脚本。如果我在重定向之前重置内联脚本不起作用。
标签: javascript asp.net vb.net webforms