【问题标题】:Classic ASP form doesn't post on page refresh经典 ASP 表单不会在页面刷新时发布
【发布时间】:2011-03-24 11:44:10
【问题描述】:

我有一个 ASP 页面,它在查询字符串上有两个参数。页面上有一个回发给自身的表单。

如果我发布一次表单,然后尝试刷新页面,它不会重新发布表单。它像第一次加载一样加载页面,缺少查询字符串值。

当我刷新作为 FORM 帖子结果的页面时,是否有办法始终强制重新发布?

【问题讨论】:

    标签: forms asp-classic


    【解决方案1】:

    在这种情况下,您仍然可以维护提交的值。

    您需要做的是在 Cookie、Session 或数据/文件存储中记录最近的请求,并在每个请求中,在删除数据之前检查请求是否已得到处理。

    因为你所追求的是查询字符串,所以它可能是这样的:

     Response.Cookies("tempdata")("querystring") = Request.ServerVariables("QUERY_STRING")
     Response.Cookies("tempdata")("querystring_handled") = false
    

    然后,当您完成该请求后,您可以清除 cookie 值或设置 querystring_handled = true。

    在某些情况下,这可能会导致一些冲突,但您知道,一旦服务器接收到请求,您仍然可以记住该请求。

    【讨论】:

      【解决方案2】:

      问题是我要进入 Firefox 地址栏并按 Enter。这导致 URL 重新加载(当然它在重新发布后没有查询字符串)。所以 - 教训是检查传入的变量和表单变量,看看页面是否已手动刷新我想......

      【讨论】:

      • 嗯,正如人们所预料的那样,它与刷新无关。在地址栏上按 [enter] 与刷新或重新加载无关 - 尽管您可以将其理解为“重新加载”,但最好将其视为“新加载”。
      【解决方案3】:

      听起来您遇到的问题是在发布时丢失了页面的一些基本参数。在 ASP 中有两种主要的参数传递方法,通过 GET 在 url 字符串中或从表单 POST。前者在 QueryString 字典中将值传递给您,而后者在 Form 字典中将它们提供给您。幸运的是,您可以通过查看 Request 对象来接受 EITHER 字典中存在的参数:

      Request["a"] 会找到 a,无论是在 Request.QueryString["a"] 还是 Request.Form["a"]

      这将帮助您解决当前的困境,因为您可以在页面初始加载时将查询字符串参数作为<input type="hidden" 字段简单地写入表单。在后续帖子中,无论是在 URL 中(初始加载时)还是通过后续调用中的帖子传递,您对参数的 Request["a"] 搜索都会找到它们。

      【讨论】:

        【解决方案4】:

        表单使用哪种操作:GET 还是 POST?通常,表单会使用 POST 操作,但在这种情况下,如果您使用已发布的表单刷新页面,您将不会在查询字符串中获得任何内容,因为查询字符串仅通过 GET 操作传递。假设这个问题不是由页面缓存引起的,在我看来它就像设计的那样工作(如果表单发布数据)。如果缺少查询字符串,请确保处理表单变量。

        【讨论】:

        • 它使用 POST,但是当我从 Fox 中的地址栏刷新 URL 时,它会从没有查询字符串且没有表单的 URL 重新加载页面邮政。当我这样刷新时,有没有办法强制它发布表单?
        • 你是说页面是从缓存中刷新的吗?如果是这样,请确保遵循以下说明:support.microsoft.com/kb/234067.
        猜你喜欢
        • 1970-01-01
        • 2016-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-25
        • 2014-06-19
        • 2011-07-11
        • 1970-01-01
        相关资源
        最近更新 更多