我刚刚开发了一个平台,可以在使用下面显示的表单提交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>
重定向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
%>
最后,当使用下拉列表单击“打印”时,它会完全重定向,但值为#34;数字&#34;从ID号字段到达用户选择的文档类型,因此文档未正确显示。而是出现以下数据库引擎错误:&#39; 80040e10&#39;。任何帮助,将不胜感激。
答案 0 :(得分:1)
重要的是要记住HTTP是无状态的,只有通过Cookie这样的技术才能让Classic ASP在HTTP请求中将值存储在Session
对象中。
目前由于Response.Redirect()
,Request.Form("number")
的值在发送新请求时丢失。有几种方法可以解决这个问题,我将在这里集中讨论三种方法。
最简单的方法是传递使您重定向的页面正常工作所需的值。
<%
'Assign our form values to local variables.
Dim list: list = Request.Form("list") & ""
Dim id: id = Request.Form("number") & ""
'Check the value contain data and they are valid numeric values.
If Len(list) > 0 And IsNumeric(list) Then list = CLng(list) Else list = 0
If Len(id) > 0 And IsNumeric(id) Then id = CLng(id) Else id = 0
'***** Only process if we have valid values to build the redirect. *****
Dim url
If list > 0 And id > 0 Then
'We have valid values build our URL that we will use in
'the redirect call.
url = "f" & list & ".asp?id=" & id
Else
'Something not right with request go back to the form page.
'Setting this will send the page back to the form page when the
'redirect is called.
url = "formpage.asp"
End If
'Make the redirect request.
Call Response.Redirect(url)
%>
然后在重定向的页面中使用id
调用Request.QueryString("id")
查询字符串值。
Server.Transfer()
方法在某些情况下,您可以使用此方法来简化代码。简单来说,它不是重定向,而是将所请求的页面“缝合”到当前请求的底部,从而允许仍然可以访问表单参数,因为就技术而言,就Internet浏览器而言,它仍然是相同的请求。
<%
Dim list: list = Request.Form("list") & ""
Dim id: id = Request.Form("number") & ""
If Len(list) > 0 And IsNumeric(list) Then list = CLng(list) Else list = 0
If Len(id) > 0 And IsNumeric(id) Then id = CLng(id) Else id = 0
If list > 0 And id > 0 Then
Call Server.Transfer("f" & list & ".asp")
Else
'Handle invalid request here
End If
%>
您可以在传输的网页中使用Request
对象中的任何值,例如.Form
和QueryString
,而不会产生错误,因为就服务器而言,它们是仍然是同一页。
Session
对象如果您在IIS中将Enable Session State
设置为True
,则可以在Session
对象内的请求中存储值(Classic ASP使用会话Cookie来维护服务器中的会话状态存储器)
<%
Dim list: list = Request.Form("list") & ""
Dim id: id = Request.Form("number") & ""
If Len(list) > 0 And IsNumeric(list) Then list = CLng(list) Else list = 0
If Len(id) > 0 And IsNumeric(id) Then id = CLng(id) Else id = 0
If list > 0 Then
'Store the value we want to persist in the Session.
Session("PrintId") = id
Call Response.Redirect("f" & list & ".asp")
Else
'Handle invalid request here.
End If
%>
然后,要重新获取重定向页面中的值,请使用varname = Session("PrintId")
。
答案 1 :(得分:0)
当天晚些时候,但要简单一些。无需进行重定向,只需使用操作URL和所有数据填充新表单,然后在验证后使用JS提交触发提交。不利的一面是JS可能会瘫痪,但要抓住机会,好吧,还有其他选择。因为我一直在寻求类似的答案,所以才做出迟到的答复,直到我意识到不必要的重定向。