【发布时间】:2011-03-24 11:44:10
【问题描述】:
我有一个 ASP 页面,它在查询字符串上有两个参数。页面上有一个回发给自身的表单。
如果我发布一次表单,然后尝试刷新页面,它不会重新发布表单。它像第一次加载一样加载页面,缺少查询字符串值。
当我刷新作为 FORM 帖子结果的页面时,是否有办法始终强制重新发布?
【问题讨论】:
标签: forms asp-classic
我有一个 ASP 页面,它在查询字符串上有两个参数。页面上有一个回发给自身的表单。
如果我发布一次表单,然后尝试刷新页面,它不会重新发布表单。它像第一次加载一样加载页面,缺少查询字符串值。
当我刷新作为 FORM 帖子结果的页面时,是否有办法始终强制重新发布?
【问题讨论】:
标签: forms asp-classic
在这种情况下,您仍然可以维护提交的值。
您需要做的是在 Cookie、Session 或数据/文件存储中记录最近的请求,并在每个请求中,在删除数据之前检查请求是否已得到处理。
因为你所追求的是查询字符串,所以它可能是这样的:
Response.Cookies("tempdata")("querystring") = Request.ServerVariables("QUERY_STRING")
Response.Cookies("tempdata")("querystring_handled") = false
然后,当您完成该请求后,您可以清除 cookie 值或设置 querystring_handled = true。
在某些情况下,这可能会导致一些冲突,但您知道,一旦服务器接收到请求,您仍然可以记住该请求。
【讨论】:
问题是我要进入 Firefox 地址栏并按 Enter。这导致 URL 重新加载(当然它在重新发布后没有查询字符串)。所以 - 教训是检查传入的变量和表单变量,看看页面是否已手动刷新我想......
【讨论】:
听起来您遇到的问题是在发布时丢失了页面的一些基本参数。在 ASP 中有两种主要的参数传递方法,通过 GET 在 url 字符串中或从表单 POST。前者在 QueryString 字典中将值传递给您,而后者在 Form 字典中将它们提供给您。幸运的是,您可以通过查看 Request 对象来接受 EITHER 字典中存在的参数:
Request["a"] 会找到 a,无论是在 Request.QueryString["a"] 还是 Request.Form["a"]。
这将帮助您解决当前的困境,因为您可以在页面初始加载时将查询字符串参数作为<input type="hidden" 字段简单地写入表单。在后续帖子中,无论是在 URL 中(初始加载时)还是通过后续调用中的帖子传递,您对参数的 Request["a"] 搜索都会找到它们。
【讨论】:
表单使用哪种操作:GET 还是 POST?通常,表单会使用 POST 操作,但在这种情况下,如果您使用已发布的表单刷新页面,您将不会在查询字符串中获得任何内容,因为查询字符串仅通过 GET 操作传递。假设这个问题不是由页面缓存引起的,在我看来它就像设计的那样工作(如果表单发布数据)。如果缺少查询字符串,请确保处理表单变量。
【讨论】: