Forms 如何将表单值传递到不同的重定向页面?

Forms 如何将表单值传递到不同的重定向页面?,forms,redirect,iis,vbscript,asp-classic,Forms,Redirect,Iis,Vbscript,Asp Classic,我刚刚开发了一个平台,在提交ID号后立即打印单个ASP文档,格式如下: <form action="http://localhost/teg/f1.asp" method="POST"> <input type="number" name="number" placeholder="Please Enter ID" /> <button type="submit">Print</button> <

我刚刚开发了一个平台,在提交ID号后立即打印单个ASP文档,格式如下:

<form action="http://localhost/teg/f1.asp" method="POST">
        <input type="number" name="number" placeholder="Please Enter ID" />
        <button type="submit">Print</button>        
</form>

印刷品
在本例中,它正在打印一个名为f1.asp的文档。但是,我也有f2.asp,所以我决定不为两个单独的字段编写两次表单,而是编写一次表单,并包含一个下拉列表,让用户选择打印内容,但为此,我想我需要另一个页面,我称之为重定向。表格更改如下所示:

<form action="http://localhost/teg/redirect.asp" method="POST" id="new">
        <input type="number" name="number" placeholder="Please Enter ID" />
        <button type="submit">Print</button>        
</form>
<label> Type </label>
<select name="list" form="new">
<option value="1">f1</option>
<option value="2">f2</option>  
</select>

印刷品
类型
f1
f2
重定向ASP页面的外观如下:

<html>
<body>
<%            
    Dim list
    list = request.form("list")
If list=1 Then response.redirect("f1.asp") Else If list=2 Then      response.redirect("f2.asp") End If
 %>


最后,当使用下拉列表单击“打印”时,它会完全重定向,但ID编号字段中的“编号”值未达到用户选择的文档类型,因此文档无法正确显示。相反,会出现以下数据库引擎错误:“80040e10”。任何帮助都将不胜感激

重要的是要记住,HTTP是无状态的,只有通过Cookie等技术,经典ASP才能跨HTTP请求在
会话
对象中存储值

目前,由于
Response.Redirect()
Request.Form(“number”)的值在发送新请求时丢失。有几种方法可以解决这个问题,这里我将重点介绍三种

1.将值作为查询字符串通过重定向传递 最简单的方法是传递使重定向页面正常工作所需的值

0和IsNumeric(list)然后list=CLng(list)Else list=0
如果Len(id)>0且为数字(id),则id=CLng(id)否则id=0
“******只有当我们有有效的值来构建重定向时,才进行处理*****
暗url
如果列表>0且id>0,则
'我们有有效的值来构建我们将在中使用的URL
'重定向呼叫。
url=“f”&list&“.asp?id=“&id
其他的
'请求有问题,请返回表单页。
'设置此选项将在
'调用重定向。
url=“formpage.asp”
如果结束
'发出重定向请求。
呼叫响应.重定向(url)
%>
然后在重定向页面中,使用
Request.querystring(“id”)
调用
id
querystring值


2.使用
Server.Transfer()
方法 在某些情况下,您可以使用此方法简化代码。简单来说,不是重定向它,而是将请求的页面“缝合”到当前请求的底部,从而允许仍然可以访问表单参数,因为就Internet浏览器而言,从技术上讲,表单参数仍然是相同的请求

0和IsNumeric(list)然后list=CLng(list)Else list=0
如果Len(id)>0且为数字(id),则id=CLng(id)否则id=0
如果列表>0且id>0,则
调用Server.Transfer(“f”&list&“.asp”)
其他的
'在此处处理无效请求
如果结束
%>
您将能够在传输的页面中使用
请求
对象中的任何值,例如
.Form
查询字符串
,而不会产生错误,因为就服务器而言,它们仍然是同一页面


3.在
会话
对象中存储值 如果在IIS中将
Enable Session State
设置为
True
,则可以在
Session
对象中跨请求存储值(经典ASP使用会话Cookie在服务器内存中维护会话状态)

0和IsNumeric(list)然后list=CLng(list)Else list=0
如果Len(id)>0且为数字(id),则id=CLng(id)否则id=0
如果列表>0,则
'存储要在会话中保留的值。
会话(“打印id”)=id
调用Response.Redirect(“f”&list&“.asp”)
其他的
'在此处处理无效请求。
如果结束
%>

然后在一天的晚些时候使用
varname=Session(“PrintId”)
将值返回重定向页面,但要简单一点。与重定向不同,只需使用操作URL和所有数据填充一个新表单,然后在验证后使用JS提交触发提交。不利的一面是JS可能会被击倒,但随后会做一个捕获,以及,好的,替代选项。原因是我一直在寻找类似的结果,直到我意识到重定向是不必要的。

重定向时,您会丢失
number
form post参数。在重定向页面中,将
Request.Form(“number”)
存储在变量中,然后将该变量传递给重定向
Response.redirect“fi.asp?”&yourvar
。另一种可行的方法是
Server.Transfer
,它不会进行硬重定向,并允许您使用表单发布的参数。可能是重复的,谢谢!优秀的代码。我尝试了第一种方法,但出于某种原因,表单页面总是在单击按钮后显示。@AlexanderLopez,这是因为它假定
list
number
的值是数字,如果不是,它们被设置为<代码> 0 <代码>,并且不通过检查<代码>如果列表> 0,ID > 0,然后< /代码>。实际上,我试图通过从数据库中输入真实ID号来打印一个文档,我认为代码只是通过检查的唯一方式。然而,在提交数据后是否仍有可能立即获得formpage?@AlexanderLopez如果你看一下我提供的代码是的,如果
list
number
的值都是
0
(注意
if
语句
Else
你会看到它重定向到
formpage.asp
)。如果您不希望从
Else
中删除该重定向,但可能会传递不正确的数据。如果
Request.form(“list”)
Request.form(“number”)
的值不都是数字,则首先要对表单输入进行sanating,然后将其设置为
0
,并在尝试重定向之前进行检查。我在示例1中添加了一些注释