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

问题描述:

我有一个ASP页面,它在查询字符串上有两个参数。在页面上是一个发布回自己的表单。经典的ASP表单不会在页面刷新上发布

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

有没有办法总是强制重新发布,当我刷新页面是一个FORM职位的结果?

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

+0

好吧,正如人们所期望的那样,它与清爽无关。按下地址栏上的[enter]与刷新或重新加载无关 - 尽管您可以将其读为“重新加载”,但最好将其视为“新加载”。 – cregox 2010-08-12 17:15:04

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

+0

它使用POST,但是当我从Fox的地址栏刷新URL时,它会从URL中重新加载该页面,该URL没有查询字符串,也不会执行表单发布。当我像这样刷新时,是否有办法强制它进行表单发布? – Caveatrob 2010-08-03 18:53:54

+0

你是说这个页面是从缓存中刷新的吗?如果是这样,请确保您遵循以下说明:http://support.microsoft.com/kb/234067。 – 2010-08-03 19:32:57

这听起来像你遇到的问题是发布时丢失了页面的一些重要参数。在ASP中,有两种主要的传递参数的方法,通过GET或POST形式在url字符串中传递。前者在QueryString字典中传递给你值,而后者在Form字典中给你。幸运的是,可以接受通过寻找Request对象在任何字典中存在参数:

Request["a"]会发现一个无论在Request.QueryString["a"]Request.Form["a"]之中。

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

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

您需要做的是将最近的请求记录到Cookie,会话或数据/文件存储以及每个请求中,然后在删除数据之前检查请求是否已处理。

既然知道您是为之后的查询字符串它可能只是像这样:

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

那么当您正在使用的要求做,你可以清除cookie值或设置querystring_handled =真。

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