ASP与Form一起工作
上次我们说ASP的目的是让页面与用户交互,那么,怎样得到用户的信息呢?当然是用Form,不论是CGI,IDC,JAVA,还是其他的什么技术,都是通过嵌在WWW页面中的Form来让浏览器的用户输入信息,然后,Form的提交动作,把数据传给了服务器,服务器再把数据传给CGI或是其他的什么程序.既然Form如此重要,那么这次就让我们来看一看在ASP中,怎样子获得用户在Form中输入的数据,同时,我们还将学到ASP是怎样将结果返回到WWW页面的.
首先,我们建立一个Form,他的HTML代码如下:
<HTML>
<HEAD><TITLE>定单</TITLE></HEAD>
<BODY>
<H2>定单Form例子</H2>
<P>
请向我们提供以下信息,然后单击"提交":
<FORM METHOD="POST" ACTION="response.asp">
<P>
姓: <INPUT NAME="fname" SIZE="48">
<P>
名: <INPUT NAME="lname" SIZE="48">
<P>
称呼: <INPUT NAME="title" TYPE=RADIO VALUE="先生">先生
<INPUT NAME="title" TYPE=RADIO VALUE="女士">女士
<P><INPUT TYPE=SUBMIT VALUE="提交"><INPUT TYPE=RESET VALUE="清除">
</FORM>
</BODY>
</HTML>
这个表单是一个简单的定单例子,它接收客户的姓名,称呼,然后用POST方法将数据提交.我们知道,表单(Form)提交数据常有两种方法,一种是GET,一种是POST,对于GET提交的数据,WWW服务器将把数据放在环境变量QUERY_STRING中,对于POST方法,数据被送到WWW服务器的STDOUT中,然后CGI从自己的STDIN中读取.传统的CGI方法必须自己处理这些数据.可是在ASP中,采用了面向对象的思想,所有从浏览器来的数据都被封装进了对象Request中.Request有方法Form和Querystring,分别返回用POST方法和GET方法提交的数据.我们要得到表单提交的数据,只需用
Request.Form("表单域名") 或
Request.Querystring("查询参数名")
就可以了.
好了,接下来就让我们建立.asp文件Response.asp来处理上面的表单提交的数据吧,这里,我们只是简单的将用户提交的数据返回给用户.
<HTML>
<HEAD></HEAD>
<BODY>
<%
Title = Request.Form("title")
LastName = Request.Form("lname")
If Title = "先生" Then
%>
<%= LastName %>先生
<% ElseIf Title = "女士" Then %>
<%= LastName %>女士
<% Else %>
<%= Request.Form("fname") & " " & LastName %>
<% End If %>
</BODY>
</HTML>
恩,上面这段代码有些难懂吧,不要怕,一会儿之后,你就会说,好简单啊.那,我们来分析一下它吧.首先,他的开头和结尾都和普通的HTML代码没有什么两样,关键是中间.如果略去定界符<%和%>,然后将前面没有东西的等号换成 Print ,它就变成了:
Title=Request.Form("title")
LastName=Request.Form("lname")
If Title="先生" Then
print LastName 先生
ElseIf Title="女士" Then
print LastName 女士
Else
print Request.Form("fname")&" "& LastName
End If
这是不是VB?很简单吧?
有一点说明的是,.asp文件中,不在定界符之内的字符,当成普通的HTML解释.如上面的"先生","女士".ASP自己的输出用一个等号加上对象名来实现(当然,ASP的代码在定界符之内).如上面的<%=LastName%>.其实,在.asp文件中,任何对象要作用到定界符之外就要用这种形式:<%=对象名%>.
至于IF..THEN判断分支,就不用我解释了吧:)
上面我们用<%=对象名%>来实现ASP向页面的数据输出,使得.asp文件看起来比较接近HTML文件,下面我们用另一种方法来实现:
<HTML>
<HEAD></HEAD>
<BODY>
<%
Title = Request.Form("title")
LastName = Request.Form("lname")
If Title = "先生" Then
Response.Write LastName & "先生"
ElseIf Title = "女士" Then
Response.Write LastName & "女士"
Else
Response.Write Request.Form("fname") & " " & LastName
End If %>
</BODY>
</HTML>
除了开头和结尾,这看起来是不是更像一个VB程序?对了,我们用了另一个ASP内置对象Response的Write方法来输出数据.
到底用哪一种方法,那要看你的喜欢了,不过,要是有许多格式控制指令,都当成串用Write来输出,确实很麻烦的.我偏爱第一种方法:)
上面我们学了用ASP处理用POST方法提交的数据,那么,对于用GET方法提交的数据,又怎样处理呢?其实,处理都是一样的,只不过取得表单数据的方法不同罢了,比如我们要取得"title"的值,就用:
Request.Querystring("title")
对于如下方法调用.asp文件,也要用这种方法处理:
<a href="response.asp?title=先生&fname=张&lname=三">xxxxx</a>
(其实,表单的GET方法最后也被转换成了这种形式.)
大家一定要注意,用什么方法调用的.asp文件,就应当用相应的方法接收查询数据,不然,你老是被报告查询参数为空,我就遇到过许多次^_^