4

话题说了算。短版:我需要一种方法来强制刷新页面仅在第一个页面加载。在 asp.net 中会很容易,但我不知道如何在经典 asp 中解决这个问题。

更长的版本:我正在尝试更新一个相当大的应用程序,它的一个问题是当您登录时,它还没有将必要的信息存储到会话中,除非您单击一些特定按钮或刷新页面。 . 这会在客户尝试浏览页面时导致问题。

我可以跟踪会话并手动设置它们,但我已经失败了几个小时,所以强制刷新会容易得多。如果只有一种方法可以检测初始页面加载,那么我就不会导致循环。重定向也是不可能的,因为应用程序有太多代码(所有这些实际上都没有注释和杂乱无章),我无法看到它实际上是如何构建所有验证校验和等的。

编辑:感谢您的回复,并对迟到的答案感到抱歉。从你们那里得到了一些好主意。:)

4

6 回答 6

6
  1. 检查会话 cookie 是否是第一次加载(true= 之前已加载,false= 第一次加载)。

  2. 一种。如果false,添加一个将页面重新加载到响应中的 js,并将 cookie 设置为true
    b。如果true,什么也不做。页面已重新加载。

只要用户不断更新会话,这应该只会使第一次加载立即重新加载。

编辑:作为对评论的回应,以下是会导致客户端页面重新加载的 javascript 示例。据我所知,这是独立于浏览器的:

<script type="text/javascript">window.reload();</script>

(我确实承认这看起来有点像 hack,但它会起作用。可能有其他方法可以使页面重新加载,而无需发送额外的 javascript 命令,但我不知道 Classic ASP 中的任何方法。)

于 2009-05-12T07:54:18.697 回答
2

尝试以下 3 个步骤:

  1. 在表单标签内添加一个名为firstload的隐藏文本框 ,并将其默认值设置为“true”
  2. 在 Window.Onload() 期间将 javascript 方法添加到页面以执行。javascript 应该检查firstload文本框的值,如果它为“true”,则重新加载页面,并将参数附加到查询字符串 (?reloaded=true)
  3. 在服务器端代码中,检查重新加载的查询字符串是否为真。如果是,则将firstload的值设置为“false”。
于 2009-05-12T08:05:25.993 回答
2

只需在您的应用程序中添加一个新页面,登录后重定向该页面.. 我的意思是,当客户端在 login.asp 中完成登录作业时。重定向 login2.asp.. 将 login2.asp 内容设置为一个简单的脚本..

<script type="text/javascript">window.location.href="home.asp"</script>
于 2009-05-12T08:19:42.913 回答
2

使用 VBScript。

您可以通过重定向到自身并使用查询字符串变量来重新加载页面:

<%
  Dim reload: reload = Request.Querystring("re") 
  If reload = "" Then
    Response.Redirect("samepage.asp?re=true")
  End If
%>

作为替代方案,您可以设置会话变量并检查:

<%
  If Session("reload") = "" Then
    Session("reload") = "true"
    Response.Redirect("samepage.asp")
  End If
%>
于 2009-05-12T08:44:38.537 回答
1

window.location="currentUrl?reloaded=true"如果说查询字符串参数'reloaded' == true,则在文档准备好的jQuery中重新加载页面。

像这样的东西:

<script type="text/javascript">
    $(document).ready(function() {
        if(!urlContainsReloadedIsTrue())
            window.location="currentUrl?reloaded=true";
        });
    });
</script>

你可以用这样urlContainsReloadedIsTrue()的东西来构建函数。

于 2009-05-12T07:55:19.753 回答
1

由于某种未知的原因,我在让 javascripts 工作时遇到了问题,所以最后我使用了这个简单的 codelet:

    如果会话(“Firstupdate”)<>“更新”那么
        Response.AddHeader "刷新", "0"
        session("Firstupdate") = "更新"
    别的
        Response.AddHeader "刷新", ""
        Session.Contents.Remove("Firstupdate")
    万一

这似乎独立于任何脚本,并且对于我的目的来说工作得很好。理想情况下,删除会话意味着虽然任何额外的刷新将再次强制页面进行 2 次刷新,但至少当更多客户涌入时,服务器不会加载无用的会话。我宁愿设置“Session.Timeout”明确地为“Firstupdate”变量,但显然超时对于整个会话对象及其包含的变量是通用的。

再次抱歉,回复晚了,感谢您的帮助。

于 2009-05-25T11:58:21.393 回答