经典ASP表单不会在页面刷新时发布

时间:2010-08-02 23:56:36

标签: forms asp-classic

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

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

当我刷新一个FORM帖子的结果页面时,有没有办法强制重新发布?

4 个答案:

答案 0 :(得分:1)

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

无论是Request["a"]还是Request.QueryString["a"]

Request.Form["a"]都会找到 a

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

您需要做的是在Cookie,会话或数据/文件存储中记录最新请求,并在每个请求上检查请求是否在删除数据之前处理。

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

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

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

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

答案 3 :(得分:0)

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